У меня снова проблема с записью значений в книге Excel.Я понял, как использовать оба xlrd + xlwt для своих целей, но, поскольку я изменил код для преобразования значений и исключений даты-времени с некодированными строками, он больше не работает.
Traceback (most recent call last):
File "D:\rs_al\IdeaProjects\ExcelToSQL\PyXLSSQL\XLS_xlutils.py", line 96, in <module>
Excel.xls_wrk(filename)
File "D:\rs_al\IdeaProjects\ExcelToSQL\PyXLSSQL\XLS_xlutils.py", line 89, in xls_wrk
ws.write(row_idx,col_idx, val)
File "C:\Python\lib\site-packages\xlwt\Worksheet.py", line 1088, in write
self.row(r).write(c, label, style)
File "C:\Python\lib\site-packages\xlwt\Row.py", line 254, in write
raise Exception("Unexpected data type %r" % type(label))
Exception: Unexpected data type <class 'xlrd.sheet.Cell'>
Я проверил все ячейкитипы, есть только строка Unicode типа 1, тип 2 с плавающей запятой и тип 3 с плавающей запятой.Когда я печатаю значения, все в порядке.
Код:
import ftfy
import xlrd
import xlwt
from xlrd import open_workbook
class Excel:
#convertin to xlsx for working with openpyxl
def xls_wrk (filename):
#XLRD
rb = open_workbook('abbcards.xls')
rs = rb.sheet_by_index(0)
rows = rs.nrows
cols = rs.ncols
wb = xlwt.Workbook()
ws = wb.add_sheet('Part1')
#iterate and prepare format for SQL db tables
for row_idx in range (0,rows):
for col_idx in range (0,cols):
cell= rs.cell(row_idx, col_idx)
ctp_in = cell.ctype
cval = cell.value
#Input string value "whitespace" in empty cells
if (ctp_in == xlrd.XL_CELL_EMPTY):
ctp_in = xlrd.XL_CELL_TEXT
cval = " "
elif (ctp_in == xlrd.XL_CELL_ERROR):
ctp_in = xlrd.XL_CELL_TEXT
cval=" "
#Fixing date
elif (ctp_in == xlrd.XL_CELL_DATE):
#Manual fixing negative value
if (cval==-693594):
ctp_in=xlrd.XL_CELL_DATE
cval = rs.cell(row_idx, col_idx-7)
else:
ctp_in=xlrd.XL_CELL_DATE
cval=xlrd.xldate.xldate_as_datetime(cval, rb.datemode)
#fixing negative values
elif (ctp_in == xlrd.XL_CELL_NUMBER and cval < 0):
cval= 0
#Fixinig broking UTF-8 as 1252 letters with package ftfy
elif (ctp_in == xlrd.XL_CELL_TEXT):
#Broken UTF-8 that ftfy package can't fix. Manual fix
#CarPlate from "abbcardds"
if(cval=="Р869СЗ197"):
#ctp_in=xlrd.XL_CELL_TEXT
cval = "Р869СЗ197"
elif (cval=="H613Ð'Y"):
#ctp_in=xlrd.XL_CELL_TEXT
cval="H613BY" #important. Car plate number is in Latin
elif (cval=="Ð'509СÐ'777"):
#ctp_in=xlrd.XL_CELL_TEXT
cval="В509СВ177"
elif (cval=="Ð'674СС199"):
#ctp_in=xlrd.XL_CELL_TEXT
cval="В674СС199"
elif (cval=="T357KО777"):
#ctp_in=xlrd.XL_CELL_TEXT
cval = "T357KО777"
elif (cval =="Ð'010СС199"):
#=xlrd.XL_CELL_TEXT
cval="В010СС199"
elif (cval=="E174СР777"):
#ctp_in=xlrd.XL_CELL_TEXT
cval = "E174СР777"
else:
#ctp_in=xlrd.XL_CELL_TEXT
cval=ftfy.fix_text(cval)
#print(cval)
ws.write(row_idx,col_idx, cval)
wb.save('text.xls')