如何用Python实现提示用户从CSV复制指定行Quantity数据到XLS?
实现CSV指定行数据写入XLS文件的Python脚本
当然可以用Python实现这个需求,下面是完整的解决方案,用到pandas处理表格数据,openpyxl/xlrd作为XLS文件的读写引擎。
步骤1:安装依赖库
先执行以下命令安装所需的第三方库:
pip install pandas openpyxl xlrd==1.2.0
注:新版
xlrd不再支持XLS格式,因此指定安装1.2.0版本;若处理的是XLSX格式,可省略xlrd的安装。
步骤2:完整脚本代码
import pandas as pd def main(): # 提示用户输入行范围并验证格式 while True: range_input = input("请输入要复制的行范围(格式如1-5):") try: start_row, end_row = map(int, range_input.split('-')) if start_row < 1 or end_row < start_row: print("输入无效,请确保起始行≥1且结束行≥起始行") continue break except ValueError: print("输入格式错误,请用'起始行-结束行'的格式,比如1-5") # 读取源文件 try: csv_df = pd.read_csv("File1.csv") # 读取XLS文件(XLSX格式请将engine改为'openpyxl') xls_df = pd.read_excel("File1.xls", engine='xlrd') except FileNotFoundError as e: print(f"错误:找不到文件 - {e.filename}") return except Exception as e: print(f"读取文件时出错:{str(e)}") return # 检查行范围是否超出数据总行数 max_row = len(csv_df) if end_row > max_row: print(f"警告:输入的结束行超出CSV文件总行数(共{max_row}行),将只处理到第{max_row}行") end_row = max_row # 转换为pandas的0-based索引 start_idx = start_row - 1 end_idx = end_row - 1 # 复制对应行的Quantity数据到XLS文件 xls_df.loc[start_idx:end_idx, 'Quantity'] = csv_df.loc[start_idx:end_idx, 'Quantity'].values # 保存修改后的文件(XLSX格式请将engine改为'openpyxl') try: # 若要保留原文件,可修改文件名如"File1_updated.xls" xls_df.to_excel("File1.xls", index=False, engine='xlwt') print(f"已成功将第{start_row}-{end_row}行的Quantity数据写入XLS文件") except Exception as e: print(f"保存文件时出错:{str(e)}") if __name__ == "__main__": main()
关键说明
- 行号转换:用户输入的是日常使用的1-based行号(比如1-5对应第一到第五行),脚本自动转换为pandas使用的0-based索引(即0到4),确保数据对应正确。
- 格式兼容:
- 处理XLS文件用
xlrd读、xlwt写;处理XLSX文件则替换为openpyxl引擎。 - CSV文件直接通过
pandas.read_csv读取,无需额外配置。
- 处理XLS文件用
- 容错处理:包含输入格式验证、文件存在性检查、行范围越界提示,避免运行时异常。
- 文件保存:默认覆盖原XLS文件,如需保留原文件,修改
to_excel的文件名参数即可。
内容的提问来源于stack exchange,提问作者QuickSilver42
相关产品推荐
相关产品推荐

