将 xlsm 转换为 csv
Convert xlsm to csv
我正在通过 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)
很明显,在处理原始文件中的 unicode 时存在问题。
在写入新文件之前,您可以考虑删除 unicode:
import re
text_without_unicode = re.sub(r'[^\x00-\x7f]', r'', text_with_unicode)
或使用 .encode('utf-8') / 解码函数
我只是想评论说我 运行 遇到了类似的问题,似乎对我有用的东西正在改变:
writer.writerows(sheet.row_values(row) for row in range(sheet.nrows))
至:
writer.writerows([x.encode('utf-8') for x in sheet.row_values(row)] for row in range(sheet.nrows))
(建议 Marc vT。)
我正在通过 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)
很明显,在处理原始文件中的 unicode 时存在问题。 在写入新文件之前,您可以考虑删除 unicode:
import re
text_without_unicode = re.sub(r'[^\x00-\x7f]', r'', text_with_unicode)
或使用 .encode('utf-8') / 解码函数
我只是想评论说我 运行 遇到了类似的问题,似乎对我有用的东西正在改变:
writer.writerows(sheet.row_values(row) for row in range(sheet.nrows))
至:
writer.writerows([x.encode('utf-8') for x in sheet.row_values(row)] for row in range(sheet.nrows))
(建议 Marc vT。)