使用 win32com 模块找到 A 列的最后一行并填充其下方的单元格 - Python

Find last row of column A and fill cell below it using win32com module - Python

我试图找到 A 列中的最后一行并使用 "fill series" 格式填充最后一行下方的单元格。我的代码如下所示。

这里有几点说明 1) 作品sheet 是在处理源范围和填充范围之前进行分组选择的 2) 列数据类型可能不同于 sheet 到 sheet,但当我指定确切范围

时,填充系列格式有效
import win32com.client as win32

excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True
wb = excel.Workbooks.Open ('D:\Data Str\Test Files\Book1.xls')
ws = wb.Worksheets(['Sheet1','Sheet2'])
ws.Select()
for sheet in ws:
       lastRow = sheet.UsedRange.Rows.Count
       print (lastRow)
       sourceRange = sheet.Range("A") & lastRow
       fillRange = sheet.Range("A") & lastRow + 1
       sourceRange.AutoFill(fillRange, win32.constants.xlFillSeries)

代码按预期运行到 sourceRange 变量,我收到以下错误。

com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2146827284), None)

我的预期输出和示例数据集显示在下面的 table 中。这两列对应于 Sheet1 和 Sheet2 的 A 列。

Key (Sheet1)    Date (Sheet 2)
1               01/11/2019
2               02/11/2019
3               03/11/2019
4               04/11/2019
5               05/11/2019
6               06/11/2019
7               07/11/2019
8               08/11/2019
9               09/11/2019
10              10/11/2019
11              11/11/2019

Expected Result

Key (Sheet1)    Date (Sheet 2)
1               01/11/2019
2               02/11/2019
3               03/11/2019
4               04/11/2019
5               05/11/2019
6               06/11/2019
7               07/11/2019
8               08/11/2019
9               09/11/2019
10              10/11/2019
11              11/11/2019
12              12/11/2019

看来问题是我没有正确引用和定义分组工作表中的单元格范围。请参阅我的代码的注释 (#):

import win32com.client as win32

excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True
wb = excel.Workbooks.Open ('D:\Data Str\Test Files\Book1.xls')
ws = wb.Worksheets(['Sheet1','Sheet2'])
ws.Select()
for sheet in ws:
       lastRow = sheet.UsedRange.Rows.Count 
       print (lastRow)
       nRow = lastRow + 1  # In case of different row length, save last row in nRow variable
       sourceRange = sheet.Range("A1" , sheet.Cells(lastRow,1)) 
# Use comma separation and sheet.cells function to define the ending point of Range class method.
       fillRange = sheet.Range("A1" , sheet.Cells(nRow ,1))
       sourceRange.AutoFill(fillRange, win32.constants.xlFillSeries)