概述
这是我在这个论坛上的第一个问题。我是python的初学者。在
问:我试图从一个表中检索一个DB2(ibmi)数据并将其写入excel表(.xls)。为了得到数据,我使用了pyodbc,在excel中使用了xlwt模块。
Col4拥有汉字。我知道col4ccsid是935,pyodbc从DB中检索数据,但是当我将这个值写到excel表中时,会抛出以下错误下面是留言是dset1中的数据,如果我打印它。如何将其写入excel而不出现任何问题?在
0(十进制('6331840','RUBO','587','x0exa3x1ax1ax1a',十进制('175'),十进制('3716'))
1(十进制('6331841','RUBO','587','x0exa3x1ax1ax1a','Decimal('24'),Decimal('340'))
2(十进制('6331842','RUBO','587','x0exa3x1ax1ax1a','Decimal('100'),Decimal('1821'))File "C:Python27ToolsjohnEOD_CMR report.py", line 82, in
sh.write(n, i, val)
File "C:Python27libsite-packagesxlwtWorksheet.py", line 1030, in write
self.row(r).write(c, label, style)
File "C:Python27libsite-packagesxlwtRow.py", line 259, in write
raise Exception("Unexpected data type %r" % type(label))
Exception: Unexpected data type
import pyodbc
import os
import sys, traceback
import xlwt
#initiate excel
book = xlwt.Workbook()
sh = book.add_sheet('sheet1')
#get today date YYYYMMDD
now = datetime.datetime.now() # get today's date
today = str(now.year) + str(now.month).zfill(2) + str(now.day).zfill(2)
#SQL statement
sql1 = """SELECT col1, col2, col3, trim(col4)FROM lib.file WHERE date = %s""" % today
con_string = "Driver={iSeries Access ODBC Driver};System=veet;Database=veet;UID=" + user_id + ";pwd=" + password + ";SSL=YES;unicode_results=True"
cnxn = pyodbc.connect(con_string)
cur = cnxn.cursor()
# get the data
dset1 = cur.execute(sql1).fetchall()
cur.close()
# to write column name
x = ['Packlist', 'Carrier', 'Hub', 'City', 'Carton amount', 'DU']
n = 0
for i, hdr in enumerate(x):
sh.write(n,i,hdr)
for i, val in enumerate(dset1):
n+=1
sh.write(n, i, val)
name = today + 'xls'
book.save(name)
问题最新进展:
我终于解决了这个问题。下面是隐藏的bug。。
1第一个技巧是在ODBC驱动程序中使用microsoftcunicode value=ccsid1386对检索到的数据进行编码。。在
^{pr2}$
第二种方法是在工作簿初始化期间使用xlwt解码此值,如下所示。在
帐簿=xlwt.工作手册(encoding=“gb2312”)
谢谢大家给我指点迷津
最后
以上就是机智彩虹为你收集整理的python excel 数据类型_python-excel:汉字数据类型问题的全部内容,希望文章能够帮你解决python excel 数据类型_python-excel:汉字数据类型问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复