python xlsm_“xlwings”:不支持写入.xlsm文件?

我尝试了一个简单的测试,使用“xlwings_0.3.4”打开一个excel.xltm文件并再次保存它,以确保VBA模块被保留下来。我不能让它工作。在

如果在保存步骤中指定了文件扩展名,则该文件将另存为.xlsx文件。该模块随附在一起,但随着扩展名的更改,它不能被识别为有效的VBA模块。如果不指定文件扩展名,它将自动另存为.xlsx:WB=xlwings.Workbook('template.xltm')

WB.save('outfile')

WB.close()

这给出了一个xlsx文件。在

尝试将文件设置为xlsm会生成错误:

^{pr2}$

将生成错误:xl_workbook.SaveAs(path)

File "", line 7, in SaveAs

pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'Microsoft Excel', u'This extension can not be used with the selected file type. Change the file extension in the File name text box or select a different file type by changing the Save as type.', u'xlmain11.chm', 0, -2146827284), None)

这似乎是GetActiveObject('Excel.Application')返回的应用程序对象固有的。在

有没有一个开关(比如openpyxl中的'keep_VBA=True'开关?),还是不能用xlwings保存xlsm文件?在

要使日期格式为原日期格式,并且插入数据包括列标题,可以按照以下步骤进行: 1. 获取 Excel 工作表对象 ws 和样式 DataFrame 对象 styled_df。 2. 将样式 DataFrame 对象的数据部分转换为二维列表,即 styled_df.data.values.tolist()。 3. 在二维列表的头部插入一行列标题,即 [styled_df.columns.to_list()]。 4. 将新的二维列表写入 Excel 工作表的单元格中,即 ws.Range(ws.Cells(1, 1), ws.Cells(styled_df.data.shape[0] + 1, styled_df.data.shape[1])).Value = [styled_df.columns.to_list()] + styled_df.data.values.tolist()。 5. 遍历样式 DataFrame 对象的样式信息,将每个单元格的样式应用到 Excel 工作表的对应单元格中。 6. 遍历日期列的单元格,将日期格式设置为原日期格式。 以下是具体的代码实现: ```python # 获取 Excel 工作表对象 ws 和样式 DataFrame 对象 styled_df ws = workbook.Worksheets("货机数据") styled_df = get_styled_dataframe() # 获取样式 DataFrame 对象的数据部分和列标题 data = styled_df.data.values.tolist() columns = styled_df.columns.to_list() # 将列标题插入到数据部分的头部 data.insert(0, columns) # 将新的二维列表写入 Excel 工作表的单元格中 ws.Range(ws.Cells(1, 1), ws.Cells(styled_df.data.shape[0] + 1, styled_df.data.shape[1])).Value = data # 遍历样式 DataFrame 对象的样式信息,将每个单元格的样式应用到 Excel 工作表的对应单元格中 for i, row in styled_df.iterrows(): for j, cell in row.iteritems(): apply_cell_style(ws.Cells(i+1, j+1), cell) # 遍历日期列的单元格,将日期格式设置为原日期格式 date_format = "yyyy/m/d" # 假设原日期格式为 "yyyy/m/d" for i in range(2, ws.UsedRange.Rows.Count + 1): cell = ws.Cells(i, 3) # 假设日期列为第三列 cell.NumberFormat = date_format # 保存文件 workbook.Save() ``` 其中,假设日期列为第三列,日期格式为 "yyyy/m/d"(可以根据实际情况进行修改)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值