一些必要的前期工作
上市公司的年度报告在证交所网页下载pdf(厉害的同学可以尝试使用爬虫)
使用Acrobat Reader DC进行pdf格式转化(在Windows虚拟机环境下)
打开word(Ctrl+H查询命令定位“合并资产负债表”,Ctrl+Shift+Home选中删除前面部分,再次定位“母公司权益变动表”Ctrl+Shift+End选中后面部分Delete删除)
安装docx、openpyxl模块
运行代码
sudo pip3 install docx
sudo pip3 install openpyxl
## 代码粘贴如下
#不用管合并单元格问题
import docx as d
import openpyxl as o
beginyear=input('起始年份\n')
endyear=input('最后年份\n')
headname=input("公司简称\n")
tle=['合并资产负债表','母公司资产负债表','合并利润表','母公司利润表','合并现金流量表','母公司现金流量表','合并所有者权益变动表','母公司所有者权益变动表']
path=[]
for i in range(int(beginyear),int(endyear)+1,1):
tmp=headname+str(i) #文件名
path.append(tmp)
for p in path[:]:
pp='/home/huangzefang/Documents/'+p+'.docx' #文件路径
mywb = o.Workbook() #建立表格
i=-1 #sheet页码
doc=d.Document(pp)#读入文件
tabs=doc.tables#获取文件中的表格集
k=0 #行坐标
for tab in tabs[:]:
rows=tab.rows
for row in rows[:]: # 读每行
j=64 #ASCII码转化后表示Excel纵坐标
k+=1
cells=row.cells
for cell in cells[:]: # 读一行中的所有单元格
j+=1
c = cell.text
if c=='项目':
i+=1
mywb.create_sheet(index=i,title=tle[i])
mysheet = mywb.get_sheet_by_name(tle[i])
k=1 #重置行数
tmp=chr(j)+str(k)
mysheet[tmp] = c
pp='/home/huangzefang/Documents/'+p+'.xlsx'
mywb.save(pp)
同学需要着重修改的是文件路径
年度报告中的每张财务报表实际上是切分成多个表格的,A1处的项目作为表头标志。
运行结果如下图所示: