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

时间:2014-09-25 17:13:06

标签: python excel excel-vba pandas formatting vba

每周我都会使用Python / Pandas生成一张大型excel表。但是,Pandas中的xls writer不允许因为专有格式而格式化excel表。目前,我必须在新生成的文件中按工作表运行工作表,并在前一周复制表格中的格式有点令人讨厌。

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

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

2 个答案:

答案 0 :(得分:1)

这是VBA的方法(来自answer中的sancho.s' s 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

答案 1 :(得分: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)