Python3.11将CSV导入Excel工作表报错求助:NameError与AttributeError
解决方案
错误原因分析
- NameError('f_name'未定义):代码中使用了变量
f_name但未提前定义,大概率是遍历CSV文件时未正确提取文件名,或是变量名拼写错误。 - AttributeError(Workbook无add_sheet属性):混淆了Excel操作库的API——
add_sheet是xlwt库(仅支持xls格式)的方法,若你用的是openpyxl(支持xlsx格式),创建新工作表的正确方法是create_sheet()。
可行代码示例
下面提供两种常用实现方式,选一种适配你的需求:
方式1:使用pandas + openpyxl(简洁高效)
import os import pandas as pd from openpyxl import load_workbook # 配置路径 csv_dir = "你的CSV文件所在文件夹路径" excel_path = "目标Excel文件路径.xlsx" # 遍历文件夹下所有CSV文件 for filename in os.listdir(csv_dir): if filename.endswith(".csv"): # 提取文件名(不含后缀)作为工作表名 sheet_name = os.path.splitext(filename)[0] csv_path = os.path.join(csv_dir, filename) # 读取CSV数据 df = pd.read_csv(csv_path) # 写入Excel:若文件存在则追加,不存在则新建 with pd.ExcelWriter(excel_path, engine="openpyxl", mode="a", if_sheet_exists="replace") as writer: df.to_excel(writer, sheet_name=sheet_name, index=False)
方式2:使用openpyxl原生方法(手动控制细节)
import os import csv from openpyxl import Workbook, load_workbook csv_dir = "你的CSV文件所在文件夹路径" excel_path = "目标Excel文件路径.xlsx" # 加载或创建Excel工作簿 try: wb = load_workbook(excel_path) except FileNotFoundError: wb = Workbook() # 删除默认创建的Sheet(可选) if "Sheet" in wb.sheetnames: wb.remove(wb["Sheet"]) # 遍历CSV文件 for filename in os.listdir(csv_dir): if filename.endswith(".csv"): sheet_name = os.path.splitext(filename)[0] # 若工作表已存在,可选择删除或跳过 if sheet_name in wb.sheetnames: wb.remove(wb[sheet_name]) # 创建新工作表 ws = wb.create_sheet(title=sheet_name) csv_path = os.path.join(csv_dir, filename) # 读取CSV内容并写入工作表 with open(csv_path, "r", encoding="utf-8") as f: reader = csv.reader(f) for row in reader: ws.append(row) # 保存工作簿 wb.save(excel_path)
注意事项
- 确保安装了所需依赖:
pip install pandas openpyxl(方式1)或pip install openpyxl(方式2)。 - 若你的目标Excel是xls格式,需改用
xlwt和xlrd库,此时创建工作表用add_sheet(),但xls格式单工作表最多支持65536行,注意数据量限制。
内容的提问来源于stack exchange,提问作者Bratislav Stosic
相关产品推荐
相关产品推荐

