为什么这个Python循环无法输出到下一个可用的excel行?
首先也是最重要的一点:感谢您事先提供的任何帮助。我是一个完全的编程新手,我的代码将反映这一点。我将尝试描述我正在尝试做的事情,并显示代码。再次感谢您的时间和解释 目标:我想让python打开一个现有的excel文件(output.xls),并在文档中的下一行输入一个值(在本例中为“test text”)。我尝试使用“while”循环和“if”语句来完成此操作。尽管两个都没有返回错误,但它们都无法正确地将输出移过第二行。这是我得到的为什么这个Python循环无法输出到下一个可用的excel行?,python,excel,xlrd,xlwt,xlutils,Python,Excel,Xlrd,Xlwt,Xlutils,首先也是最重要的一点:感谢您事先提供的任何帮助。我是一个完全的编程新手,我的代码将反映这一点。我将尝试描述我正在尝试做的事情,并显示代码。再次感谢您的时间和解释 目标:我想让python打开一个现有的excel文件(output.xls),并在文档中的下一行输入一个值(在本例中为“test text”)。我尝试使用“while”循环和“if”语句来完成此操作。尽管两个都没有返回错误,但它们都无法正确地将输出移过第二行。这是我得到的 from xlrd import open_workbook f
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)时,将一个单元格添加到行中并重复。IE:继续,直到你在第四列中找到一个空行为止
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
回溯(最近一次呼叫最后一次):
文件“C:\Users\Administrator\Desktop\Folder”,第19行,在
单元格=工作表单元格(第4行)
文件“C:\Python27\lib\site packages\xlrd\sheet.py”,第395行,在单元格中
xfx=self.cell\uxf\u索引(rowx,colx)
文件“C:\Python27\lib\site packages\xlrd\sheet.py”,第421行,位于单元格xf\u索引中
xfx=self.\u单元格xf\u索引[rowx][colx]
索引器:列表索引超出范围
您推进行索引-但您不读取新单元格,因此单元格保持不变,并进入一个无休止的循环
while cell.ctype != 6:
row = row + 1
cell = sheet.cell(row,4)
应该有用
编辑:
您的行数越来越少-很容易修复
try:
while cell.ctype != 6:
row = row + 1
cell = sheet.cell(row,4)
except IndexError:
<do something>
试试看:
while cell.ctype!=6:
行=行+1
单元格=工作表单元格(第4行)
除索引器外:
就我个人而言,我觉得你跑得太快了——你试图在不学习基础知识的情况下走得太深了你永远不会移动到下一个单元格。仅更改变量
行
不会影响单元格
。请尝试以下代码:
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
cell=sheet.cell(第4行)
while cell.ctype!=6:
行=行+1
如果行>=sheet.nrows:
打破
cell=sheet.cell(第4行)#感谢您的快速帮助。我已经尝试过这种效果,下面是我收到的错误。编辑:事实上,我不能在这里把它格式化。我将用我得到的错误编辑上面的原始问题。这个错误意味着你用数据迭代了工作表中最后一行之外的内容。当row>=sheet.nrows
时停止。感谢您的解释——这肯定有助于澄清问题+这里有1个知识。感谢您的编辑/修复!它就像一个符咒。同样地:我认为你行动太快是对的。我绝对是一个不好的学习者。我在努力学习我想要的东西,从基础知识中学习,并且时不时地发生这种类型的事件。不管怎样,非常感谢你的帮助。你让我高兴极了o)