Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个Python循环无法输出到下一个可用的excel行?_Python_Excel_Xlrd_Xlwt_Xlutils - Fatal编程技术网

为什么这个Python循环无法输出到下一个可用的excel行?

为什么这个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

首先也是最重要的一点:感谢您事先提供的任何帮助。我是一个完全的编程新手,我的代码将反映这一点。我将尝试描述我正在尝试做的事情,并显示代码。再次感谢您的时间和解释

目标:我想让python打开一个现有的excel文件(output.xls),并在文档中的下一行输入一个值(在本例中为“test text”)。我尝试使用“while”循环和“if”语句来完成此操作。尽管两个都没有返回错误,但它们都无法正确地将输出移过第二行。这是我得到的

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)