使用 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)
我试图找到 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)