如何强制 Python XlsxWriter 以自定义格式写入单元格

How to force Python XlsxWriter to write to cell in custom format

我正在编写一个脚本来生成要上传到我们系统中的 xlsx 文件。其中一列包含当前日期,需要以非常具体的方式进行格式化(自定义:m/d/yyyy h:mm' 具体而言)。我在脚本中有一个成功地正确格式化单元格的命令,我知道这一点,因为如果我检查生成的 xlsx 中的单元格格式,它会显示正确的格式。但是,xlsxwriter 实际上并没有写入该格式,因为它被上传拒绝了。如果我打开 spreadsheet 和 'touch' 值(在单元格上按回车键),那么它会正确格式化为我期望的值。

有什么方法可以强制 xlsxwriter 以预期的格式写入值,这样我就不需要进入这个 sheet 并修改该值了吗?有没有办法让我执行的 'touch' 自动化?我对此表示怀疑,因为 xlsxwriter 不操纵 spreadsheets,只是生成它们。

提供的图片显示了两个日期值。第一个是我期望的 'touched' 值,第二个是脚本写入的值。请注意,这些值实际上是相同的,一个只是被 excel.

格式化了

'touched' 值与写入值的示例:

我曾尝试以不同的方式格式化日期时间字符串以尝试解决此问题,但没有产生任何结果。我找不到与类似问题相关的任何其他文档。

import xlsxwriter
import datetime

x = datetime.datetime.now()
Date = str(x.strftime("%m")) + "/" + str(x.strftime("%d")) + "/" + str(x.strftime("%Y")) + " " + str(x.strftime("%I")) + ":" + str(x.strftime("%M")) + ":00" + " " + str(x.strftime("%p"))
workbook = xlsxwriter.Workbook("C:/" + File_Name)
worksheet = workbook.add_worksheet('Fills')
Dealer_out = ['External', Dealer_Name, Dealer_Exchange, Symbol, 'Manual_JV', '', '', '', Date, Account_Number, Account_Number, Opposite_Side[Dealer_Side.upper()], Dealer_Amount, Dealer_Price, 'TRUE']
Header = ['Source', 'Context', 'Exchange', 'Internal Symbol', 'Origin', 'Order Id', 'Exchange Order Id', 'Fill Id', 'Fill Time', 'Intern Account Number', 'External Account Number', 'Side', 'Quantity', 'Price', 'IsActive']
row = 0
col = 0
#write header to spreadsheet
cell_bold = workbook.add_format({'bold': True})
cell_format1 = workbook.add_format({'num_format': 'm/d/yyyy h:mm'})
cell_format1.set_num_format('m/d/yyyy h:mm')
#write dealer information to spreadsheet
for cell in Dealer_out:
if col == 8:
    worksheet.write(row, col, cell, cell_format1)
else:
    worksheet.write(row, col, cell)
col += 1
db.close()
workbook.close()

'Dealer_out' 中写出的值是从 csv 中读取和解析的,脚本的那部分未包含在内。 提前感谢您的协助。

看起来您正在使用日期格式编写字符串(看起来像日期)。

但是,Excel 中的日期实际上是具有日期格式的 数字 。 XlsxWriter 文档的 Working with Dates and Time 部分对此进行了解释。

您需要扩展您的程序以将从 CSV 文件中读取的日期字符串转换为 Datetime 对象。如果您随后编写日期时间对象(使用 write() 和格式),您将获得所需格式的日期。