Python / Excel:如何冻结生成的工作表(或工作表)的第一行

这实际上不是一个问题,而是更多的参考。 我花了一段时间才弄明白这一点,因为我在Google上search时发现了一些小问题(包括StackOverflow中的一些相关问题),但是没有任何文章或者文章能够在一个地方给出完整的答案。 我终于能够通过在Excel中录制一个macros并查看它的源代码并将我在那里find的和我在网上find的结合起来。

无论如何,下面的代码片断显示了两个辅助函数,再加上一个main()types的函数(我总是使用它,即使在Perl和Python应用程序中,因为我有C / C ++ / Java背景)。

第一个帮助器方法将自动适应给定工作表中的每个使用的列。 由于自适应逻辑取决于单元格中的数据以及正在使用的字体,因此在整个表单完全填充数据之前,不应调用此方法。 另外,我对VBA很新,所以我不太确定这一行:

sheet.Cells(1, i).EntireColumn.AutoFit() 

是正确的,但它似乎工作得很好。 如果不完全正确,也许你可以发表一个更正。

 def autoFitSheet(sheet): """Auto-fits all the used columns on the given sheet. Obviously, this method should only be called _after_ the sheet has been populated.""" firstCol = sheet.UsedRange.Column numCols = sheet.UsedRange.Columns.Count for i in range(firstCol, (firstCol + numCols)): sheet.Cells(1, i).EntireColumn.AutoFit() 

第二个帮手是“冻结顶线”的方法。 它所做的只是冻结通过它的工作表的第一行。 这种方法的一个副作用是表单成为电子表格中的活动表单,因此,一旦所有表单的顶部行被冻结,您可能需要/想要激活其他表单。

 def freezeTopLine(window, sheet): """Freezes the top line of the given sheet.""" sheet.Activate() window.SplitColumn = 0 window.SplitRow = 1 window.FreezePanes = True 

最后一个片段是一个main()函数的例子,它显示了如何调用两个辅助方法。 我实际上使用的代码非常类似于这个填充多个标签/工作表的电子表格,它完美的工作(在Windows 7上 – 不能保证它将如何在您的系统上工作)。

 def main(...): # # (whatever...) # excel = win32.gencache.EnsureDispatch('Excel.Application') workbook = excel.Workbooks.Add() sheets = workbook.Sheets window = workbook.Windows(1) sheet1 = workbook.Worksheets('Sheet1') straddles.Name = 'My First Sheet' straddles.Tab.ColorIndex = 6 # yellow sheet2 = workbook.Worksheets('Sheet2') cashSummary.Name = 'Some Other Sheet' cashSummary.Tab.ColorIndex = 4 # bright green # # Populate sheets... # for sheet in sheets: autoFitSheet(sheet) freezeTopLine(sheet) # # (whatever...) # 

就像我说的,我花了一段时间才弄明白这一点,我希望也许我可以解救一些我经历的头痛。 祝你好运。