3

これは、このフォーラムでの最初の質問です。私はpythonの初心者です。

質問: テーブルから DB2 (IBM I) データを取得し、Excel シート (.xls) に書き込もうとしています。データを取得するにはpyodbcを使用しており、Excelに書き込むにはxlwtモジュールを使用しています。Col4 は漢字を保持します。col4 CCSIDが935で、pyodbcがDBからデータをそのまま取得することはわかっていますが、この値をExcelシートに書き込むと、次のエラーメッセージがスローされます.以下は、印刷した場合のdset1からのデータです. これを問題なくExcelに書き込むにはどうすればよいですか?

0 (10 進数 ('6331840')、'ルボ'、'587'、'\x0e\xa3\x1a\x1a\x1a'、10 進数 ('175')、10 進数 ('3716')) 1 (10 進数 ('6331841) '), 'RUBO', '587 ', '\x0e\xa3\x1a\x1a\x1a', Decimal('24'), Decimal('340')) 2 (Decimal('6331842'), 'RUBO' , '587 ', '\x0e\xa3\x1a\x1a\x1a', Decimal('100'), Decimal('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)

問題の更新: 最終的に問題を解決しました。以下は、隠れたバグです。

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. 2 つ目は、以下のようにワークブックの開始時に xlwt を使用してこの値をデコードすることです。

    本 = xlwt.Workbook(encoding="gb2312")

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

これについていくつかの指示をくれてありがとう

4

0 に答える 0