如何读取Excel至最后非空单元格?求对应语法
从Excel读取A1至最后非空单元格范围的实现方法
当然可以实现这类动态范围的读取,不同工具的语法和实现方式略有不同,下面分几种常用场景说明:
1. Python Pandas 库
如果用Pandas读取Excel,你可以先通过openpyxl获取最后非空行和列,再构造范围字符串读取:
import pandas as pd from openpyxl import load_workbook # 加载工作簿(只读模式提升效率) wb = load_workbook('你的文件.xlsx', read_only=True) ws = wb.active # 获取最后非空行号和列号 last_row = ws.max_row last_col = ws.max_column # 将列号转换为Excel字母格式(如27→AA) last_col_letter = ws.cell(row=1, column=last_col).column_letter # 构造A1到最后非空单元格的范围字符串 range_str = f'A1:{last_col_letter}{last_row}' # 读取指定范围的数据 df = pd.read_excel('你的文件.xlsx', sheet_name=0, usecols=range_str, nrows=last_row)
如果你的数据没有中间空白行/列干扰,直接用pd.read_excel()默认也会自动识别有数据的区域,无需手动指定范围。
2. Python OpenPyXL 库
用OpenPyXL直接操作工作表时,可以通过max_row和max_column定位范围:
from openpyxl import load_workbook wb = load_workbook('你的文件.xlsx') ws = wb['Sheet1'] # 获取最后非空行、列 last_row = ws.max_row last_col = ws.max_column # 遍历读取A1到最后非空单元格的所有数据 data_list = [] for row in ws.iter_rows(min_row=1, max_row=last_row, min_col=1, max_col=last_col, values_only=True): data_list.append(row)
3. VBA(Excel宏)
在VBA中可以手动定位最后非空行和列,再构造目标范围:
Sub ReadDynamicRange() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") ' 找到A列最后非空行 Dim lastRow As Long lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 找到第1行最后非空列 Dim lastCol As Integer lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column ' 构造A1到最后非空单元格的范围 Dim targetRange As Range Set targetRange = ws.Range("A1", ws.Cells(lastRow, lastCol)) ' 这里可以添加数据处理逻辑,比如打印范围地址 MsgBox "目标范围:" & targetRange.Address End Sub
也可以直接用ws.UsedRange获取已使用区域,但注意这个属性可能包含曾经编辑过后来清空的单元格,准确性不如手动定位。
4. Excel 内动态引用(公式)
如果是在Excel单元格中动态引用这个范围,可以定义动态名称:
- 点击「公式」→「定义名称」
- 名称设为
DataRange,引用位置输入:=$A$1:INDEX($A:$XFD,MAX(ROW($A:$A)*($A:$A<>"")),MAX(COLUMN($1:$1)*($1:$1<>"")))
Excel 365直接回车即可,旧版本需按Ctrl+Shift+Enter作为数组公式。之后在其他单元格就可以用=DataRange引用这个动态范围。
内容的提问来源于stack exchange,提问作者babipsylon
相关产品推荐
相关产品推荐

