使用openpyxl更新复杂电子表格中的某些列

时间:2018-02-22 17:51:46

标签: openpyxl

您好我有一个相当复杂的电子表格,我需要更新“仅”部分内容。

我尝试了openpyxl,在保存工作簿之后,除了所有数据透视表,样式和公式都丢失之外,它工作正常。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

检查您安装的openpyxl版本。仅在版本2.5.0-a1(2017-05-30)中添加了对数据透视表的支持,并且仅支持一个数据透视表,直到版本2.5.0-b2(2018-01-19)。请参阅changelog

替代方案:简化,xlwings,内容保护和 win32com (最有可能)。

如果您使用的是2.5并且无效,那么如果您想继续使用openpyxl,则可能需要简化电子表格。例如。将其拆分为源和输出文件,并使用python更新源文件。

您可以尝试运行xlwings来托管电子表格内部的Python代码。

另一种可能的解决方案是锁定内容 - 打开保护 - 除了您计划更新的部分以外的所有内容。这不太可能,因为python直接改变内容,但它可能会尊重锁。

最后,结果最有可能奏效。通过win32com模块驱动更改。我认为这与openpyxl不同,需要安装Excel,因为它使用Excel的功能来进行更改。使用示例包括herehere

一个简短的例子(取自here):

import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Add()
ws = wb.Worksheets("Sheet1")
ws.Cells(1,1).Value = "Cell A1"
ws.Cells(1,1).Offset(2,4).Value = "Cell D2"
ws.Range("A2").Value = "Cell A2"
ws.Range("A3:B4").Value = "A3:B4"
ws.Range("A6:B7,A9:B10").Value = "A6:B7,A9:B10"
wb.SaveAs('ranges_and_offsets.xlsx')
excel.Application.Quit()