I'm a new programmer messing around trying to make tools to make my job easier. Here is my code and the error I'm getting from it. My problem is that in the loop handling when the user inputs "empty", it doesn't stop at the soonest empty cell, but iterates to the end of the number of rows of what xlwt can handle(65536). The code is built to only handle one column on purpose.
This is the error:
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)
`This is the code(some of my comments are not accurate because of edits I've done):
#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)
`
Ok, I found the answer:
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
I'm still not exactly sure why my previous answers were wrong but I sucked it up and used the same format as the "rows" loop. I think this code actually removes the need for the question, at least for my purposes.