pyodbc
を使用してMS SQLサーバーに接続しています。さらに、openpyxl
を使用してExcel 2007/10 .xlsx
ファイルに書き込もうとしています。Excel 2007にユニコード文字列を書き込む
これは私のコード(Pythonの2.7):この
import pyodbc
from openpyxl import Workbook
cnxn = pyodbc.connect(host = 'xxx',database='yyy',user='zzz',password='ppp')
cursor = cnxn.cursor()
sql = "SELECT TOP 10 [customer clientcode] AS Customer, \
[customer dchl] AS DChl, \
[customer name] AS Name, \
...
[name3] AS [name 3] \
FROM mydb \
WHERE [customer dchl] = '03' \
ORDER BY [customer id] ASC"
#load data
cursor.execute(sql)
#get colnames from openpyxl
columns = [column[0] for column in cursor.description]
#using optimized_write cause it will be about 120k rows of data
wb = Workbook(optimized_write = True, encoding='utf-8')
ws = wb.create_sheet()
ws.title = '03'
#append column names to header
ws.append(columns)
#append rows to
for row in cursor:
ws.append(row)
wb.save(filename = 'test.xlsx')
cnxn.close()
は、例えば、少なくともまで、私がを顧客に遭遇する時点まで、作品、名前:"mún"
。私のコードは失敗せず、すべてがExcelに書き込まれ、すべて正常です。つまり、実際にExcelファイルを開くまでは、ファイルが破損して修復が必要であるというエラーが表示されます。ファイルを修復すると、すべてのデータが失われます。
通常の名前(ASCIIのみ)を使用しているお客様には、コードがアクセント付きの文字やExcelファイルが破損するとすぐに機能することが分かります。
私は、1つの行を印刷しようとしました。これが結果です:
row
はタプルで、指標のこの1:'Mee\xf9s Tilburg'
だからどちらか\xf9 (ú)
文字を書くと、エラーが発生し、またはMS Excelが、それに対処することはできません。私はユニコード(unicode(row,'utf-8')
またはu''.join(row)
)などに行をエンコードするさまざまな方法を試しましたが、何も動作しません。どちらかといえば、何かばかげたことが起こってエラーが発生したり、Excelファイルがエラーになったりします。
アイデア?最後に
接続文字列は、奇妙に思えるかもしれませんが、それはpmssqlこのインスタンスでした。しかし、私の問題は接続ではありません! – Rym
あなたの問題と正確には重複しませんが、ここで解決策を見つけることができます:http://stackoverflow.com/questions/9148221/reading-unicode-from-sqlite-db-using-python –
'pyodbc 3.0で再現できません.6 'と' 'openpyxl 1.6.1'。 'mún'は' u'm \ xfan''としてカーソルにエンコードされます。 – Bryan