将xlsm转换为csv

时间:2016-12-19 20:45:41

标签: python python-2.7 csv xlrd

我正在解析vba宏加密的Excel文件并尝试复制Excel文件中的所有工作表但我的脚本不断爆炸。我的代码片段中我做错了什么。

import csv
import xlrd

workbook = xlrd.open_workbook('P:/NEW.xlsm')
for sheet in workbook.sheets():
    with open('{}.csv'.format(sheet.name), 'wb') as f:
        writer = csv.writer(f)
        writer.writerows(sheet.row_values(row) for row in range(sheet.nrows))

错误:

Traceback (most recent call last):
  File "C:/Users/datainput.py", line 8, in <module>
    writer.writerows(sheet.row_values(row) for row in range(sheet.nrows))
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 20: ordinal not in range(128)

2 个答案:

答案 0 :(得分:1)

显然,处理原始文件中的unicode存在问题。 在写入新文件之前,您可以查看删除unicode:

import re
text_without_unicode = re.sub(r'[^\x00-\x7f]', r'', text_with_unicode)

或使用.encode('utf-8')/ decode函数

答案 1 :(得分:0)

我只是想评论说我遇到了类似的问题,而似乎对我有用的东西正在发生变化:

List<int>

收件人:

writer.writerows(sheet.row_values(row) for row in range(sheet.nrows))

(向Marc vT提出建议)。