python打开xlsm_关于python:如何使用openpyxl使用Macro保存XLSM文件
我有带有宏功能的.xlsm文件。 我正在使用openpyxl加载它,并将一些数据写入文件,最后想另存为另一个.xlsm文件。
要将文件另存为XLSM文件,我在Python脚本中使用了以下代码。
wb.save('testsave.xlsm');
但是,如果我按上述方法保存,则无法打开该文件。 但是,如果我将其另存为.xlsx,则可以在没有原始文件具有的Macro函数的情况下打开文件。
我想打开一个具有宏功能的Excel工作表,编辑该文件,然后使用openpyxl将其另存为新的.xlsm文件。 我怎样才能做到这一点?
对我来说,这与版本openpyxl==2.3.0-b2一起有效
wb = load_workbook(filename='original.xlsm', read_only=False, keep_vba=True)
..
wb.save('outfile.xlsm')
在此处的文档中也有提及:http://openpyxl.readthedocs.org/en/latest/usage.html?highlight=keep_vba#write-a-workbook-from-xltm-as-xlsm
此后是否可以从python调用并运行宏?
如果您已安装MS Office并运行Windows,则可以使用OLE api运行它。否则,您必须在Python中使用openpyxl重新设计宏代码。
该链接不会指向与xlsm相关的任何内容!实际上,如果您转至openpyxl.readthedocs.io/en/latest/usage.html?highlight=xlsm您会看到,由于xlsm没有任何内容,因此不会显示任何内容。
我认为他们现在删除了关于xlsm的那一部分,但仍然提到支持文件类型。重要的似乎是显式设置keep_vba标志,因为它默认为false。 openpyxl.readthedocs.io/en/latest/usage.html?highlight=keep_vba
此方法并不总是将ActiveX组件(如按钮)连接到代码。可能与被转换为图像的按钮的openpyxl错误相同。
我不知道这是否与提出该问题的人有关,但我正在处理相同的问题并找到了可能的解决方案。
打开原始文件(例如: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')
该解决方案是我找到的最接近的解决方案,但是,我仍然在文件中遇到一些错误,excel尝试将其恢复。在此恢复过程中,它(有时并非总是)使宏混乱!
没错,openpyxl无法读取和写入VBA代码。
根据这个线程:
I think you should not give the xlsM extension, because the file will
contain no VBA code. openpyxl is used to build xlsX files only.
请尝试尝试使用此派生:如果将keep_vba=True参数传递给load_workbook,它将完成此工作。
希望能有所帮助。
它对我没有用。这是我的wb = load_workbook(template.xlsm, keep_vba = True);代码
如果此fork不起作用-则无法使用openpyxl使其起作用。
如果您最初的excel是使用python创建的,则可能还需要添加workbook.xml并解析xlms表:
for sheet in range(1,4):
with open('sheetX.xml', 'r') as myfile: 'r') as myfile:
my_str=myfile.read()
substr =""
idx = my_str.index(substr)
my_str = my_str[:idx] + inserttxt + my_str[idx:]
with open('sheetX.xml',"w") as text_file:
text_file.write(my_str)
使用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')
错误:TypeError:Book对象不可下标
python打开xlsm_关于python:如何使用openpyxl使用Macro保存XLSM文件相关推荐
- python计算运动会某个参赛选手的得分。数据保存在文件中_Python基础教程之第二章---变量和字符串(1) 搬运...
Python变量及其使用 无论使用什么语言编程,其最终目的都是对数据进行处理.程序在编程过程中,为了处理数据更加方便,通常会将其存储在变量中. 形象地看,变量就像一个个小容器,用于"盛装&q ...
- python计算运动会某个参赛选手的得分。数据保存在文件中_为什么一定要考计算机二级证书?8个好处,考和没考区别有点大...
戳上面的蓝字关注我们哦! 商务合作加V/QQ:55838408 在众多考试中,全国计算机等级考试可以说是相对热门也最基础的考试.然而就是这最基础的考试,很多人都还没有通过.关于计算机等级考试,你又知道 ...
- appium python 打开通知栏_appium+python 操作APP
整理一些appium+python操作APP的常用方法 1.检查应用是否已经安装 driver.is_app_installed('package_name') 2.安装APP driver.inst ...
- python打开控制台运行_如何在IPython控制台中默认运行文件而不是终端?
我在PyCharm开始了一个新项目.我安装了Anaconda 3.6.所以,在PyCharm中,我选择了Anaconda python.exe作为项目解释器. 当我第一次运行PyCharm时,它使用I ...
- python 打开txt_在python中从txt文件打开链接
我想请求一个rss程序的帮助.我所做的是收集包含我项目相关信息的网站,然后检查它们是否有rss提要. 链接存储在txt文件中(每行一个链接). 因此,我有一个txt文件,其中包含了需要检查rss的基本 ...
- python计算运动会某个参赛选手的得分。数据保存在文件中_成绩计算电脑程序的使用说明...
成绩计算电脑程序的使用说明 为了计算成绩,特制作这个电脑程序,说明如下: 一.开发软件:Python 二.使用说明: 在电脑D盘根目录下建立两个excel文件,一个是1.xlsx,另一个是2.xlsx ...
- Python根据身份证号计算年龄和退休时间并保存Excel文件
封面图片:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社 图书详情: 用书教师可以联系董老师获取教学大纲.课件.源码.教案.考试系统等配 ...
- python打不开py文件查看代码,用python打开py文件
.py文件无法用python打开 刚刚把python更新到python3.7.2 但是发现之前写的.py的文件双击没有任何我去,你的情况和我一模一样,我也是环境变量和注册表按照网上的方法设置了,却还是 ...
- Python使用openpyxl和pandas处理Excel文件实现数据脱敏案例一则
推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),清华大学出版社,2020年6月第1次印刷 送书活动火爆进行中:董老师又双叒叕送书啦,30本 ...
- 2016版excel_Python使用openpyxl和pandas处理Excel文件实现数据脱敏案例一则
推荐图书:<Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),清华大学出版社,2020年6月第1次印刷 送书活动火爆进行中:董老师又双叒叕送书啦,30本& ...
最新文章
- Lua基本语法-书写规范以及自带常用函数
- Jsoup:使用Java将爬虫得到的数据写入Excel,Jsoup得到的数据进行持久化,爬虫数据保存到本地Excel中
- 0. 正规鞅的混沌及可料表示
- ASP.NET Core Web API 最佳实践指南
- 【前端】这可能是你看过最全的css居中解决方案了~
- 2017年秋招-广联达面试及思考
- LeetCode 468. 验证IP地址
- java获取b站动态列表地址_爬虫入门(三)爬取b站搜索页视频分析(动态页面,DBUtils存储)...
- 转 最小生成树(kruskal 算法 和prim算法)
- 面向对象三节课,对象与权限修饰符,作业0918
- Python接口自动化-requests模块之post请求
- OUTEROS常用命令
- html数字什么字体样式,css字体样式属性有哪些?
- sklearn机器学习之降维(人脸图片数据集)
- csr蓝牙适配 linux,新款4.0蓝牙适配器 迷你4.0蓝牙适配器 Bluetooth CSR 4.0 Dongle
- matlab雷达辐射源,雷达辐射源PDW数据分析系统的制作方法
- 计算机网络中常见英文缩写所对应的名词整理
- 2-10配置Linux网络
- vue-quill-editor编辑器踩坑
- java 余弦定理_Java根据余弦定理计算文本相似度
热门文章
- Spring| AOP之 引入(Introductions)
- 药品零售企业未建立计算机系统,新版GSP药品经营企业计算机系统要求
- pack_padded_sequence;pad_packed_sequence
- XML解析—开源XOM类库
- Time to live exceeded
- 鱼缸悬浮很多微小气泡_为什么说鱼缸存有大量细微气泡,可能造成观赏鱼的死亡?...
- Paper再现:MD+AI自动编码机探测蛋白变构(四):DIO的生成和聚类
- 乌班图nginx访问php 变成下载
- 谈业务流程全生命周期管理支撑业务流程再造(2)
- python操作 docx