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

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

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

是否有任何方法可以强制xlsxwriter以期望的格式写入值,这样我就不必进入此工作表并触摸值了吗?无论如何,有没有办法使我执行的这种“触摸”自动化?考虑到xlsxwriter不操纵电子表格,而只是生成电子表格,我对此表示怀疑。

提供的图像显示两个日期值。第一个是我期望的“接触”值,第二个是脚本编写的值。请注意,这些值实际上是相同的,其中一个值刚刚由excel格式化。

“感动”价值与书面价值的示例:

“触摸值与写入值的示例”

我已经尝试以单独的方式格式化datetime字符串以尝试解决此问题,但是没有任何结果。我找不到与类似问题有关的任何其他文献。

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个回答
0
投票

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

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

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

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