UnicodeDecodeError .xls使用 Python xlrd 将文件转换为 .xlsx



我正在努力从网页上自动化我们的月度报告流程。下载是.xls格式,我正在尝试将其转换为.xlsx以便我可以使用 openpyxl 操作它。代码将Excel文件下载到我的计算机上,但是我无法使用openpyxl或xlrd成功打开该文件,因为我收到UnicodeDecodeError。

在 Github 上阅读了一个线程后,我尝试手动打开文件并重新运行代码,文件能够成功打开。但是,正如他在线程中所说,必须手动打开文件违背了自动化该过程的目的。有谁知道我怎样才能克服这个问题?

这是引发错误的代码:

import xlrd, openpyxl
filePath = r'C:UsersDaly_Llama'
downloadName = filePath + "All Endpoints and MCUs   " + today.strftime("%Y%m%d") + '.xls'
# open_xls_as_xlsx function adaptation, original code by Ray at https://stackoverflow.com/questions/9918646/how-to-convert-xls-to-xlsx 
def open_xls_as_xlsx(filename):
    # open xls file using xlrd
    xlsBook = xlrd.open_workbook(filename)
    index = 0
    nrows, ncols = 0, 0
    while nrows * ncols == 0:
        xlsSheet = xlsBook.sheet_by_index(index)
        nrows = xlsSheet.nrows
        ncols = xlsSheet.ncols
        index += 1
    # prepare a xlsx sheet
    xlsxBook = Workbook()
    xlsxSheet = xlsxBook.get_active_sheet()
    for row in xrange(0, nrows):
        for col in xrange(0, ncols):
            xlsxSheet.cell(row=row, column=col).value = xlsSheet.cell_value(row, col)
    return xlsxBook
workbook = open_xls_as_xlsx(downloadName)

这是我收到的错误:

Traceback (most recent call last):
  File "C:UsersMeMonthlyReport.py", line 100, in <module>
    workbook = open_xls_as_xlsx(downloadName)
  File "C:UsersMeMonthlyReport.py", line 81, in open_xls_as_xlsx
    xlsBook = xlrd.open_workbook(filename)
  File "C:Program FilesPython37libsite-packagesxlrd__init__.py", line 157, in open_workbook
    ragged_rows=ragged_rows,
  File "C:Program FilesPython37libsite-packagesxlrdbook.py", line 117, in open_workbook_xls
    bk.parse_globals()
  File "C:Program FilesPython37libsite-packagesxlrdbook.py", line 1227, in parse_globals
    self.handle_writeaccess(data)
  File "C:Program FilesPython37libsite-packagesxlrdbook.py", line 1192, in handle_writeaccess
    strg = unpack_unicode(data, 0, lenlen=2)
  File "C:Program FilesPython37libsite-packagesxlrdbiffh.py", line 284, in unpack_unicode
    strg = unicode(rawstrg, 'utf_16_le')
  File "C:Program FilesPython37libsite-packagesxlrdtimemachine.py", line 31, in <lambda>
    unicode = lambda b, enc: b.decode(enc)
  File "C:Program FilesPython37libencodingsutf_16_le.py", line 16, in decode
    return codecs.utf_16_le_decode(input, errors, True)
UnicodeDecodeError: 'utf-16-le' codec can't decode byte 0x20 in position 108: truncated data

此链接中的解决方法仍然是我找到的唯一可行的解决方案。我提出了一个输入命令,该命令暂停执行,直到手动打开文件,之后脚本可以继续。

最新更新