xlsxwriter добавляет макрос в «thisworkbook» для выполнения при открытии - PullRequest
0 голосов
/ 18 марта 2020

Я извлек файл bin из XMLS, где код находится в Thisworkbook, потому что мне нужно запустить макрос при открытии файла. Я не могу создать с помощью следующего кода XLSM, который выполняет код при открытии: XLSM созданный имеет "Thisworkbook" и "Thisworkbook1" и код не работает при открытии

import xlsxwriter


strn =" Feb "
## Region Level

Loc = Location.reset_index()


for n, g in Matrix.groupby('Cluster'):

    out_path = "D:/Actions/Results/Action-Opp "  + n.strip(" ") +  strn + ".xlsx" 
    writer = pd.ExcelWriter(out_path , engine='xlsxwriter')

    C =Loc[Loc.Cluster==n].iloc[:,1:]
    B =SPs[SPs.Cluster==n]
    D = PDet[PDet.Cluster==n]
    F = OppD[OppD.Cluster==n]

    Total.iloc[:,:-2].to_excel(writer, sheet_name="Region",   index=True) 
    C.to_excel(writer, sheet_name="Stores", index=False)
    B.to_excel(writer, sheet_name="SPs", index=False)
    D.to_excel(writer, sheet_name="Portfolio Details",   index=False)

    F.to_excel(writer, sheet_name="Opportunity Details",  index=False)

    workbook  = writer.book
    workbook.filename = "D:/Actions/Results/Action-Opp "  + n.strip(" ") +  strn + ".xlsm" 
    worksheet1 = writer.sheets['Region']
    worksheet2 = writer.sheets['Stores']
    worksheet3 = writer.sheets['SPs']
    workbook.set_vba_name('Stores')
    workbook.add_vba_project('D:/Actions/vbaProject.bin')

    writer.save()


elapsed = timeit.default_timer() - start_time
print(elapsed)

1 Ответ

1 голос
/ 18 марта 2020

Вот как создать файл xlsm, который будет содержать макрос, который будет запускаться автоматически каждый раз, когда вы открываете книгу (если папка файла установлена ​​в качестве надежного расположения):

1) Создать Файл Excel, вставьте новый модуль и введите этот код vba:

Sub Auto_Open()
    MsgBox "Hello World!"
End Sub

Сохраните файл как xlsm.

2) Извлеките код vba с помощью утилиты vba_extract.py для xlsxwriter.

3) Запустите следующий скрипт python:

import xlsxwriter

# Create a workbook and add a worksheet.
workbook = xlsxwriter.Workbook('test.xlsx')
workbook.filename = 'test.xlsm'
worksheet = workbook.add_worksheet()

# Inject the bin file we extracted earlier
workbook.add_vba_project('./vbaProject.bin')

# Finally write the file
workbook.close()

Это создаст файл с внедренным в него макросом и будет автоматически запускаться каждый раз, когда вы его открываете.

Вывод: enter image description here

Если у вас все еще есть проблемы, я бы порекомендовал вам проверить 2 вещи: во-первых, если ваш макрос начинается с ключевого слова Sub Auto_Open(), и во-вторых, если вы установили папку, в которой вы открываете файл как надежное расположение (поскольку по умолчанию офисные приложения блокируют запуск любых макросов, если они содержат вредоносный код).

...