对于我正在维护的进程,我有一个创建csv文件的脚本,然后将csv文件复制到带有激活宏的按钮的Excel工作簿中。这个过程很好。
我正在尝试通过编写直接构建工作簿的脚本来改进该过程,从而消除了一个步骤。我认为最好的方法是创建一个模板工作簿,其中第一个工作表有宏按钮。然后我只需复制模板工作簿,添加我的数据并以新的自定义名称保存新工作簿。我的测试代码如下:
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)
这是问题出现的地方。保存后,宏按钮消失。我一直在寻找几天,但我还没有找到一种方法来保存更新的Excel文件而不会丢失宏按钮。
我一直在关注Preserving styles using python's xlrd,xlwt, and xlutils.copy,但这并不能满足我的需求,因为我试图保留按钮,而不是样式。
有谁知道这样做的方法?
我即将开始寻找xlutils, xlrd and xlwt
的替代品,但我想我先问这里。
答案 0 :(得分:1)
从你评论部分C:\Python27\
我推断你是在Windows上。在这种情况下,您最好使用pywin32和模板.xls
或.xlsm
文件。
使用os.startfile(filename)
打开文件,然后使用workbook = win32com.client.GetObject(filename)
进行连接。生成的工作簿可以填充数据并使用`workbook.SaveAs(newfilename)写入新文件。
保留未明确触摸的任何内容。当然,Excel比xlrd
,xlwt
和xlutils
更好一些。