python实现excel到word转换

docx库用于python对word中.docx文件的操作,在网上搜了很多资料,发现对docx库介绍的比较少,对于表格样式后期需要进一步研究优化。本篇文章主要介绍python在word中怎样画表格,效果图如下:图一到图二的转换。

图一:

 图二:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@文件    :ExcelToWord.py
@说明    :python实现excel到word.
@时间    :2020/10/14 17:00:45
@作者    :侃侃
@版本    :3.8
'''
import pandas as pd
import numpy as np
from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH #设置水平居中对齐需要用到的库
from docx.enum.table import WD_ALIGN_VERTICAL #设置垂直居中对齐需要用到的库
from docx.shared import Inches,Cm,Pt

#读取excel数据,并将第一行数据作为列名
filepath="C:\\Users\\lenovo\\Desktop\\教学计划excel转word\\0.xlsx"
db=pd.read_excel(filepath,dtype=str,header=0)
doc=Document()#创建一个Document对象
#设置标题
black_font = u'黑体'
run = doc.add_heading('', level=1).add_run('学号:姓名:专业:层次:')
run.font.name = black_font
#画表格
rows=db.shape[0]#获取行数,后面生成序号使用
table=doc.add_table(rows=rows+1,cols=6,style='Table Grid')#添加表格

#设置表格标题
titles=["学年","学期","序号","考试科目","类型","成绩"]#标题内容
title_cells = table.rows[0].cells
for i in range(len(titles)):
    title_cells[i].text = titles[i]
#设置列宽,必须将列所有单元格均设置才生效
for row in range(0,rows+1):
    table.cell(row,2).width=Cm(1.4)
    table.cell(row,3).width=Cm(4.35)
    table.cell(row,4).width=Cm(1.92)

term=db["建议学期"]#获取建议学期
num=np.arange(1,rows+1,1)#生成序号数组
seq=[str(x) for x in num]#将序号数组int类型元素,全部转换为字符串型,int型元素遍历时报错。
subjects=db["课程名称"]#获取考试科目
mode=db["考核方式"]#获取考核方式

for row in range(1,rows+1):
    #填入建议学期
    table.cell(row,1).text=term[row-1]
    #填入序号
    table.cell(row,2).text=seq[row-1]
    #填入考试科目
    table.cell(row,3).text=subjects[row-1]
    #填入考核方式
    table.cell(row,4).text=mode[row-1]

#合并相同学期
#动态声明学期变量list
# 第一步 准备locals函数,存放10个学期list
terms_list = locals()
""" 
第二步 循环10次,从0-9赋值给locals函数对应的变量terms_list 
      terms_list是一个字典,所以将我们需要的列表名称作为key值传入
"""
for i in range(10):
    terms_list['term_' + str(i)] = []

#将相同学期的行号,填入到对应学期
for row in range(1,rows+1):
    if table.cell(row,1).text==str(1):
        terms_list['term_0'].append(row)
    elif table.cell(row,1).text==str(2):
        terms_list['term_1'].append(row)
    elif table.cell(row,1).text==str(3):
        terms_list['term_2'].append(row)
    elif table.cell(row,1).text==str(4):
        terms_list['term_3'].append(row)
    elif table.cell(row,1).text==str(5):
        terms_list['term_4'].append(row)
    elif table.cell(row,1).text==str(6):
        terms_list['term_5'].append(row)
    elif table.cell(row,1).text==str(7):
        terms_list['term_6'].append(row)
    elif table.cell(row,1).text==str(8):
        terms_list['term_7'].append(row)
    elif table.cell(row,1).text==str(9):
        terms_list['term_8'].append(row)
    elif table.cell(row,1).text==str(10):
        terms_list['term_9'].append(row)
#合并相同学期单元格,并赋值
for i in range(10):
    table.cell(terms_list['term_'+str(i)][0], 1).merge(table.cell(terms_list['term_'+str(i)][-1],1))
    table.cell(terms_list['term_'+str(i)][0], 1).text="第"+str(i+1)+"学期"
#合并学年,两学期为一学年,并赋值
for i in range(0,10,2):
    table.cell(terms_list['term_'+str(i)][0], 0).merge(table.cell(terms_list['term_'+str(i+1)][-1],0))
    table.cell(terms_list['term_'+str(i)][0], 0).text="第"+str(int((i+2)/2))+"学年"

#各单元格水平和垂直方向都要居中对齐
for row in range(0,len(table.rows)):
    for col in range(len(table.columns)):
        table.cell(row,col).paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
        table.cell(row,col).vertical_alignment = WD_ALIGN_VERTICAL.CENTER
#保存文件
doc.save("C:\\Users\\lenovo\\Desktop\\教学计划excel转word\\1.docx")

 

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值