搜索

用python实现excel数据生成word三线表

时间:2023-06-13作者:安远点击:

一位医学院同学的研究中需要统计整理格式为excel的大量数据,并转换为word的三线表,遂委托我设计一个程序来处理此问题。程序的主要内容:

1.读取excel的数据

2.计算数据

3.读取word三线表模板

4.将计算后的数据按照模板格式填入三线表

5.保存新word

最后实现excel的数据转化成三线表表格的效果。

首先要决定采用的库,python操作excel主要使用xlrdxlwt两个库,其中xlrd是读取excelxlwt是写入excel[1],在本方案中只需要读取excel,所以只需要引用xlrd

1. import 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] Pythonword文档模板套用, 2022. https://www.shuzhiduo.com/A/8Bz8qr1kJx/.