在 Python XlsxWriter Excel365 中使用日期设置中心格式

Center formating with date in Python XlsxWriter Excel365

提问人:reviker 提问时间:10/23/2023 更新时间:10/23/2023 访问量:30

问:

我在格式化日期单元格时遇到问题,同时使用 Python 中的 Pandas 从 MS SQL 检索数据并将其传输到 Excel365。 将数据输入Excel后,日期列未采用“center”和“vcenter”格式。我不知道为什么

import os.path

import sqlalchemy as db
import pandas as pd

from io import BytesIO
from PIL import Image

conn_string = "mssql+pyodbc://user:user@localhost/db?driver=ODBC+Driver+17+for+SQL+Server"
table_name = "table_name"
photo_path = "D:/tmp/product_photos/"
file_data_path = "D:/tmp/pythonProject/Project1/data/"
plik = file_data_path + "File_"

engine = db.create_engine(conn_string)
connection = engine.connect()


def photo_extensions(path):
    files = [file for file in os.listdir(path) if os.path.isfile(os.path.join(path, file))]
    ext_dict = {}
    for file in files:
        file_name, file_extension = os.path.splitext(file)
        ext_dict[file_name] = file
    return ext_dict

with conn:
    df_raw = pd.read_sql("select top 10 * from table_name", connection)
    df_mag = df_raw["magazine"].unique().tolist()

sku_extension = photo_extensions(photo_path)

df_raw["images"] = photo_path + df_raw["sku"].map(sku_extension)
mag_list = df_raw["magazine"].unique()

if not df_raw.empty:
    for mag in mag_list:
        row = 2
        file_name = plik + mag + ".xlsx"
        df_for_mag = df_raw[df_raw["magazine"] == mag]
        writer = pd.ExcelWriter(file_name, engine="xlsxwriter")
        df_for_mag.to_excel(writer, sheet_name="Sheet1", index=False)
        workbook = writer.book
        worksheet = writer.sheets["Sheet1"]
        cell_format = workbook.add_format()
        
        for image in df_for_mag["images"]:
            if pd.notna(image):
                data = BytesIO(open(image, "rb").read())
                row_insert = "K" + str(row)
                im = Image.open(image)
                width = im.size[0]
                height = im.size[1]
                worksheet.set_row_pixels(row-1, height)
                worksheet.set_column_pixels("K:K", width)
                worksheet.insert_image(row_insert, image, {"image_data": data})
            worksheet.write_blank(row-1, 10, None, cell_format)
            row += 1

        center_format = workbook.add_format({"align": "center", "valign": "vcenter"})
        worksheet.set_column("A:J", None, center_format)

        worksheet.autofit()
        name_format = workbook.add_format({"align": "left", "valign": "vcenter"})
        worksheet.set_column("C:C", 50, name_format)

        date_format = workbook.add_format({"align": "center", "valign": "vcenter"})
        worksheet.set_column("G:G", None, date_format)

        writer.save()
        print(file_name)

输出:在此处输入图像描述

我尝试将格式更改为 ,但它是相同的输出。 我尝试从日期库中获取字符串格式的日期,但随后 excel 看到的是文本,而不是日期{'num_format': 'yyyy-mm-dd'}

python 熊猫 excel 日期 xlsxwriter

评论

0赞 jmcnamara 10/24/2023
发生这种情况的原因是 Pandas 在写入日期时应用单元格格式,因为它需要应用数字格式。然后,单元格格式将覆盖列格式。您可以更改 Pandas 日期/时间格式(XlsxWriter 文档),但不能更改其他属性。可能唯一的方法是用来自数据帧的数据和所需的单元格格式覆盖单元格数据。

答: 暂无答案