如何在 Python 中使用 Openpyxl 格式化从 csv 附加到 xlsx 的日期?

问题描述 投票:0回答:1

我使用以下代码将日期值从转换为 xlsx 的 csv 复制,但日期通常会附加。即使手动格式绘制似乎也无法解决该问题。我的格式副本中是否缺少某些内容?

for col in range(1, mc2+1):
for row in range(3, mr2+1):
    source = ws2.cell(column=col, row=row-1)
    cell = ws2.cell(column=col, row=row)
    cell.font = copy(source.font)
    cell.border = copy(source.border)
    cell.number_format = copy(source.number_format)
    cell.alignment = copy(source.alignment)
    cell.fill = copy(source.fill)

11/1/2023 是我看到的“左对齐通用数字格式”

我知道 csv 文件没有日期格式,但 Excel 不会像我手动将其输入到单元格中那样从一般输入转换它。

将强制编码为日期时间“%m%d%Y”,但在附加完成后我得到相同的通用格式。 其他日期力量提供了类似的结果。

我正在寻找短日期格式。 范围引用是正确的,并考虑了源工作表和目标工作表之间不同的标题空间。

python date format openpyxl xlsx
1个回答
0
投票

我不确定这是否正是您想要的,但根据您的代码示例,以下代码示例可能有用。

这段代码将

  1. 按列迭代工作表,因为您要为每个单元格在列中复制相同的值/格式。
  2. 将源设置为从第 2 行开始的列中的第一个单元格,例如“A2”。
  3. 将单元格值/格式更新为与第 2 行单元格相同。

此代码示例首先将第 2 行单元格中的值更改为日期时间(如果它是字符串),因此复制该单元格将具有正确的数字格式。

from copy import copy
from datetime import datetime
from openpyxl import load_workbook


src_file = 'foo.xlsx'

wb2 = load_workbook(src_file)
ws2 = wb2['Sheet1']

mr2 = 6  # Some arbitrary row to stop at

### Start loop at row 2, row with the dates as string.
for row in ws2.iter_cols(min_row=2, max_row=mr2, max_col=ws2.max_column):
    source = row[0]  # Set source to first cell, e.g. 'A2'
    date_value = source.value  #  Get the cell value 
    if isinstance(date_value, str):  # Check if the value is a string 
        date_value = datetime.strptime(source.value, '%m/%d/%Y')  # If string convert to datetime.  

    ### Iterate the remaining cells in the column e.g. A3 to A{mr2} and update the value to the source value and formatting
    ### Set the number_format to Excel 'm/d/yyyy'
    for cell in row:
        cell.value = date_value
        cell.font = copy(source.font)
        cell.border = copy(source.border)
        cell.number_format = 'm/d/yyyy'
        cell.alignment = copy(source.alignment)
        cell.fill = copy(source.fill)

wb2.save('foo.xlsx')

输出示例
对于第 2 行中日期为字符串的示例表

更新了表格。所有日期值(包括第 2 行中的日期值)现在都是 Excel 日期,并且格式为 Excel“m/d/yyyy”

© www.soinside.com 2019 - 2024. All rights reserved.