如何用数字指定openpyxl的B列?散点图如何按数字标识获取列长度?
针对你的两个openpyxl问题的解答
1. 是否可以通过openpyxl用数字来指定B列?
当然可以!openpyxl完全支持用数字指定列——毕竟列字母本质就是数字的另一种表示(B对应2)。这里有两种常用实现方式:
- 方法一:将数字列号转为字母后访问
如果你习惯用列字母的操作逻辑,可以借助openpyxl.utils里的get_column_letter工具函数,把数字转成对应字母:
from openpyxl import load_workbook from openpyxl.utils import get_column_letter # 加载工作簿和工作表 wb = load_workbook('your_file.xlsx') ws = wb.active col_number = 2 # 数字2对应B列 col_letter = get_column_letter(col_number) # 获取B列的所有单元格 b_column = ws[col_letter] # 遍历输出B列的值 for cell in b_column: print(cell.value)
- 方法二:直接用数字列号通过iter_cols访问
不想转字母的话,直接用iter_cols方法,通过min_col和max_col参数指定数字列号即可:
from openpyxl import load_workbook wb = load_workbook('your_file.xlsx') ws = wb.active # 遍历B列(数字2)的所有单元格,values_only=True直接获取值 for cell_value in ws.iter_cols(min_col=2, max_col=2, values_only=True): print(cell_value)
2. 如何通过数字标识的列获取长度,来指定散点图的最大行长度?
这个需求很实用,核心是先拿到目标数字列的有效数据行数,再把这个行数作为散点图的数据范围上限。分两种场景给你方案:
场景一:获取目标列的有效数据行数(忽略末尾空行)
如果列末尾有大量空单元格,只想统计有实际数据的行,可以遍历列找到最后一个非空单元格的行号:
from openpyxl import load_workbook wb = load_workbook('your_file.xlsx') ws = wb.active target_col = 2 # 目标列数字,比如B列 max_data_row = 0 # 遍历列中的每一行,记录最后一个有值的行号 for row in range(1, ws.max_row + 1): cell_val = ws.cell(row=row, column=target_col).value # 判断单元格是否有有效数据(排除None和空字符串) if cell_val is not None and cell_val != '': max_data_row = row print(f"目标列的有效数据最大行是:{max_data_row}")
场景二:基于有效行数创建散点图
拿到max_data_row后,就可以用它来限定散点图的数据范围了,示例代码如下:
from openpyxl import load_workbook from openpyxl.chart import ScatterChart, Reference wb = load_workbook('your_file.xlsx') ws = wb.active target_col = 2 # 目标数字列(B列) # 先获取目标列的有效最大行(复用上面的逻辑) max_data_row = 0 for row in range(1, ws.max_row + 1): cell_val = ws.cell(row=row, column=target_col).value if cell_val is not None and cell_val != '': max_data_row = row # 创建散点图 scatter_chart = ScatterChart() # 指定X轴和Y轴的数据范围(假设X轴是A列,从第2行开始到max_data_row) x_data = Reference(ws, min_col=1, max_col=1, min_row=2, max_row=max_data_row) y_data = Reference(ws, min_col=target_col, max_col=target_col, min_row=2, max_row=max_data_row) # 添加数据到图表 scatter_chart.add_data(y_data, titles_from_data=True) scatter_chart.set_categories(x_data) # 把图表插入到工作表的D1位置 ws.add_chart(scatter_chart, "D1") # 保存工作簿 wb.save('your_chart_file.xlsx')
更高效的获取有效行方式
如果你用的是openpyxl 2.5+版本,可以用生成器表达式更简洁地获取最后有效行:
from openpyxl import load_workbook wb = load_workbook('your_file.xlsx') ws = wb.active target_col = 2 # 遍历目标列,收集所有有值的行号 valid_rows = [cell.row for cell in ws.iter_cols(min_col=target_col, max_col=target_col)[0] if cell.value is not None] max_data_row = max(valid_rows) if valid_rows else 1
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

