用python复制word中的表格到excel?

在数据调研工作中,客户有时候反馈的数据表会通过word的形式提供,有时候国家标准也会以word文件形式来表示。但是为了方便我们对数据表进行分析,或者方便我们的ETL工具进行导入,我们最好要把这些表格都复制到excel中。如果表的数量不多,手动即可,但是如果有成百上千张表,手动操作就显得费事费力了,而且格式可能还会有问题。于是乎,人生苦短,我会Python。也顺便帮助小伙伴提高一下工作效率。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#author: jiangs0716
#version: V1.0

#usage:
#该脚本的作用是把word文件中的表格按照原格式复制到excel中。
#自定义功能1:指定要复制的表格范围,比如复制第2到第9张表
#自定义功能2:指定所有表格拷贝到单一sheet中,还是每张表对应一个sheet

#1.安装python3和pip3 (python2.7下测试也可以,安装依赖包用pip)
#https://www.python.org/downloads/
#2.安装如下依赖包
#pip3 install python-docx
#pip3 install openpyxl
#3.将待转换文件和脚本放在同一目录下
#Eg. python3 doc2xls.py -f test.docx -b 2 -e 9 -m
#4.参数说明
#-f --file 被转换的文件名
#-b --begin 第一张被复制的表,word文件中第一张表从0开始
#-e --end 最后一张被复制的表
#-m --multi 有则word中每张表对应xls文件的一个sheet,否则所有表被拷贝到一个sheet

from docx import Document
from openpyxl import Workbook

import sys
import getopt

def doc2xls(fn, begin, end, multi):
if (fn == ""):
print("please input filename")
sys.exit()

doc = Document(fn)
wb = Workbook()
wb.remove(wb.worksheets[0])
ws = None
docTables = doc.tables[int(begin):int(end)+1]
print(len(docTables))

if (multi == True):
print("multi is True")
for index,table in enumerate(docTables, start=0):
ws = wb.create_sheet("%s_%d " %(fn.split(".")[0], index))
doCopy(table, ws)
else:
print("multi is False")
ws = wb.create_sheet(fn.split(".")[0])
for table in docTables:
doCopy(table, ws)

wb.save("%s.xlsx" %(fn.split(".")[0]))

def doCopy(table, ws):
for row in table.rows:
values = list(map(lambda cell:cell.text, row.cells))
ws.append(values)



if __name__ == "__main__":

file = ""
begin = 0
end = 0
multi = False

print("welcome to use doc2xls")
try:
options,args = getopt.getopt(sys.argv[1:],"hf:b:e:m", ["help","file=","begin=","end=","multi"])
except getopt.GetoptError:
sys.exit()
for name,value in options:
if name in ("-h","--help"):
print("contact jiangs.0716")
print("-f --file doc or docx file to be processed.")
print("-b --begin first table to be copied.")
print("-e --end last table to be copied.")
print("-m --multi if set, each table will be copied to each sheet.")
print("Eg. python3 doc2xls.py -f test.docx -b 2 -e 9 -m")
if name in ("-f","--file"):
print("File name is %s" %(value))
file = value
if name in ("-b","--begin"):
print("From No.%s Table" %(value))
begin = value
if name in ("-e","--end"):
print("To No.%s Table" %(value))
end = value
if name in ("-m","--multi"):
print("Each table will be copied to each sheet.")
multi = True


doc2xls(file, begin, end, multi)
0%