Как обойти ошибку конфликта имён при открытии файла с помощью xlwings?
Есть задача: при копировании файла в бэкап удалять оттуда связи с внешними источниками(ссылками). Имеется следующий код:
from datetime import datetime, timedelta
import shutil
import xlwings as xw
from xlwings import Book
backup_dir = './backup/'
files = [...] # список путей к файлам для бэкапа
now = (datetime.now() + timedelta(days=1)).strftime('%Y-%m-%d ')
for file in files:
backup_path = backup_dir + now + file.split('/')[-1]
shutil.copy(file, backup_path)
with xw.App(visible=True, add_book=False) as app:
app.display_alerts = False
app.screen_updating = False
wb: Book = app.books.open( # вот тут возникает ошибка
backup_path,
read_only=True
)
# этот код не выполняется пока не разрешить конфликт имен
links = wb.api.LinkSources()
if links:
for link in links:
print(f"Удаляю внешнюю ссылку: {link}")
wb.api.BreakLink(Name=link, Type=1)
wb.save()
wb.close()
Пробовал указать различные параметры при открытии, но ошибка всё равно возникает? Как этого избежать?
upd. Помогло один раз выполнить скрипт VBA в файле
Sub DelNames()
Dim ws As Worksheet
Dim nm As Name
For Each ws In ThisWorkbook.Sheets
On Error Resume Next
ws.Names("_FilterDatabase").Delete
On Error GoTo 0
Next ws
For Each nm In ThisWorkbook.Names
If nm.Name = "_FilterDatabase" Then
nm.Delete
End If
Next nm
MsgBox "Удалено!", vbInformation
End Sub
После чего конфликта имён не происходило. Буду признателен, если кто-нибудь скажет что это за _FilterDatabase и на что он может повлиять (я последствий не нашел)
