如何在使用Python添加数据时保留Excel中的macrosbutton

对于我正在维护的一个过程,我有一个创buildcsv文件的脚本,然后将csv文件复制到带有激活macros的button的Excel工作簿中。 这个过程工作得很好。

我正试图通过编写一个脚本来直接构build工作簿,从而消除了一个步骤,从而改善了这一过程。 我认为最好的办法是创build一个模板工作簿,其中第一个工作表具有macrosbutton。 然后,我将简单地复制模板工作簿,添加我的数据并将新工作簿保存在新的自定义名称下。 我的testing代码如下:

import csv, os, sys, xlrd, xlwt, xlutils, shutil from copy import deepcopy from xlutils import save from xlutils.copy import copy templatefile = 'N:\Tools\Scripts-DEV\Testing_Template.xls' Destfile = 'N:\Tools\Scripts-DEV\Testing_Dest.xls' shutil.copy(templatefile,Destfile) # Works fine up to here. # If you look at the new file, it has the button that is in the template file. rb = xlrd.open_workbook(Destfile) rs = rb.sheet_by_index(0) wb = copy(rb) wb.get_sheet(0).write(3, 0, 'Due Date') wb.get_sheet(0).write(3, 1, 'Name') wb.get_sheet(0).write(3, 3, 'Category') wb.get_sheet(0).write(3, 4, 'Number') wb.save(Destfile) 

这是问题出现的地方。 保存之后,macrosbutton消失。 我一直在寻找几天,但我还没有find一种方法来保存更新的Excel文件,而不会丢失macrosbutton。

我一直在寻找使用python的xlrd,xlwt和xlutils.copy保留样式,但是这并不能完全满足我的需求,因为我试图保留一个button,而不是一个样式。

有没有人知道一个办法做到这一点?

我即将开始寻找替代xlutils, xlrd and xlwt ,但我想我会先问在这里。

从你评论部分C:\Python27\我推断你在Windows上。 在这种情况下,使用pywin32和模板.xls.xlsm文件可能会更好。

使用os.startfile(filename)打开文件,然后使用workbook = win32com.client.GetObject(filename) 。 生成的工作簿可以用数据填充,并用`workbook.SaveAs(newfilename)写入新文件。

任何你不明确触摸的东西都会被保留。 Excel当然比xlrdxlwtxlutils更好xlutils