将unicode字符串写入Excel 2007

我使用pyodbc连接到MS SQL服务器。 此外,我正尝试使用openpyxl写入Excel 2007/10 .xlsx文件。

这是我的代码(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文件被损坏的任何内容。

我试图打印一行(带有困难的客户名称)。 这是结果:

row是一个元组,并且这个索引之一: 'Meexf9s Tilburg'因此,编写xf9 (ú)字符会导致错误,或者MS Excel无法应付它。 我尝试过用unicode编码一行的各种方法( unicode(row,'utf-8')u''.join(row) )等,尽管没有任何作用。 要么我尝试一些愚蠢的东西导致错误,或者Excel文件仍然存在错误。

有任何想法吗?


最后我发现了两个解决方案:

首先将光标给出的行转换为列表,并对列表中的元素进行解码:

for row in cursor:
    l = list(row)
    l[5] = l[5].decode('ISO-8859-1')
    (do this for all neccesary cols)
    ws.append(l)

我认为这将是地狱,因为有6列需要转换为unicode,并且有12万行,尽管实际上一切都非常快! 最后,很明显,我可以/只应该将sql语句中的数据转换为unicode(cast(x as nvarchar)AS y),这使得替换变得不必要。 起初我没有想到这一点,因为我认为它实际上是以unicode提供数据。 我的错。


您可以使用encode()将unicode转换为字符串:

l=[u'asd',u'qw',u'fdf',u'sad',u'sadasd']
l[4]=l[4].encode('utf8')
链接地址: http://www.djcxy.com/p/69915.html

上一篇: Writing unicode strings to Excel 2007

下一篇: How do I feed H.264 NAL units to Android MediaCodec for decoding?