我是一个新的程序员,正在努力制作工具以使我的工作更轻松。这是我的代码和我从中得到的错误。我的问题是,在用户输入“空”时的循环处理中,它不会停在最快的空单元格中,而是迭代到xlwt可以处理的行数的末尾(65536)。该代码构建为仅故意处理一列。
这是错误:
File "sentenceconverter.py", line 114, in <module>
db1.write(i,0,new_cell)
File "C:\Python27\lib\site-packages\xlwt\Worksheet.py", line 1030, in write
self.row(r).write(c, label, style)
File "C:\Python27\lib\site-packages\xlwt\Worksheet.py", line 1078, in row
self.__rows[indx] = self.Row(indx, self)
File "C:\Python27\lib\site-packages\xlwt\Row.py", line 42, in __init__
raise ValueError("row index (%r) not an int in range(65536)" % rowx)
ValueError: row index (65536) not an int in range(65536)
`这是代码(由于我所做的编辑,我的一些评论不准确):
#import everything
import xlrd
import xlwt
import sys
from sys import argv
import string
#get workbooks from command line
script,workbook1,destination = argv
#set the limit of cells to loop through
#cellnum=raw_input("How many cells do you want to work with?")
#open the workbooks for working with
wb=xlrd.open_workbook(workbook1)
sh=wb.sheet_by_index(0)
db=xlwt.Workbook()
#manage db for writing
db1=db.add_sheet('Definition')
new_cell=[]
cell_l=""
printable=string.printable
printable_n=printable.replace(".","").replace(":","").replace(string.lowercase,"").replace(string.uppercase,"")
printable_m=printable_n
#main loop
i=0
answer=raw_input("Til [empty] or til [row]?")
if answer == "row":
cellnum=raw_input("How many rows? do you want to work with?")
while i<=(int(cellnum)-1):
new_cell=[]
#reference correct cell and convert it to string format from unicode
cell_x=sh.cell_value(i,0)
cell_str=cell_x
#capitalize
if cell_str[0].islower():
cell_str_2=cell_str.capitalize()
else:
cell_str_2=cell_str
#add period
if any((c in printable_m) for c in cell_str_2[-1]):
#if cell_str_2[-1].contains(printable_m):
cell_str_f=cell_str_2[:-1]
new_cell+=cell_str_f+"."+"\n"
elif cell_str_2[-1]!="." and cell_str_2[-1]!=":":
new_cell+=cell_str_2+"."+"\n"
else:
new_cell+=cell_str_2+"\n"
#add cell to new sheet
db1.write(i,0,new_cell)
#iterate to next cell
i+=1
elif answer =="empty":
cell_type = sh.cell_type(i,0)
cell_x=sh.cell_value(i,0)
t=1
while t>0:
if cell_type == xlrd.XL_CELL_EMPTY:
t=0
else:
new_cell=[]
cell_str=cell_x
#capitalize
if cell_str[0].islower():
cell_str_2=cell_str.capitalize()
else:
cell_str_2=cell_str
#add period
if any((c in printable_m) for c in cell_str_2[-1]):
cell_str_f=cell_str_2[:-1]
new_cell+=cell_str_f+"."+"\n"
elif cell_str_2[-1]!="." and cell_str_2[-1]!=":":
new_cell+=cell_str_2+"."+"\n"
else:
new_cell+=cell_str_2+"\n"
#add cell to new sheet
db1.write(i,0,new_cell)
#iterate to next cell
i+=1
#db1.write(i,0,new_cell)
else:
sys.exit("Didn't work. Make sure you input everything as prompted.")
#save and close
db.save(destination)
`
答案 0 :(得分:1)
我猜你希望cell_type
和cell_x
始终是i,0处单元格的类型和值,即使i
发生变化也是如此。如果是这样,您应该在while
循环中分配它们,而不是在外部。
while t>0:
cell_type = sh.cell_type(i,0)
cell_x=sh.cell_value(i,0)
if cell_type == xlrd.XL_CELL_EMPTY:
t=0
else:
new_cell=[]
cell_str=cell_x
#...etc
答案 1 :(得分:0)
好的,我找到了答案:
elif answer =="empty":
while i<=(sh.nrows-1):
cell_type = sh.cell_type(i,0)
cell_x=sh.cell_value(i,0)
new_cell=[]
.
.
db1.write(i,0,new_cell)
i+=1
我仍然不确定为什么我之前的答案是错误的,但是我把它吸了起来并使用与&#34;行相同的格式&#34;环。我认为这段代码实际上消除了对问题的需求,至少对我来说是这样。