如何在整个工作簿中使用 Excel 的格式刷

Posted

技术标签:

【中文标题】如何在整个工作簿中使用 Excel 的格式刷【英文标题】:How Do I Use Excel's Format Painter Across a Whole Workbook 【发布时间】:2014-11-20 13:36:28 【问题描述】:

每周我都会使用 Python/Pandas 生成一个大型 Excel 表格。但是,由于专有格式,Pandas 中的 xls 编写器不允许格式化 excel 表。目前,我必须在新生成的文件中逐个工作表并从前一周的工作表中复制格式,这有点令人讨厌。

有没有办法(按优先顺序):

    在 Python 中将所有格式从一个 Excel 工作表复制到另一个工作表 格式 将工作簿中的所有工作表绘制到第二个工作簿 这将制作一个带有格式和链接的表格,我可以更新而不是重新保存,但我希望有一个像 (1) 或 (2) 这样的解决方案。

【问题讨论】:

我可以用 xlwt 写出格式(来自 python 而不是 pandas,虽然你也可以通过 pandas 来完成)。如果有兴趣请看这里:***.com/questions/25863381/… 有趣的东西。我仍然希望在某个时候获得批发副本,但我可能不走运。 您在寻找 VBA 解决方案吗? 我处理这个问题的一种方法是像往常一样从 pandas 输出数据。然后制作一个新工作簿,将其链接到 pandas 输出,然后根据需要进行格式化。熊猫的新/不同输出?复制格式化版本并更改数据源。 【参考方案1】:

我会这样做:

import win32com.client
xlPasteFormats                 = -4122
xlPasteSpecialOperationNone    = -4142
excelInstance = win32com.client.gencache.EnsureDispatch ("Excel.Application")
workbook = excelInstance.Workbooks.Item(1)
worksheet = workbook.Worksheets(1)
worksheet2 = workbook.Worksheets(3)
cells1 = worksheet.UsedRange
cells2 = worksheet2.UsedRange
cells1.Copy()
cells2.PasteSpecial(xlPasteFormats, xlPasteSpecialOperationNone)

这与 VBA 中的解决方案非常相似,因为使用相同的功能,但通过 COM 完成,因此您完全停留在 Python 中。

在这段代码中,我打开了工作簿。如果你想打开工作簿,你应该输入:

filepath = r"path:\To\Excel\Workbook"
excelInstance.Workbooks.Open(filepath)

【讨论】:

这真的很接近,但我在从工作簿粘贴到工作簿时遇到问题。 excelInstance.Workbooks.Open(文件路径); excelInstance.Workbooks.Open(filepath2) 知道了……这太棒了。谢谢。【参考方案2】:

这是执行此操作的 VBA 方法(来自 sancho.s 的 answer in this question),假设每个工作簿中的工作表名称相同。您也许可以在 Python 中使用这些对象,或者至少在您从中复制的工作簿中创建此宏。

Sub FormatMAC()
    Dim wb1 As Workbook, wb2 As Workbook
    Set wb1 = Workbooks("Results_2012 - Template - Master.xlsx")
    Set wb2 = Workbooks("Copy of Results_2012 - Template1.xlsm")
    Dim ws1 As Worksheet, ws2 As Worksheet
    For Each ws1 In wb1.Worksheets
      Set ws2 = wb2.Worksheets(ws1.Name)
      ws1.Cells.Copy
      ws2.Cells.PasteSpecial (xlPasteFormats)
    Next ws1
End Sub

【讨论】:

以上是关于如何在整个工作簿中使用 Excel 的格式刷的主要内容,如果未能解决你的问题,请参考以下文章

如何在保存到 OneDrive 的 Excel 工作簿中运行 SQL 查询?

excel里面我想 用VBA实现调用另一个工作簿中的数据怎么解决

使用 VBA 宏从 Excel 工作簿中取消选择所有复选框

在 Excel 中,如何调用存储在另一个工作簿中的用户定义函数而无需打开另一个工作簿?

Excel忽略了其他工作簿中可用的代码

如何将一个 Excel 工作簿中的多个工作表合并成一个工作表?