Python XlsxWriter - 日期與時間



在Excel中,日期被儲存為實數,以便能夠用於計算。預設情況下,1900年1月1日(稱為紀元)被視為1,因此2022年1月28日對應於44589。類似地,時間表示為數字的小數部分,即一天的百分比。因此,2022年1月28日11:00對應於44589.45833。

Date Format

set_num_format() 方法

由於Excel中的日期或時間就像任何其他數字一樣,要將數字顯示為日期,必須對其應用Excel數字格式。使用set_num_format()方法(Format物件)並使用適當的格式。

以下程式碼片段將數字顯示為“dd/mm/yy”格式。

num = 44589
format1 = wb.add_format()
format1.set_num_format('dd/mm/yy')
ws.write('B2', num, format1)

num_format 引數

或者,可以將add_format()方法的num_format引數設定為所需的格式。

format1 = wb.add_format({'num_format':'dd/mm/yy'})
ws.write('B2', num, format1)

示例

以下程式碼顯示各種日期格式的數字。

import xlsxwriter

wb = xlsxwriter.Workbook('hello.xlsx')
ws = wb.add_worksheet()

num=44589
ws.write('A1', num)

format2 = wb.add_format({'num_format': 'dd/mm/yy'})
ws.write('A2', num, format2)

format3 = wb.add_format({'num_format': 'mm/dd/yy'})
ws.write('A3', num, format3)

format4 = wb.add_format({'num_format': 'd-m-yyyy'})
ws.write('A4', num, format4)

format5 = wb.add_format({'num_format': 'dd/mm/yy hh:mm'})
ws.write('A5', num, format5)

format6 = wb.add_format({'num_format': 'd mmm yyyy'})
ws.write('A6', num, format6)

format7 = wb.add_format({'num_format': 'mmm d yyyy hh:mm AM/PM'})
ws.write('A7', num, format7)

wb.close()

輸出

在Excel軟體中,工作表如下所示:

Num Format Parameter

write_datetime() 和 strptime()

XlsxWriter 的 Worksheet 物件也有write_datetime()方法,在處理使用Python標準庫的datetime模組獲得的日期和時間物件時非常有用。

strptime()方法根據給定的格式返回從字串解析的datetime物件。一些用於格式化字串的程式碼如下:

%a

縮寫的星期幾名稱

Sun, Mon

%A

完整的星期幾名稱

Sunday, Monday

%d

月份中的天數,為零填充的十進位制數

01, 02

%-d

月份中的天數,為十進位制數

1, 2..

%b

縮寫的月份名稱

Jan, Feb

%m

月份,為零填充的十進位制數

01, 02

%-m

月份,為十進位制數

1, 2

%B

完整的月份名稱

January, February

%y

不帶世紀的年份,為零填充的十進位制數

99, 00

%-y

不帶世紀的年份,為十進位制數

0, 99

%Y

帶世紀的年份,為十進位制數

2022, 1999

%H

小時(24小時制),為零填充的十進位制數

01, 23

%-H

小時(24小時制),為十進位制數

1, 23

%I

小時(12小時制),為零填充的十進位制數

01, 12

%-I

小時(12小時制),為十進位制數

1, 12

%p

區域設定的 AM 或 PM

AM, PM

%M

分鐘,為零填充的十進位制數

01, 59

%-M

分鐘,為十進位制數

1, 59

%S

秒,為零填充的十進位制數

01, 59

%-S

秒,為十進位制數

1, 59

%c

區域設定的適當日期和時間表示

Mon Sep 30 07:06:05 2022

strptime()方法使用方法如下:

>>> from datetime import datetime
>>> dt="Thu February 3 2022 11:35:5"
>>> code="%a %B %d %Y %H:%M:%S"
>>> datetime.strptime(dt, code)
datetime.datetime(2022, 2, 3, 11, 35, 5)

現在可以使用write_datetime()方法將此datetime物件寫入工作表。

示例

在以下示例中,datetime物件以不同的格式寫入。

import xlsxwriter
from datetime import datetime
wb = xlsxwriter.Workbook('hello.xlsx')
worksheet = wb.add_worksheet()

dt="Thu February 3 2022 11:35:5"
code="%a %B %d %Y %H:%M:%S"
obj=datetime.strptime(dt, code)
date_formats = (
   'dd/mm/yy',
   'mm/dd/yy',
   'dd m yy',
   'd mm yy',
   'd mmm yy',
   'd mmmm yy',
   'd mmmm yyy',
   'd mmmm yyyy',
   'dd/mm/yy hh:mm',
   'dd/mm/yy hh:mm:ss',
   'dd/mm/yy hh:mm:ss.000',
   'hh:mm',
   'hh:mm:ss',
   'hh:mm:ss.000',
)
worksheet.write('A1', 'Formatted date')
worksheet.write('B1', 'Format')
row = 1

for fmt in date_formats:
   date_format = wb.add_format({'num_format': fmt, 'align': 'left'})
   worksheet.write_datetime(row, 0, obj, date_format)
   worksheet.write_string(row, 1, fmt)
   row += 1
wb.close()

輸出

使用Excel開啟時,工作表如下所示:

Datetime And Strptime
廣告