辦公提效MAX:在Word和Excel之間輕鬆遊走的表格!

項目要求

有一份統計了某地區教師信息的 Word 文件,其中內容的一部分如下圖所示:
在這裏插入圖片描述
一共有近千條類似格式的表格細欄,每個欄目包括的信息有:

  • 序號
  • 教師姓名
  • 出生日期
  • 身體狀況
  • 任教經歷

我們的任務是將這些內容提取到 Excel 表格中存儲,表格樣式如下:
在這裏插入圖片描述
也就是需要將 Word 中的內容填到指定位置,同時需要將時間修改爲標準格式,這類格式規整的文件整理非常適合用Python來執行。

實現步驟

  • Step1:用 docx 庫打開 Word 文件;
  • Step2:用 openpyxl 庫建立一個新的 Excel 文件;
  • Step3:提取 Word 文件中的內容(用 datetime 庫改變日期格式);
  • Step4:將提取到的內容存儲到 Excel 文件。

代碼實現

1、導入需要的庫

from docx import Document
import datetime
from openpyxl import Workbook

2、創建 Excel 文件

這裏我們使用 openpyxl 庫中的 Workbook 類來創建一個新的 Excel 文件,並先將表頭寫入這個文件中。

wb = Workbook()
sheet = wb.active
header = ['序號', '姓名', '出生日期', '身體狀況', '任教經歷']
sheet.append(header)

3、打開 Word 文件

這裏我們使用 docx 庫中的 Document 類來打開需要提取內容的 Word 文件,並在裏面找到表格。

path = 'Teacher list.docx'
document = Document(path)
tables = document.tables

其中,tables 是一個含有所有表格的列表。(因爲我們這裏就一張表格,所以 len(tables) 就是 1 了)

4、遍歷並提取表格內容

在這裏我們可以使用 try except 語句來捕獲異常。

n = 0
for j in range(len(tables)):
    for i in range(0, len(tables[j].rows)+1, 2):
        try:
            # 姓名
            name = tables[j].cell(i, 1).text
            # 日期
            date = tables[j].cell(i, 2).text
            if '/' in date:
                date = datetime.datetime.strptime(date, '%d/%m/%Y').strftime('%Y-%m-%d')
            else:
                date = '-'
            # 身體狀況
            body = tables[j].cell(i, 3).text
            # 任教經歷
            work = tables[j].cell(i + 1, 1).text.strip()
            n += 1
            print(n, name, date, body, work)
            row = [n, name, date, body, work]
            sheet.append(row)
        except Exception as error:
            # 捕獲異常,也可以用log寫到日誌裏方便查看和管理
            print(error)
            continue

因爲一個老師的信息佔 Word 中表格的兩行,但是在 Excel 中只佔一行,所以對一個表格 tables[j] 來說,每遍歷兩行才切換到 Excel 的下一行(由變量 n 控制)。

此處代碼中用到了 datetime 庫中的函數來改變日期形式,將日/月/年轉換成年-月-日。

5、存儲內容到 Excel 中

wb.save(r'Teacher list.xlsx')

完整代碼

from docx import Document
import datetime
from openpyxl import Workbook

wb = Workbook()
sheet = wb.active
header = ['序號', '姓名', '出生日期', '身體狀況', '任教經歷']
sheet.append(header)

path = 'Teacher list.docx'
document = Document(path)
tables = document.tables

n = 0
for j in range(len(tables)):
    for i in range(0, len(tables[j].rows)+1, 2):
        try:
            # 姓名
            name = tables[j].cell(i, 1).text
            # 日期
            date = tables[j].cell(i, 2).text
            if '/' in date:
                date = datetime.datetime.strptime(date, '%d/%m/%Y').strftime('%Y-%m-%d')
            else:
                date = '-'
            # 身體狀況
            body = tables[j].cell(i, 3).text
            # 任教經歷
            work = tables[j].cell(i + 1, 1).text.strip()
            n += 1
            print(n, name, date, body, work)
            row = [n, name, date, body, work]
            sheet.append(row)
        except Exception as error:
            # 捕獲異常,也可以用log寫到日誌裏方便查看和管理
            print(error)
            continue
            
wb.save(r'Teacher list.xlsx')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章