Python处理.xlsb文件:修改D列为短日期及跨表复制行列求助
嘿,作为Python新手能想到这套XLSB转XLSX再处理的流程已经很棒了!针对你的三个核心需求——添加用户输入日期、将D列设置为短日期格式、优化格式处理环节,我整理了一套整合后的代码,同时简化了原有的复制粘贴逻辑,让代码更易读也更高效:
import pandas as pd import openpyxl from openpyxl.styles import numbers # 获取用户输入的追加日期 target_date = input("您希望将哪个日期追加到my analyse document.xlsx中?") # 读取XLSB文件并导出为无索引的XLSX临时文件 df = pd.read_excel("main document.xlsb", sheet_name="Data", engine="pyxlsb") df.to_excel("temporary document.xlsx", index=False) # 去掉自动生成的行索引,避免多余列干扰 # 加载临时文件和目标分析文件 wb_temp = openpyxl.load_workbook("temporary document.xlsx") sheet_temp = wb_temp["Sheet1"] wb_analyse = openpyxl.load_workbook("my analyse document.xlsx") sheet_analyse = wb_analyse["Sheet2"] # 定义复制的源范围和目标起始位置(对应你原来的参数) src_start_col, src_start_row = 2, 2011 src_end_col, src_end_row = 183, 2274 dst_start_col, dst_start_row = 2, 4573 # 逐行逐列复制数据,并同步设置D列格式 for row_offset, src_row in enumerate(range(src_start_row, src_end_row + 1)): dst_row = dst_start_row + row_offset for col_offset, src_col in enumerate(range(src_start_col, src_end_col + 1)): dst_col = dst_start_col + col_offset # 复制单元格值 cell_value = sheet_temp.cell(row=src_row, column=src_col).value sheet_analyse.cell(row=dst_row, column=dst_col).value = cell_value # 给D列(第4列)设置短日期格式 if dst_col == 4: sheet_analyse.cell(row=dst_row, column=dst_col).number_format = numbers.FORMAT_DATE_XLSX_SHORT # 可选:把用户输入的日期写入分析文件的指定位置(比如A1单元格,可自行调整位置) # sheet_analyse["A1"].value = f"本次追加日期:{target_date}" # 保存修改并关闭文件 wb_analyse.save("my analyse document.xlsx") wb_temp.close() wb_analyse.close() print(f"操作完成!数据已追加到分析文件,D列已设为短日期格式,记录的追加日期为:{target_date}")
关键功能拆解
- 用户输入模块:用
input()函数直接获取用户指定的日期,你可以根据需求把这个日期写入分析文件的任意位置(代码里留了可选的示例,取消注释即可)。 - XLSB转XLSX优化:添加
index=False避免pandas把自动生成的行索引写入临时文件,减少不必要的列干扰。 - 复制+格式同步处理:去掉了原有的两个函数,改用
enumerate计算偏移量,直接在复制时就给D列设置格式,一步到位,逻辑更清晰。 - 短日期格式设置:借助
openpyxl内置的FORMAT_DATE_XLSX_SHORT常量,完美对应Excel里的"短日期"格式,不用手动写格式代码。
额外注意事项
- 确保你已经安装了所有需要的依赖包:
pip install pandas openpyxl pyxlsb - 如果源文件的D列是文本格式的日期,建议在读取时先转换为日期类型,避免格式设置失效:
# 在df = pd.read_excel(...)之后添加 df["你的D列列名"] = pd.to_datetime(df["你的D列列名"], errors="coerce") - 请仔细核对复制范围的坐标,确保源范围和目标起始位置对应准确,避免数据错位。
内容的提问来源于stack exchange,提问作者piseynir
相关产品推荐
相关产品推荐

