一位医学院同学的研究中需要统计整理格式为excel的大量数据,并转换为word的三线表,遂委托我设计一个程序来处理此问题。程序的主要内容:
1.读取excel的数据
2.计算数据
3.读取word三线表模板
4.将计算后的数据按照模板格式填入三线表
5.保存新word
最后实现excel的数据转化成三线表表格的效果。
首先要决定采用的库,python操作excel主要使用xlrd和xlwt两个库,其中xlrd是读取excel,xlwt是写入excel[1],在本方案中只需要读取excel,所以只需要引用xlrd。
可以使用tkinter打开窗口化的页面选择文件[2]。
1. import tkinter as tk
2. from tkinter import filedialog
读取word,套用模板和保存采用docx库[3]。
1. from docx import Document
2. from docx.shared import Pt
打开对话框,读取excel文件名,准备要保存的word文件名。
1. root=tk.Tk()
2. root.withdraw()
3. filename=filedialog.askopenfilename()
4. if '/' in filename :
5. filename.replace('/', '\\')
6. print('Find')
7.
8. if len(filename) == 0 :
9. print('未找到文件夹!')
10. else :
11. print('File:',filename)
12.
13. NewHead = '-Work'
14. str_list=list(filename)
15. str_list.insert(len(str_list)-5,NewHead)
16. NewFileName=''.join(str_list)
17. NewFileName=NewFileName.replace('.xlsx','.docx')
读取计算excel数据。
1. data=xlrd.open_workbook(filename)
2. table=data.sheets()[0]
3.
4. movedatalst=[]
5.
6. for i in range(4):
7. for j in range(8):
8. movedatalst.append(float(table.cell_value(j*11+2,2+9*i))*100-100)
9. movedatalst.append(float(table.cell_value(j*11+2,3+9*i))*100-100)
10. movedatalst.append(float(table.cell_value(j*11+2,4+9*i))*100-100)
11. for k in range(5):
12. movedatalst.append(float(table.cell_value(j*11+k+8,2+9*i))*100-100)
13. movedatalst.append(float(table.cell_value(j*11+k+8,3+9*i))*100-100)
14. movedatalst.append(float(table.cell_value(j*11+k+8,4+9*i))*100-100)
读取同一文件夹下的word模板,然后设置字体格式。
1. document=Document('模板.docx')
2. document.styles['Normal'].font.name='Times New Roman'
3. document.styles['Normal'].font.size=Pt(10)
在表格对应位置填入数据。
1. for i in range(8):
2. tables[0].rows[6*i+2].cells[1].text='0'
3. tables[0].rows[6*i+3].cells[1].text='01'
4. tables[0].rows[6*i+4].cells[1].text='02'
5. tables[0].rows[6*i+5].cells[1].text='03'
6. tables[0].rows[6*i+6].cells[1].text='04'
7. tables[0].rows[6*i+7].cells[1].text='05'
8.
9. tempgroup=[2,3,0,1]
10. line2=[2,3,5,6]
11. ras=[0,1,7,2,3,4,5,6]
12. for i in range(4):
13. for j in range(8):
14. for k in range(6):
15. tables[0].rows[6*j+k+2].cells[line2[i]].text=str(movedatalst[tempgroup[i]*144+ras[j]*18+k*3])+' ('+str(movedatalst[tempgroup[i]*144+ras[j]*18+k*3+1])+', '+str(movedatalst[tempgroup[i]*144+ras[j]*18+k*3+2])+')'
保存文件。
1. document.save(NewFileName)
自此,可以实现excel数据处理并转化为三线表的功能。
参考文献
[1] 全网最全python操作excel教程, 2022. https://blog.csdn.net/weixin_43820813/article/details/124467183?ydreferer=aHR0cHM6Ly93d3cuYmFpZHUuY29tL2xpbms%2FdXJsPXZ0UERhWmJwNXk1dHhFdElVc1JOYkFsTEdiR203T21BSG9hdTdfSlo0cFVoeVVOMTRTdnhXdlJvOXNOZmRGRHV3MV94ZFpzbkJvb1pqREF0OGFCaF9Pc2xHcVFxTlBoSjZrUmliMGRJeXlXJndkPSZlcWlkPTljMjRkODNmMDAwMGY2MTAwMDAwMDAwNTY0M2U5NDg1.
[2] Python 实现用对话框选择文件夹或文件, 2022. https://blog.csdn.net/any1where/article/details/128276355.
[3] Python之word文档模板套用, 2022. https://www.shuzhiduo.com/A/8Bz8qr1kJx/.