`openpyxl`(用于读写 Excel 文件)、`os`(用于操作系统相关功能,如路径操作、文件存在性检查等)和 `time`(常用于时间延迟、计时或获取时间戳)三个 Python 标准/第三方

openpyxl(用于读写 Excel 文件)、os(用于操作系统相关功能,如路径操作、文件存在性检查等)和 time(常用于时间延迟、计时或获取时间戳)三个 Python 标准/第三方库。这是一个常见的组合,常用于自动化处理 Excel 文件,例如:

  • 批量读取/生成 Excel 表格
  • 动态命名文件(结合 time.strftime()
  • 检查文件路径是否存在(os.path.exists
  • 自动保存带时间戳的备份文件(如 report_20240520_143022.xlsx

✅ 示例:用当前时间生成带时间戳的 Excel 文件名

timestamp = time.strftime("%Y%m%d_%H%M%S")
filename = f"output_{timestamp}.xlsx"
wb = openpyxl.Workbook()
wb.save(filename)
print(f"已保存:{filename}")

✅ 示例:安全检查并创建目录

output_dir = "exports"
os.makedirs(output_dir, exist_ok=True)
wb.save(os.path.join(output_dir, filename))

使用 openpyxl 读取 Excel 中指定工作表的某一列数据(例如:读取工作表 Sheet1B 列的所有非空单元格值),推荐以下两种高效、清晰的方式:


✅ 方法一:按列字母读取(推荐,语义清晰)

from openpyxl import load_workbook

wb = load_workbook("data.xlsx")
ws = wb["Sheet1"]  # 指定工作表名;也可用 wb.active 获取活动表

# 读取 B 列(从第1行到最大行),自动跳过空单元格(可选过滤)
column_b_data = [cell.value for cell in ws["B"] if cell.value is not None]

print(column_b_data)

🔍 说明:ws["B"] 返回一个生成器,遍历 B 列所有行的单元格(从第1行开始,至该列最后一行有内容的行)。注意:它包含空单元格.valueNone),因此加 if cell.value is not None 可过滤空值。


✅ 方法二:按列索引读取(适合动态列号)

from openpyxl.utils import get_column_letter

col_index = 2  # B列对应索引为2(A=1, B=2, ...)
col_letter = get_column_letter(col_index)
column_data = [cell.value for cell in ws[col_letter] if cell.value is not None]

✅ 进阶:只读取有数据的实际范围(更精准,避免尾部空行)

# 获取该列中实际有数据的最大行号(基于工作表维度)
ws.calculate_dimension()  # 确保维度已更新(尤其对新写入文件)
max_row = ws.max_row
column_b_data = []
for row in range(1, max_row + 1):
    val = ws.cell(row=row, column=2).value  # B列 = column=2
    if val is not None:
        column_b_data.append(val)

💡 提示:ws.max_rowws.max_column 是估算值,对含大量空行/格式的文件可能不准;如需绝对可靠,建议结合 ws.iter_rows(min_col=2, max_col=2, values_only=True)(见下)。


✅ 最佳实践:使用 iter_rows() + values_only=True(内存友好,推荐用于大表)

# 仅获取 B 列(第2列)所有行的值,跳过样式/公式,返回元组
b_column_values = [
    row[0] for row in ws.iter_rows(
        min_col=2, max_col=2,
        min_row=1, max_row=ws.max_row,
        values_only=True
    ) if row[0] is not None
]

📌 注意事项:

  • openpyxl 默认读取时保留公式结果(不是公式文本),如需原始公式请设 data_only=False(默认即 True,即读结果);
  • 若需读取公式本身:load_workbook("file.xlsx", data_only=False),再用 cell.valuecell.formula
  • 首次打开 .xlsx 文件较慢,可考虑 read_only=True 模式(但不支持 ws["B"] 语法,需改用 ws.iter_cols())。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bol5261

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值