لماذا تفشل حلقة Python هذه في الإخراج إلى صف Excel التالي المتاح؟

StackOverflow https://stackoverflow.com//questions/21016246

سؤال

اولا في المقام الاول اولا قبل كل شي:شكرا على أي مساعدة مقدما.أنا مبتدئ في البرمجة، وسيعكس الكود الخاص بي ذلك.سأحاول وصف ما أحاول القيام به، وعرض الرمز.مرة أخرى، أشكركم على وقتك والتوضيحات.

الهدف: أريد أن أطلب من لغة python فتح ملف Excel موجود (output.xls)، وإدخال قيمة (في هذه الحالة، "نص اختباري") إلى الصف التالي المتاح في ذلك المستند.لقد حاولت استخدام حلقة "أثناء" وعبارة "إذا" لإنجاز ذلك.على الرغم من عدم إرجاع أي أخطاء، إلا أن كلاهما يفشل في نقل الإخراج بشكل صحيح بعد السطر الثاني.وهنا ما لدي.

from xlrd import open_workbook
from xlutils.copy import copy
import xlwt

wb = open_workbook('output.xls',formatting_info=True)
sheet = wb.sheet_by_name("sheet 1")

#This is the simple test text here.
a = 'just a test'

rb = copy(wb)
ws = rb.get_sheet(0)

row = 0
cell = sheet.cell(row,4)

ما أحاول قوله أدناه هو -بينما- الخلية ليست فارغة (اكتب 6)، ثم قم بإضافة خلية إلى الصف وكرر الأمر.أي:استمر في ذلك حتى تصل إلى صف فارغ في العمود الرابع.

while cell.ctype != 6:
    row = row + 1

ws.write(row,4,a)

وهنا، آمل أن أتأكد من النتائج.

print cell.ctype
rb.save('output.xls')

بغض النظر، عندما أقوم بتشغيل الكود، لا يبدو أنه تجاوز السطر الأول.يبدو الأمر كما لو أن الكود يقول، "رائع، الخلية الأولى ليست من النوع السادس،" لكنها لا تتجاوز ذلك.على الرغم من ساعات البحث على الشبكة، يبدو أنني لا أستطيع العثور على سبب لذلك.

أي مساعدة / توجيه هو موضع تقدير كبير.

--- يحرر ---

إليك الأخطاء التي أتلقاها في الردود المقترحة.الخطأ متطابق.

Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\Folder", line 19, in <module>
    cell = sheet.cell(row,4)
  File "C:\Python27\lib\site-packages\xlrd\sheet.py", line 395, in cell
    xfx = self.cell_xf_index(rowx, colx)
  File "C:\Python27\lib\site-packages\xlrd\sheet.py", line 421, in cell_xf_index
    xfx = self._cell_xf_indexes[rowx][colx]
IndexError: list index out of range
هل كانت مفيدة؟

المحلول

لن تنتقل أبدًا إلى الخلية التالية.مجرد تغيير المتغير row لا يؤثر cell.جرب هذا الكود بدلا من ذلك:

cell = sheet.cell(row,4)
while cell.ctype != 6:
    row = row + 1
    if row >= sheet.nrows:
        break
    cell = sheet.cell(row,4)   # <-- actually move the "pointer" in the excel sheet

نصائح أخرى

لديك مؤشر الصف المتقدمة - لكنك لا تقرأ خلية جديدة، لذلك تظل خليةك هي نفسها، وتدخل حلقة لا نهاية لها

giveacodicetagpre. يجب أن تعمل

تحرير:

أنت تحصل على نفاد الصفوف - ثابتة بسهولة

giveacodicetagpre.

شخصيا، لدي شعور بأنك يعمل بسرعة كبيرة - أنت تحاول الحصول على أساس عميق دون أساسيات التعلم

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top