办公提效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')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章