Ошибка xlwings: не открывается книга Excel, появляется ошибка при вызове wb.open - PullRequest
1 голос
/ 03 июня 2019

xlwings отлично работает на моем компьютере, но когда я пытаюсь перенести ту же настройку на другой компьютер, она, кажется, не открывается правильно, выдавая эту ошибку

Traceback (most recent call last):

  File "C:\Users\base7268\AppData\Local\Programs\Python\Python37\lib\site-packages\xlwings\_xlwindows.py", line 432, in __call__

    return Book(xl=self.xl(name_or_index))

  File "C:\Users\base7268\AppData\Local\Programs\Python\Python37\lib\site-packages\xlwings\_xlwindows.py", line 152, in __call__

    v = self._inner(*args, **kwargs)

  File "C:\Users\base7268\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\dynamic.py", line 197, in __call__

    return self._get_good_object_(self._oleobj_.Invoke(*allArgs),self._olerepr_.defaultDispatchName,None)

pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147352565), None)



During handling of the above exception, another exception occurred:



Traceback (most recent call last):

  File "C:\Users\base7268\AppData\Local\Programs\Python\Python37\lib\site-packages\xlwings\main.py", line 2776, in open

    impl = self.impl(name)

  File "C:\Users\base7268\AppData\Local\Programs\Python\Python37\lib\site-packages\xlwings\_xlwindows.py", line 434, in __call__

    raise KeyError(name_or_index)

KeyError: 'output2019-06-03.11-40timeseries_5-31-2019scrubbed.xlsx'



During handling of the above exception, another exception occurred:



Traceback (most recent call last):

  File "Computation.py", line 157, in <module>

    xwWb = xw.Book("output" + timeName + os.path.split(file_path)[1])

  File "C:\Users\base7268\AppData\Local\Programs\Python\Python37\lib\site-packages\xlwings\main.py", line 488, in __init__

    impl = app.books.open(fullname).impl

  File "C:\Users\base7268\AppData\Local\Programs\Python\Python37\lib\site-packages\xlwings\main.py", line 2787, in open

    impl = self.impl.open(fullname)

  File "C:\Users\base7268\AppData\Local\Programs\Python\Python37\lib\site-packages\xlwings\_xlwindows.py", line 443, in open

    return Book(xl=self.xl.Open(fullname))

  File "C:\Users\base7268\AppData\Local\Programs\Python\Python37\lib\site-packages\xlwings\_xlwindows.py", line 63, in __call__

    v = self.__method(*args, **kwargs)

  File "<COMObject <unknown>>", line 8, in Open

pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', 'Open method of Workbooks class failed', 'xlmain11.chm', 0, -2146827284), None)

Вот некоторый упрощенный код, в котором изменение данных не происходит. Использование абсолютного ospath не помогает с ошибкой. Обе системы работают под управлением одной и той же 64-битной операционной системы и 32-битной Excel. И все же ошибка сохраняется на второй машине. Нет никакой разницы, которую я могу понять, это дало бы мне ошибку во 2-й системе по сравнению с первой. Обе машины являются ПК

import xlrd
import openpyxl
import xlwings as xw
from xlwings import constants
import os
import tkinter as tk
from tkinter import filedialog

import datetime


root = tk.Tk()
root.withdraw()

file_path = filedialog.askopenfilename()
print(file_path)

start = time.time()


wb = openpyxl.load_workbook(file_path)
Returns = wb['Prices']
newWs = wb.create_sheet()
newWs.title = "NominalDailyReturns"

benchWS = wb.create_sheet()
benchWS.title = "ActiveDailyReturns"


thirdWs = wb.create_sheet()
thirdWs.title = "RawAnalysis"
thirdWs.column_dimensions["A"].width = 32

name4 = thirdWs.title


print("halfway")

print(os.path.split(file_path))
print("output" + timeName + os.path.split(file_path)[1])

wb.save("output" + timeName + os.path.split(file_path)[1])

xwWb = xw.Book(os.path.abspath("output" + timeName + os.path.split(file_path)[1]))
XnewWs = xwWb.sheets['NominalDailyReturns']

xwWb.save()
xwWb.close()

wb = openpyxl.load_workbook("output" + timeName + os.path.split(file_path)[1])
benchWS = wb['ActiveDailyReturns']

wb.save("output" + timeName + os.path.split(file_path)[1])
xwWb = xw.Book("output" + timeName + os.path.split(file_path)[1])

XthirdWs = xwWb.sheets['RawAnalysis']
xwWb.save()
xwWb.close()

1 Ответ

1 голос
/ 06 июня 2019

Я выяснил проблему с моим кодом. Когда я использовал openpyxl для редактирования своих данных Excel, одна из формул вычитала слово из числа, вызвала ошибку и повредила файл Excel. Затем xlwings попытался открыть поврежденный файл, но мне это не удалось.

Таким образом, решение состоит в том, чтобы не сохранять поврежденный файл Excel и ожидать, что xlwings откроет его.

...