xlwings Book.save() 出错:Workbook 类的 SaveAs 方法失败

问题描述 投票:0回答:2

我正在使用 xlwings 打开一个 Excel 文件 wb,执行一些操作,然后尝试将其保存到目录中。问题是正常的 xw.Book.save() 偶尔会引发错误。

对于我继续使用此代码,至关重要的是我可以相信它不会抛出错误。

以下代码给出以下错误:

代码:

Some_data = r"C:\Users\FrodeWilkensen\OneDrive - Norfund\Frode Wilkensen\Some_data.xlsx" #filepath to some data
Original = r"C:\Users\FrodeWilkensen\OneDrive - Norfund\Frode Wilkensen\Original.xlsx" #filepath to another file

df = pd.read_excel(Some_data, engine = "openpyxl") #reading some_data, assigning as df

wb = xw.Book(Original) #assigning original workbook as xlwings wb
ws = wb.sheets["dump"] #the sheet called "dump" assigned as ws
ws["B2"].options(pd.DataFrame, index=False, header=False, expand="table").value = df #some operations


wb.save(r"C:\Users\FrodeWilkensen\OneDrive - Norfund\Frode Wilkensen\dumped.xlsx") #want to save it in same directoy
#gets thrown an error, shown below.

错误:

---------------------------------------------------------------------------
com_error                                 Traceback (most recent call last)
Input In [49], in <cell line: 11>()
      7 ws = wb.sheets["dump"] #the sheet called "dump" assigned as ws
      8 ws["B2"].options(pd.DataFrame, index=False, header=False, expand="table").value = df #some operations
---> 11 wb.save(r"C:\Users\FrodeWilkensen\OneDrive - Norfund\Frode Wilkensen\dumped.xlsx") #want to save it in same directoy
     12 #gets thrown an error, shown below.
     13 wb.app.kill()

File ~\anaconda3\lib\site-packages\xlwings\main.py:874, in Book.save(self, path)
    872     path = utils.fspath(path)
    873 with self.app.properties(display_alerts=False):
--> 874     self.impl.save(path)

File ~\anaconda3\lib\site-packages\xlwings\_xlwindows.py:582, in Book.save(self, path)
    580 alerts_state = self.xl.Application.DisplayAlerts
    581 self.xl.Application.DisplayAlerts = False
--> 582 self.xl.SaveAs(os.path.realpath(path), FileFormat=file_format)
    583 self.xl.Application.DisplayAlerts = alerts_state

File ~\anaconda3\lib\site-packages\xlwings\_xlwindows.py:70, in COMRetryMethodWrapper.__call__(self, *args, **kwargs)
     68 while True:
     69     try:
---> 70         v = self.__method(*args, **kwargs)
     71         if isinstance(v, (CDispatch, CoClassBaseClass, DispatchBaseClass)):
     72             return COMRetryObjectWrapper(v)

File C:\Users\FRODEW~1\AppData\Local\Temp\gen_py\3.9\00020813-0000-0000-C000-000000000046x0x1x9.py:46807, in _Workbook.SaveAs(self, Filename, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local, WorkIdentity)
  46804 def SaveAs(self, Filename=defaultNamedNotOptArg, FileFormat=defaultNamedNotOptArg, Password=defaultNamedNotOptArg, WriteResPassword=defaultNamedNotOptArg
  46805         , ReadOnlyRecommended=defaultNamedNotOptArg, CreateBackup=defaultNamedNotOptArg, AccessMode=1, ConflictResolution=defaultNamedOptArg, AddToMru=defaultNamedOptArg
  46806         , TextCodepage=defaultNamedOptArg, TextVisualLayout=defaultNamedOptArg, Local=defaultNamedOptArg, WorkIdentity=defaultNamedOptArg):
> 46807     return self._oleobj_.InvokeTypes(3174, LCID, 1, (24, 0), ((12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (3, 49), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17)),Filename
  46808         , FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup
  46809         , AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout
  46810         , Local, WorkIdentity)

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

正如您在错误末尾看到的那样,它表示 Workbook 类的 SaveAs 方法失败 - 这是 VBA 方法错误? 有人有什么建议吗?`

提前谢谢你:)

python excel xlwings
2个回答
0
投票

虽然这个问题有点老了,但我今天遇到了完全相同的问题,即使在确保我使用

wb.save()
方法的完整路径之后,如 this 答案中详述。

我认为此实例中的问题是由保存到同步的 OneDrive 文件夹引起的,如问题中的示例路径所示。尽管我主要是猜测,但我认为问题是由 OneDrive 中新文件的同步以及底层 SaveAs 调用在查找本地路径时出现问题引起的。

我通过在运行保存到文件夹的脚本时暂停 OneDrive 同步来解决此问题。


0
投票

是的,同意。不要使用 OneDrive 中的文件夹来存储生成的工作表。当我更改存储文件夹后,它工作得很好

© www.soinside.com 2019 - 2024. All rights reserved.