股东分析报表程序思路
(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 xlrdbook = xlrd.open_workbook(xls_path)index = 0nrows, ncols = 0, 0sheet = book.sheet_by_index(0)while nrows * ncols == 0:sheet = book.sheet_by_index(index)nrows = sheet.nrowsncols = sheet.ncolsindex += 1# prepare a xlsx sheetbook_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 Templatedef 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()
第四步:根据数据结构写统计逻辑
这就是写代码了,光python代码四天写了我两千五百多行,这里还有一个问题,就是内部股东,内部股东是一个名单,我的做法是写一个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界面了,直接命令行用用吧)