Я знаю, что вы просто спросили, как вставить кнопку в тот же лист, но я решил проверить, как макросы работают с xlsxwriter, поэтому я написал полное руководство по добавлению макроса.
1) Во-первых, нам нужно вручную создать файл, который будет содержать макрос, чтобы извлечь его как двоичный файл и внедрить его позже, используя xlsxwriter. Таким образом, мы создаем новый файл Excel, go на вкладке Разработчик, Visual Basi c, Вставляем модуль и пишем следующий код:
Sub TestMsgBox()
MsgBox "Hello World!"
End Sub
Сохраняем файл с расширением xlsm, чтобы содержать макрос, например as Book1.xlsm.
2) Теперь нам нужно извлечь файл bin. Откройте ваш cmd и перейдите в каталог, где вы сохранили Book1.xlsm. Затем просмотрите проводник в папку, в которую вы установили python (или в папку виртуальной среды), и найдите vba_extract.py. Скопируйте этот скрипт в ту же папку, что и Book1.xlsm. Затем введите cmd:
python vba_extract.py Book1.xlsm
Таким образом, вы извлечете макрос и создадите файл vbaProject.bin в той же папке.
3) Теперь пришло время создать окончательный файл. Удалите файлы Book1.xlsm и vba_extract.py, поскольку они больше не нужны, и запустите следующий код:
import pandas as pd
# Create a test dataframe
df = pd.DataFrame({'Data': [10, 20, 30, 40]})
# Import it through the xlsxwriter
writer = pd.ExcelWriter('hello_world.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', index=False)
# Create the workbook and the worksheet
workbook = writer.book
workbook.filename = 'hello_world.xlsm' # rename the workbook to xlsm extension
worksheet = writer.sheets['Sheet1']
# Inject the bin file we extracted earlier
workbook.add_vba_project('./vbaProject.bin')
# Insert a description
worksheet.write('B1', 'Press the button to say hello.')
#Add a button tied to a macro in the VBA project.
worksheet.insert_button('B2', {'macro': 'TestMsgBox',
'caption': 'Press Me',
'width': 80, 'height': 30})
# Finally write the file
writer.save()
Кнопка «Сейчас» находится на том же листе, что и ваши данные, и работает: