excel - python: 测试单元格是否为空时的无限循环

  显示原文与译文双语对照的内容
0 0

我是一个新程序员,messing试图让我的工作变得更容易。 这是我的代码和我从它得到的错误。 我的问题是在用户输入"空白"时,它不会停止在最快的空单元格,但是迭代到xlwt的行数。 生成代码的目的是只处理一个列。

这是错误:


 File"sentenceconverter.py", line 114, in <module>
db1.write(i,0,new_cell)
 File"C:Python27libsite-packagesxlwtWorksheet.py", line 1030, in write
self.row(r).write(c, label, style)
File"C:Python27libsite-packagesxlwtWorksheet.py", line 1078, in row
self.__rows[indx] = self.Row(indx, self)
File"C:Python27libsite-packagesxlwtRow.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)

`This是代码( 我的一些评论是不准确的,因为我做的编辑):


#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 0

我想你希望 cell_typecell_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

原作者:
0 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

我仍然不确定为什么以前的答案是错误的,但是我吸取了它,并使用了与"行"循环相同的格式。 我认为这段代码实际上消除了对这个问题的需要,至少对于我。

原作者:
...