python excel:中文字符的数据类型问题

时间:2013-07-25 03:14:37

标签: python

这是我在这个论坛上的第一个问题。我是python的初学者。

问题:我正在尝试从表中检索DB2(IBM I)数据并写入excel表(.xls)。为了获取数据,我使用pyodbc并写入excel,使用xlwt模块。 Col4拥有中国特色。我知道col4 CCSID是935并且pyodbc从数据库中检索数据,但是当我将此值写入excel表时,它会抛出以下错误消息。如果我打印它,则是来自dset1的数据。怎么把它写成excel而没有任何问题?

0(十进制('6331840'),'RUBO','587','\ x0e \ xa3 \ x1a \ x1a \ x1a',十进制('175'),十进制('3716')) 1(十进制('6331841'),'RUBO','587','\ x0e \ xa3 \ x1a \ x1a \ x1a',十进制('24'),十进制('340')) 2(十进制('6331842'),'RUBO','587','\ x0e \ xa3 \ x1a \ x1a \ x1a',十进制('100'),十进制('1821'))

File "C:\Python27\Tools\john\EOD_CMR report.py", line 82, in <module>
    sh.write(n, i, val)
  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\Row.py", line 259, in write
    raise Exception("Unexpected data type %r" % type(label))
Exception: Unexpected data type <type 'pyodbc.Row'>


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驱动程序本身中使用Microsoft unicode value = CCSID 1386对检索到的数据进行编码。

con_string = "Driver={iSeries Access ODBC Driver};System=veet;Database=veet;UID=" + user_id + ";pwd=" + password + ";SSL=YES;unicode_results=True;CCSID=1386"

参考:http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/index.jsp?topic=%2Fcom.ibm.mq.csqzak.doc%2Ffr22370_.htm

  1. 第二个是在工作簿启动期间使用xlwt解码此值,如下所示。

    book = xlwt.Workbook(encoding =“gb2312”)

  2. 参考:http://docs.python.org/2/library/codecs.html#standard-encodings

    感谢所有人给我一些指示

0 个答案:

没有答案