股东分析报表程序思路
(PS. 因为数据是要保密的,所以就不截图全部了)
目录内容
这是统计的所有维度(禁止外传的水印原本文件中是没有的,也是我自己加的)
公司投资原本是用两份需要对比的股东数据excel通过一个软件生成一份股东分析报表,不过因为这个软件是付费的,公司不想花这钱,就让我写这个分析程序
两份需要对比的股东数据excel文件我看格式也应该是某个软件生成的,并不是投资部的人手动统计出来的,是两份带格式的.xls文件
生成软件长啥样没给我看,只给我看了生成后的文件样子,乍一看像是word文件,因为双击后是office打开的(一般人电脑不会显示文件后缀,所以当时我也以为是word文件了),里面居然还带统计图表图片,当时我就觉得这玩意儿写起来有点难度啊,后来拿到文件以后发现居然是个.xml文件
思路:
我试了一般xml文件并不能用office打开,因该是要符合office标准的,我没查到需要添加什么标签对内容才能符合office标准,所以我放弃了,但是xml文件给我提供了思路,我想到了一个简单的办法就是模版
第一步:将.xls文件转为.xlsx文件
因为使用openpyxl顺手,但是openpyxl不支持.xls所以第一步先转换
# 将xlx转为xlsx
def open_xls_as_xlsx(xls_path, xlsx_path):
"""
将 Excel中 xls 样式改为 xlsx
:param xls_path: xls文件路径
:param xlsx_path: xlsx文件保存路径
:return:
"""
# first open using xlrd
book = xlrd.open_workbook(xls_path)
index = 0
nrows, ncols = 0, 0
sheet = book.sheet_by_index(0)
while nrows * ncols == 0:
sheet = book.sheet_by_index(index)
nrows = sheet.nrows
ncols = sheet.ncols
index += 1
# prepare a xlsx sheet
book_new = Workbook()
sheet_new = book_new.create_sheet("sheet1", 0)
for row in range(0, nrows):
for col in range(0, ncols):
sheet_new.cell(row=row+1, column=col+1).value = sheet.cell_value(row, col)
book_new.save(xlsx_path)
(PS. 网上找的代码)
第二步:将符合office标准的.xml文件后缀改为.docx,然后将.docx转为.html
因为我发现用pydocx可以做到word和html互转,灵机一动想到了改后缀转为html文件,结果居然成了(可以节约很多写前端代码的时间,美滋滋)
from pydocx import PyDocX
html = PyDocX.to_html("ccc.docx")
f = open("test.html", 'w', encoding="utf-8")
f.write(html)
f.close()
第三步:设计数据结构修改模版
其实这里就是数据结构配合jinja模版,用来改jinja模版
from jinja2 import Template
def main():
http_template = open('test.html', encoding='utf8').read()
template = Template(http_template)
# 数据结构
datas = {}
ret = template.render(datas)
open(f'BaiDu.html', 'w', encoding='utf8').write(ret)
if __name__ == '__main__':
main()
第四步:根据数据结构写统计逻辑
这就是写代码了,获取excel数据然后开始各种的数据分析,放进一个一个数据结构中扔给jinja模板里,这里还有一个问题,就是内部股东,内部股东是一个名单,我的做法是写一个json文件里面放着内部股东名字,以后要增加减少直接改json文件就可以了,这里还有一个问题,就是打包前和打包后json文件路径问题
# 打包后放exe目录下
json_path = os.path.dirname(os.path.realpath(sys.executable))+os.sep + "neibugudong.json"
# 没打抱前放在当前目录下
json_path = os.getcwd()+os.sep+"neibugudong.json"
第五步:模板样式和echarts图表数据
pydocx转的html文件样式其实是有问题的,还有一部分样式是没有的,这些都需要自己手动修改,图表数据直接用echarts显示
第六步:打包exe
直接Pyinstaller打包,然后把模版文件和json文件放到exe同级目录下
将对比文件拖进去按回车,然后生成报表(四天时间写这么多数据分析逻辑没心思用Qt写GUI界面了,直接命令行用用吧)