将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?