【问题标题】:How to force Python XlsxWriter to write to cell in custom format如何强制 Python XlsxWriter 以自定义格式写入单元格
【发布时间】:2019-12-20 14:54:01
【问题描述】:

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

有什么方法可以强制 xlsxwriter 以预期的格式写入值,这样我就不需要进入这张表并触摸该值?无论如何,我执行的这种“触摸”是否自动化?我对此表示怀疑,因为 xlsxwriter 不操作电子表格,只是生成它们。

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

“触及”价值与书面价值的示例:

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

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 读取和解析的,脚本的该部分未包含在内。 提前感谢您的帮助。

【问题讨论】:

    标签: python datetime xlsxwriter


    【解决方案1】:

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

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

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

    【讨论】:

    • 我没想到。当我进行更改以仅编写日期时间对象而不是日期格式的字符串时,它可以正常工作。感谢您的帮助!
    猜你喜欢
    • 2023-03-24
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多