Saya sedang bekerja untuk mengotomatisasi proses pelaporan bulanan kami dari halaman web. Unduhan dalam format .xls, dan saya mencoba mengonversinya menjadi .xlsx sehingga saya dapat memanipulasinya dengan openpyxl. Kode mengunduh file Excel ke komputer saya, tetapi saya belum berhasil membuka file menggunakan openpyxl atau xlrd karena saya mendapatkan UnicodeDecodeError.

Setelah membaca utas di Github saya mencoba membuka file secara manual dan kembali menjalankan kode, dan file berhasil dibuka. Namun seperti yang dia katakan di utas, harus membuka file secara manual mengalahkan tujuan mengotomatisasi proses. Adakah yang tahu bagaimana saya bisa melewati ini?

Ini adalah kode yang melempar kesalahan:

import xlrd, openpyxl

filePath = r'C:\Users\Daly_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)

Ini adalah kesalahan yang saya terima:

Traceback (most recent call last):
  File "C:\Users\Me\MonthlyReport.py", line 100, in <module>
    workbook = open_xls_as_xlsx(downloadName)
  File "C:\Users\Me\MonthlyReport.py", line 81, in open_xls_as_xlsx
    xlsBook = xlrd.open_workbook(filename)
  File "C:\Program Files\Python37\lib\site-packages\xlrd\__init__.py", line 157, in open_workbook
    ragged_rows=ragged_rows,
  File "C:\Program Files\Python37\lib\site-packages\xlrd\book.py", line 117, in open_workbook_xls
    bk.parse_globals()
  File "C:\Program Files\Python37\lib\site-packages\xlrd\book.py", line 1227, in parse_globals
    self.handle_writeaccess(data)
  File "C:\Program Files\Python37\lib\site-packages\xlrd\book.py", line 1192, in handle_writeaccess
    strg = unpack_unicode(data, 0, lenlen=2)
  File "C:\Program Files\Python37\lib\site-packages\xlrd\biffh.py", line 284, in unpack_unicode
    strg = unicode(rawstrg, 'utf_16_le')
  File "C:\Program Files\Python37\lib\site-packages\xlrd\timemachine.py", line 31, in <lambda>
    unicode = lambda b, enc: b.decode(enc)
  File "C:\Program Files\Python37\lib\encodings\utf_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
0
Daly_Llama 6 Agustus 2019, 21:38

1 menjawab

Jawaban Terbaik

Solusi di tautan ini tetap sebagai satu-satunya solusi yang bisa diterapkan yang saya temukan. Saya memunculkan perintah input yang menjeda eksekusi hingga file dibuka secara manual, setelah itu skrip dapat melanjutkan.

0
Daly_Llama 8 November 2019, 19:17