使用 python 切片器创建/更新 Excel 文件

问题描述 投票:0回答:1

我有一些 python 代码,它创建了一些 pandas 数据框,我需要将它们放入电子表格中,在多个工作表上包含不同的数据,并使用切片器以便于过滤。 然后将其发送出去,以便其他人可以轻松查看/过滤数据。 目前,我手动将更新的表格复制并粘贴到模板 Excel 文件中,重新保存并发送出去,但如果可能的话,我希望自动化此操作。

我的第一个想法是使用

xlsxwriter
编写格式来生成此电子表格,但是根据这个答案,该库不支持切片器,所以这不好。

然后我考虑看看是否可以自动打开一个模板 Excel 文档,其中切片器已经就位,删除表中以前的数据并添加新数据。 我在使用 openpyxl 时发现了

这个问题
,并使用了一些答案来尝试使用下面的代码来首先删除行:

wb = openpyxl.load_workbook(r'TEST.xlsx')
ws = wb['sheet 1']
rows = ws.max_row
ws.delete_rows(13, rows)
wb.save(r'TEST2.xlsx')

但是,这会完全删除 Excel 文件中的切片器和所有格式,不仅保存新副本,还会删除原始模板中的格式,所以这也不好。

有谁知道我可以使用切片器从 python 自动创建或更新 excel 文件的方法吗?

编辑: 我并不是在寻找有关不同图书馆的意见的建议,正如投票所表明的那样。我正在寻找一种方法来解决特定的编码问题(如果可能的话),对此我已经尝试过的代码和研究让我感到困惑。

python excel openpyxl pywin32 xlsxwriter
1个回答
0
投票

如果有帮助,我尝试了 Xlwings 和 Win32com。
让 Xlwings 添加切片器时出现一些问题,但 win32com 似乎没问题

使用屏幕截图中所示的表格,我在“汽车模型”上添加了切片器 使用“记录宏”,您可以获得切片器的详细信息,例如添加“汽车模型”的宏行是

ActiveWorkbook.SlicerCaches.Add2(ActiveSheet.ListObjects("Table2"), "Car Model").Slicers.Add ActiveSheet, , "Car Model", "Car Model", 10, 600, 150, 210

然后可以将其转换为 Win32com 可以使用的东西。

from win32com import client

path = r'<path>\TEST.xlsx'
sheet = 'sheet 1'

excel = client.Dispatch("Excel.Application")
wb = excel.Workbooks.Open(path)
ws = wb.Sheets[sheet]

### Add Slicer
wb.SlicerCaches.Add2(ws.ListObjects("Table2"), "Car Model").Slicers.Add(
        SlicerDestination=ws,
        Name="Car Model Name",
        Caption="Car Model Caption",
        Top=10,
        Left=600,
        Width=150,
        Height=210)

wb.SaveAs(r'<path>\TEST_out.xlsx')
wb.Close()
excel.Quit()

Example Table with Slicer added

© www.soinside.com 2019 - 2024. All rights reserved.