如何使用win32com获取已打开Excel工作簿的最后一行?
解决方法
你用的是win32com调用Excel的COM对象,和openpyxl/pandas的对象模型完全不同,所以sheet.max_row这类方法不适用,得用Excel原生的VBA逻辑来获取最后一行:
方法1:通过UsedRange获取已使用区域的最后一行
如果工作表数据是连续的(无大面积空白行),可以用UsedRange属性获取所有包含数据或格式的单元格区域,再取其总行数:
# 获取已使用区域的最后一行行号 last_row = sheet.UsedRange.Rows.Count # 构建从A4到G列最后一行的复制范围 copyrange = sheet.Range(f'A4:G{last_row}') copyrange.CopyPicture(Appearance=1, Format=2)
方法2:指定列向上查找最后非空单元格(更精准)
如果工作表存在空白行,或者想针对某一列(比如G列)定位最后一行,用Range.End模拟Excel里的Ctrl+Up操作:
# xlUp的常量值为-4162,win32com未预定义该常量,直接用数值替代 last_row = sheet.Range("G" & excel.Rows.Count).End(-4162).Row # 动态生成复制范围 copyrange = sheet.Range(f'A4:G{last_row}') copyrange.CopyPicture(Appearance=1, Format=2)
补充说明
- 若想基于其他列判断最后一行,把代码里的"G"改成对应列标识即可(比如"A")
CopyPicture参数:Appearance=1对应按打印效果复制,Format=2对应位图格式;若需矢量图,可将Format改为1(对应xlPicture)
内容的提问来源于stack exchange,提问作者CptLuna
相关产品推荐
相关产品推荐

