You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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里的"短日期"格式,不用手动写格式代码。

额外注意事项

  1. 确保你已经安装了所有需要的依赖包:
    pip install pandas openpyxl pyxlsb
    
  2. 如果源文件的D列是文本格式的日期,建议在读取时先转换为日期类型,避免格式设置失效:
    # 在df = pd.read_excel(...)之后添加
    df["你的D列列名"] = pd.to_datetime(df["你的D列列名"], errors="coerce")
    
  3. 请仔细核对复制范围的坐标,确保源范围和目标起始位置对应准确,避免数据错位。

内容的提问来源于stack exchange,提问作者piseynir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 07:12:30