Python实现每次运行输入写入Excel递增行的问题求助
问题分析与解决方案
嘿,我来帮你梳理下这段代码的问题,再给你一个能正常工作的实现方案~
原代码的几个问题:
- 类型错误:
ws['A'+i]里的i是整数,不能直接和字符串'A'拼接,Python会抛出TypeError: can only concatenate str (not "int") to str。 - 无效的循环逻辑:你的while循环里刚进入就
break,等于完全没执行循环,而且这个循环本身也不符合需求——我们不需要在单次运行里循环写入,而是每次运行程序时找到下一个空行写入一次。 - 未定位到正确的写入位置:每次运行程序都应该先找到A列最后一行有数据的位置,然后在下一行写入新内容,而不是从
i=0开始(那样每次运行都会覆盖A1单元格)。 - 未处理文件不存在的情况:如果
name.xlsx还没创建,openpyxl.load_workbook()会直接抛出FileNotFoundError。
正确的实现代码:
import openpyxl from openpyxl import Workbook file_name = 'name.xlsx' try: # 尝试加载已存在的工作簿 wb = openpyxl.load_workbook(file_name) ws = wb.active except FileNotFoundError: # 如果文件不存在,创建新的工作簿和工作表 wb = Workbook() ws = wb.active # 可选:给A列加个表头 ws['A1'] = 'Name' # 找到A列最后一个有数据的行号,下一行就是我们要写入的位置 last_row = ws.max_row # 写入新内容到下一行 ws.cell(row=last_row + 1, column=1, value=input("Please enter your name here: ")) # 保存工作簿 wb.save(file_name)
代码说明:
- 文件存在性处理:用
try-except捕获文件不存在的异常,自动创建新工作簿,避免报错。 - 定位写入位置:通过
ws.max_row获取当前工作表的最大行号(只要我们只在A列写入数据,这个值就对应A列最后一行有内容的位置),然后在last_row + 1行写入新内容。 - 安全的单元格写入:用
ws.cell(row=..., column=..., value=...)的方式写入,避免字符串拼接的类型问题,写法更直观可靠。
内容的提问来源于stack exchange,提问作者Jeremy P.
相关产品推荐
相关产品推荐

