我有带有宏功能的.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文件相关推荐

  1. python计算运动会某个参赛选手的得分。数据保存在文件中_Python基础教程之第二章---变量和字符串(1) 搬运...

    Python变量及其使用 无论使用什么语言编程,其最终目的都是对数据进行处理.程序在编程过程中,为了处理数据更加方便,通常会将其存储在变量中. 形象地看,变量就像一个个小容器,用于"盛装&q ...

  2. python计算运动会某个参赛选手的得分。数据保存在文件中_为什么一定要考计算机二级证书?8个好处,考和没考区别有点大...

    戳上面的蓝字关注我们哦! 商务合作加V/QQ:55838408 在众多考试中,全国计算机等级考试可以说是相对热门也最基础的考试.然而就是这最基础的考试,很多人都还没有通过.关于计算机等级考试,你又知道 ...

  3. appium python 打开通知栏_appium+python 操作APP

    整理一些appium+python操作APP的常用方法 1.检查应用是否已经安装 driver.is_app_installed('package_name') 2.安装APP driver.inst ...

  4. python打开控制台运行_如何在IPython控制台中默认运行文件而不是终端?

    我在PyCharm开始了一个新项目.我安装了Anaconda 3.6.所以,在PyCharm中,我选择了Anaconda python.exe作为项目解释器. 当我第一次运行PyCharm时,它使用I ...

  5. python 打开txt_在python中从txt文件打开链接

    我想请求一个rss程序的帮助.我所做的是收集包含我项目相关信息的网站,然后检查它们是否有rss提要. 链接存储在txt文件中(每行一个链接). 因此,我有一个txt文件,其中包含了需要检查rss的基本 ...

  6. python计算运动会某个参赛选手的得分。数据保存在文件中_成绩计算电脑程序的使用说明...

    成绩计算电脑程序的使用说明 为了计算成绩,特制作这个电脑程序,说明如下: 一.开发软件:Python 二.使用说明: 在电脑D盘根目录下建立两个excel文件,一个是1.xlsx,另一个是2.xlsx ...

  7. Python根据身份证号计算年龄和退休时间并保存Excel文件

    封面图片:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社 图书详情: 用书教师可以联系董老师获取教学大纲.课件.源码.教案.考试系统等配 ...

  8. python打不开py文件查看代码,用python打开py文件

    .py文件无法用python打开 刚刚把python更新到python3.7.2 但是发现之前写的.py的文件双击没有任何我去,你的情况和我一模一样,我也是环境变量和注册表按照网上的方法设置了,却还是 ...

  9. Python使用openpyxl和pandas处理Excel文件实现数据脱敏案例一则

    推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),清华大学出版社,2020年6月第1次印刷 送书活动火爆进行中:董老师又双叒叕送书啦,30本 ...

  10. 2016版excel_Python使用openpyxl和pandas处理Excel文件实现数据脱敏案例一则

    推荐图书:<Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),清华大学出版社,2020年6月第1次印刷 送书活动火爆进行中:董老师又双叒叕送书啦,30本& ...

最新文章

  1. Lua基本语法-书写规范以及自带常用函数
  2. Jsoup:使用Java将爬虫得到的数据写入Excel,Jsoup得到的数据进行持久化,爬虫数据保存到本地Excel中
  3. 0. 正规鞅的混沌及可料表示
  4. ASP.NET Core Web API 最佳实践指南
  5. 【前端】这可能是你看过最全的css居中解决方案了~
  6. 2017年秋招-广联达面试及思考
  7. LeetCode 468. 验证IP地址
  8. java获取b站动态列表地址_爬虫入门(三)爬取b站搜索页视频分析(动态页面,DBUtils存储)...
  9. 转 最小生成树(kruskal 算法 和prim算法)
  10. 面向对象三节课,对象与权限修饰符,作业0918
  11. Python接口自动化-requests模块之post请求
  12. OUTEROS常用命令
  13. html数字什么字体样式,css字体样式属性有哪些?
  14. sklearn机器学习之降维(人脸图片数据集)
  15. csr蓝牙适配 linux,新款4.0蓝牙适配器 迷你4.0蓝牙适配器 Bluetooth CSR 4.0 Dongle
  16. matlab雷达辐射源,雷达辐射源PDW数据分析系统的制作方法
  17. 计算机网络中常见英文缩写所对应的名词整理
  18. 2-10配置Linux网络
  19. vue-quill-editor编辑器踩坑
  20. java 余弦定理_Java根据余弦定理计算文本相似度

热门文章

  1. Spring| AOP之 引入(Introductions)
  2. 药品零售企业未建立计算机系统,新版GSP药品经营企业计算机系统要求
  3. pack_padded_sequence;pad_packed_sequence
  4. XML解析—开源XOM类库
  5. Time to live exceeded
  6. 鱼缸悬浮很多微小气泡_为什么说鱼缸存有大量细微气泡,可能造成观赏鱼的死亡?...
  7. Paper再现:MD+AI自动编码机探测蛋白变构(四):DIO的生成和聚类
  8. 乌班图nginx访问php 变成下载
  9. 谈业务流程全生命周期管理支撑业务流程再造(2)
  10. python操作 docx