Anu*_*shA 9 python xlsm openpyxl
我有.xlsm文件与宏功能.我正在使用openpyxl加载它并将一些数据写入文件,最后想要另存为.xlsm文件.
要将文件保存为XLSM文件,我在Python脚本中使用了以下代码.
wb.save('testsave.xlsm');
Run Code Online (Sandbox Code Playgroud)
但如果我如上所述保存,我就无法打开该文件.但是,如果我将其保存为.xlsx,那么我可以在没有原始文件的宏功能的情况下打开文件.
我想打开一个具有宏功能的Excel工作表,编辑该文件并使用openpyxl将其另存为新的.xlsm文件.我怎样才能做到这一点?
eul*_*ule 12
对我来说,这与版本一起工作 openpyxl==2.3.0-b2
wb = load_workbook(filename='original.xlsm', read_only=False, keep_vba=True)
..
wb.save('outfile.xlsm')
Run Code Online (Sandbox Code Playgroud)
它在文档中也是mentioend:http://openpyxl.readthedocs.org/en/latest/usage.html?highlight = keep_vba#write-a-workbook-from-xltm-as-xlsm
我在使用 openpyxl 编辑 xlsm 文件时遇到了同样的问题。我尝试了 stackoverflow 和其他论坛中提供的大多数解决方案/解决方法。但它们都不起作用。然后我找到了xlwings,这个python库处理xlsm文档,它保留所有宏。
import xlwings as xw
wb = xw.Book('macro_xl.xlsm')
sheet = wb.sheets['Sheet1']
sheet.range('A1').value = 'From Script'
wb.save('result_file_name.xlsm')
Run Code Online (Sandbox Code Playgroud)
我不知道这是否与提出问题的人相关,但我正在处理相同的问题并找到了可能的解决方案。
1.xlsm:)并使用openpyxl进行魔术处理;2.xlsx;xlsx:其中一个文件是宏(vbaProject.bin),并且其中两个文件是必需的,因为它们描述了文件的类型;xlsx目录的所有文件放回zip文件,并将其从重命名zip为xlsm。该文件包含原始宏,并已使用编辑openpyxl。2.xlsx文件。示例代码:
import openpyxl
import zipfile
from shutil import copyfile
from shutil import rmtree
import os
PAD = os.getcwd()
wb = openpyxl.load_workbook('1.xlsm')
#####
# do magic with openpyxl here and save
ws = wb.worksheets[0]
ws.cell(row=2, column=3).value = 'Edited' # example
#####
wb.save('2.xlsx')
with zipfile.ZipFile('1.xlsm', 'r') as z:
z.extractall('./xlsm/')
with zipfile.ZipFile('2.xlsx', 'r') as z:
z.extractall('./xlsx/')
copyfile('./xlsm/[Content_Types].xml','./xlsx/[Content_Types].xml')
copyfile('./xlsm/xl/_rels/workbook.xml.rels','./xlsx/xl/_rels/workbook.xml.rels')
copyfile('./xlsm/xl/vbaProject.bin','./xlsx/xl/vbaProject.bin')
z = zipfile.ZipFile('2.zip', 'w')
os.chdir('./xlsx')
for root, dirs, files in os.walk('./'):
for file in files:
z.write(os.path.join(root, file))
z.close()
#clean
os.chdir(PAD)
rmtree('./xlsm/')
rmtree('./xlsx/')
os.remove('./2.xlsx')
os.rename('2.zip', '2.xlsm')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28164 次 |
| 最近记录: |