我使用以下代码将日期值从转换为 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”,但在附加完成后我得到相同的通用格式。 其他日期力量提供了类似的结果。
我正在寻找短日期格式。 范围引用是正确的,并考虑了源工作表和目标工作表之间不同的标题空间。
我不确定这是否正是您想要的,但根据您的代码示例,以下代码示例可能有用。
这段代码将
此代码示例首先将第 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 行中的日期值)现在都是 Excel 日期,并且格式为 Excel“m/d/yyyy”