簡體   English   中英

使用標題更改數字格式 - openpyxl

[英]Change number format using headers - openpyxl

我有一個 Excel 文件,我想在其中將數字格式從“常規”轉換為“日期”。 當提到專欄字母時,我知道如何為一專欄這樣做:

workbook = openpyxl.load_workbook('path\filename.xlsx')
worksheet = workbook['Sheet1']

for row in range(2, worksheet.max_row+1):
    ws["{}{}".format(ColNames['Report_date'], row)].number_format='yyyy-mm-dd;@'

如您所見,我現在使用列字母“D”來指出我想要以不同方式設置格式的列。 現在,我想使用名為“Start_Date”的第 1 行中的 header 來引用此列。 我嘗試了以下帖子中的一種方法來實現此目的: select a column by its name - openpyxl 但是,這導致了 KeyError:“Start_Date”:

# Create a dictionary of column names
ColNames = {}
Current = 0
for COL in worksheet.iter_cols(1, worksheet.max_column):
    ColNames[COL[0].value] = Current
    Current += 1

for row in range(2, worksheet.max_row+1):
    ws["{}{}".format(ColNames['Start_Date'], row)].number_format='yyyy-mm-dd;@'

編輯此方法導致以下錯誤:

AttributeError: 'tuple' object has no attribute 'number_format'

此外,我還有更多列需要更改數字格式。 我有一個包含這些列名稱的列表:

DateColumns = ['Start_Date', 'End_Date', 'Birthday']

有沒有一種方法可以使用列表 DateColumns 以便我可以保存一些代碼行?

提前致謝。

請注意,我之前發布了一個類似的問題。 以下帖子被稱為答案Python:Simulating CSV.DictReader with OpenPyXL 但是,我看不出如何根據我的需要調整該帖子中的答案。

您需要知道您想要更改哪些列的數字格式,您可以方便地將其放入列表中,所以為什么不直接使用該列表。
獲取工作表中的標題,檢查 Header 是否在 DateColumns 列表中,如果是,則使用您想要的日期格式將該列中的所有條目從第 2 行更新到最大值...

...
DateColumns = ['Start_Date', 'End_Date', 'Birthday']

for COL in worksheet.iter_cols(min_row=1,max_row=1):
    header = COL[0]
    if header.value in DateColumns:
        for row in range(2, worksheet.max_row+1):
            worksheet.cell(row, COL[0].column).number_format='yyyy-mm-dd;@'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM