Чтение и обновление листов в файле XLSM с использованием панд при сохранении макросов VBA - PullRequest
0 голосов
/ 13 марта 2019

У меня есть требование прочитать файл xlsm с макросами VBA и обновить некоторые листы в файле. Я хочу использовать панды для этой цели и пробовать, как этого можно достичь.

Я попробовал ответы, представленные в следующем посте, однако я не мог видеть, как макросы VBA сохраняются при добавлении проекта VBA обратно.

https://stackoverflow.com/posts/28170939/revisions

Вот шаги, которые я пробовал,

Извлекает vba_project.bin из исходного файла .xlsm, а затем

writer = pd.ExcelWriter ('original.xlsx', engine = 'xlsxwriter')

workbook = writer.book

workbook.filename = 'test.xlsm'

workbook.add_vba_project ( 'vbaProject.bin')

writer.save ()

при этом я не вижу, чтобы макросы VBA привязывались к "test.xlsm". Результат тот же, даже если я запишу его в файл «original.xlsm».

Есть мысли о том, как сохранить макросы VBA или добавить их обратно в исходный файл xlsm?

Также, есть ли способ открыть сам файл 'xlsm', а не счетную часть 'xlsx', используя 'pd.ExcelWriter'

Заранее спасибо -

1 Ответ

0 голосов
/ 13 марта 2019

Ах, понятно.Я до сих пор не могу сказать, что вы делаете, но вот несколько общих примеров кода, позволяющих Python взаимодействовать с Excel.

Read contents of a worksheet in Excel:

import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile

df = pd.read_excel('C:\\your_path\\test.xls', sheetname='Sheet1')

************************************************************************************

Use Python to run Macros in Excel:
import os
import win32com.client

#Launch Excel and Open Wrkbook
xl=win32com.client.Dispatch("Excel.Application")  
xl.Workbooks.Open(Filename="C:\your_path\excelsheet.xlsm") #opens workbook in readonly mode. 

#Run Macro
xl.Application.Run("excelsheet.xlsm!modulename.macroname") 

#Save Document and Quit.
xl.Application.Save()
xl.Application.Quit() 

#Cleanup the com reference. 
del xl

Write, from Python, to Excel:

import xlsxwriter

# Create an new Excel file and add a worksheet.
workbook = xlsxwriter.Workbook('C:/your_path/ranges_and_offsets.xlsx')
worksheet = workbook.add_worksheet()

# Widen the first column to make the text clearer.
worksheet.set_column('A:A', 20)

# Add a bold format to use to highlight cells.
bold = workbook.add_format({'bold': True})

# Write some simple text.
worksheet.write('A1', 'Hello')

# Text with formatting.
worksheet.write('A2', 'World', bold)

# Write some numbers, with row/column notation.
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)


workbook.close()

from openpyxl import Workbook
wb = Workbook()

# grab the active worksheet
ws = wb.active

# Data can be assigned directly to cells
ws['A1'] = 42

# Rows can also be appended
ws.append([1, 2, 3])

# Python types will automatically be converted
import datetime
ws['A2'] = datetime.datetime.now()

# Save the file
wb.save("C:\\your_path\\sample.xlsx")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...