2

对于我正在维护的流程,我有一个创建 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 文件而不会丢失宏按钮。

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

有谁知道这样做的方法?

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

4

1 回答 1

1

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

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

您未明确触摸的任何内容都会被保留。当然,Excel 在这方面比xlrd,xlwtxlutils.

于 2013-03-15T11:54:17.080 回答