python记录-excel批量数据导出为word表格

本文介绍了一种使用Python批量将Excel数据导入Word文档的方法,并详细展示了如何设置文档样式、表格格式及内容对齐等细节。

根据文章 https://blog.csdn.net/weixin_46308408/article/details/104351792,自己捣鼓了一下,批量导入word,还是很不错的!

目前问题:调整表格中的字段对齐方式,不能自动居中(手动加空格可以) ,excel(字段名随便)及导出word表格示意图

 

from docx import Document   #功能是打开文档
from docx.enum.text import WD_ALIGN_PARAGRAPH  # 功能是对齐
from docx.shared import Pt #设置磅数
from docx.oxml.ns import qn  #负责中文格式  以上是每次使用word要使用的库
from docx.shared import Cm   #调整行高和列宽
import xlrd
#from docx.shared import Inches   #设置图片格式
import time  #需要导入时间
year =  time.strftime("%Y")
today = time.strftime("%Y{y}%m{m}%d{d}",time.localtime()).format(y='年',m='月',d='日')  #可以更具需求任意修改中间的内容,带式不能显示中文,通过formate可以实现显示中文

document = Document()   #初始化文档
document.styles['Normal'].font.name = u'仿宋'  #设置整个文档的字体
document.styles['Normal'].font.size = Pt(12)   #设置文档磅号
document.styles['Normal'].element.rPr.rFonts.set(qn('w:esatAsia'),u'仿宋')  #设置文档的基础中文字体,否则显示中文有问题

#document.add_picture('1.PNG',width=Inches(6))    #插入图片,设置图片尺寸

xlsx = xlrd.open_workbook('te.xlsx')
sheetname = xlsx.sheet_names()[0]
sheet_c = xlsx.sheet_by_index(0)

for i in range(1,sheet_c.nrows):
    date0 = sheet_c.row_values(i)

    P1 = document.add_paragraph()  #增加一个自然段
    P1.alignment = WD_ALIGN_PARAGRAPH.CENTER  #对其方式为居中,不设置默认左对齐

    run1 = P1.add_run('平台测试用例')    #增加自然段的内容
    run1.font.name = '仿宋'  #设置自然段的字体
    run1.element.rPr.rFonts.set(qn('w:eastAsia'),u'仿宋')  #为显示中文正确
    run1.font.size =Pt(20)  #设置中文字体磅数
    run1.font.bold = True    #设置加粗
    P1.space_after = Pt(5)  #段前的距离
    P1.space_before = Pt(5)  #段后的距离

    table = document.add_table(rows=16,cols=8,style='Table Grid')  #表示16行8列,style 使用word使用word自带格式
    table.run1 = table.cell(0,0).paragraphs[0].add_run('用例名称:')  #对于合并后的单元格,table(0,0),使用当中的任何一个单元格都可以
    table.run1.font.name = u'仿宋'
    table.run1.element.rPr.rFonts.set(qn('w:eastAisa'),u'仿宋')
    table.cell(0,0).paragraphs[0].aligment =WD_ALIGN_PARAGRAPH.CENTER   #设置表格内容居中
    table.cell(0,0).width = Cm(2)  #设置单元格列宽
    table.cell(0,1).width = Cm(2)
    table.cell(0,2).width = Cm(3)
    table.cell(0,3).width = Cm(3)
    table.cell(0,4).width = Cm(3)
    table.cell(0,5).width = Cm(3)
    table.cell(0,6).width = Cm(2)
    table.cell(0,7).width = Cm(1)
    table.cell(0,8).width = Cm(1)

    table.rows[0].height = Cm(1)   #设置行高
    table.rows[1].height = Cm(1)
    table.rows[2].height = Cm(1)
    table.rows[3].height = Cm(1)
    table.rows[4].height = Cm(1)
    table.rows[5].height = Cm(1)
    table.rows[6].height = Cm(1)
    table.rows[7].height = Cm(1)
    table.rows[8].height = Cm(1)
    table.rows[9].height = Cm(2)
    table.rows[10].height = Cm(2)
    table.rows[11].height = Cm(2)
    table.rows[12].height = Cm(2)
    table.rows[13].height = Cm(1)
    table.rows[14].height = Cm(1)
    table.rows[15].height = Cm(1)
    
    

    table.cell(0,0).merge(table.cell(0,1))  #对第0行进行合并
    table.cell(0,2).merge(table.cell(0,3))
    table.cell(0,4).merge(table.cell(0,5))
    table.cell(0,6).merge(table.cell(0,7))
    table.cell(1,0).merge(table.cell(1,1))  #对第1行进行合并
    table.cell(1,2).merge(table.cell(1,7)) 
    table.cell(2,0).merge(table.cell(2,1))  #对第2行进行合并
    table.cell(2,2).merge(table.cell(2,7)) 
    table.cell(3,0).merge(table.cell(3,1))
    table.cell(4,0).merge(table.cell(4,1))
    table.cell(5,0).merge(table.cell(5,1))
    table.cell(6,0).merge(table.cell(6,1))
    table.cell(3,0).merge(table.cell(6,0))  #对第一列进行合并
    table.cell(3,2).merge(table.cell(3,3)) 
    table.cell(3,4).merge(table.cell(3,7))
    table.cell(4,2).merge(table.cell(4,3))
    table.cell(4,4).merge(table.cell(4,7))
    table.cell(5,2).merge(table.cell(5,3))
    table.cell(5,4).merge(table.cell(5,7))
    table.cell(6,2).merge(table.cell(6,3))
    table.cell(6,4).merge(table.cell(6,7))
    table.cell(7,0).merge(table.cell(7,7))
    table.cell(8,1).merge(table.cell(8,2))
    table.cell(8,3).merge(table.cell(8,4))
    table.cell(8,5).merge(table.cell(8,6))
    table.cell(9,1).merge(table.cell(9,2))
    table.cell(9,3).merge(table.cell(9,4))
    table.cell(9,5).merge(table.cell(9,6))
    table.cell(10,1).merge(table.cell(10,2))
    table.cell(10,3).merge(table.cell(10,4))
    table.cell(10,5).merge(table.cell(10,6))
    table.cell(11,1).merge(table.cell(11,2))
    table.cell(11,3).merge(table.cell(11,4))
    table.cell(11,5).merge(table.cell(11,6))
    table.cell(12,0).merge(table.cell(12,1))  #对第12行进行合并
    table.cell(12,2).merge(table.cell(12,7))
    table.cell(13,0).merge(table.cell(13,1))  #对第12行进行合并
    table.cell(13,2).merge(table.cell(13,7))
    table.cell(14,0).merge(table.cell(14,1))  #对第12行进行合并
    table.cell(14,2).merge(table.cell(14,7))
    table.cell(15,0).merge(table.cell(15,2))  
    table.cell(15,4).merge(table.cell(15,5)) 
    table.cell(15,6).merge(table.cell(15,7)) 
    
    table.cell(0,0).text = '用例名称'
    table.cell(0,4).text = '用例标识'
    table.cell(1,0).text = '测试追踪'
    table.cell(1,2).text = '《**软件需求规格说明书》、《**软件设计报告》、《**系统测试大纲》'
    table.cell(2,0).text = '用例说明'
    table.cell(3,0).text = '用例初始化'
    table.cell(3,2).text = '硬件配置'
    table.cell(3,4).text = 'CPU内存硬盘'
    table.cell(4,2).text = '软件配置'
    table.cell(4,4).text = 'CentOS7.6系统、**数据库'
    table.cell(5,2).text = '测试配置'
    table.cell(5,4).text = '被测软件'
    table.cell(6,2).text = '参数配置'
    table.cell(6,4).text = '参数'
    table.cell(7,0).text = '测试过程'
    table.cell(8,0).text = '序号'
    table.cell(8,1).text = '输入及操作说明'
    table.cell(8,3).text = '期望测试结果'
    table.cell(8,5).text = '评估标准'
    table.cell(8,7).text = '备注'
    table.cell(12,0).text = '前提和约束'
    table.cell(13,0).text = '过程终止条件'
    table.cell(13,2).text = '测试取得预期结果或被测软件故障'
    table.cell(14,0).text = '结果评估标准'
    table.cell(13,2).text = '与期望结果一致'
    table.cell(15,0).text = '设计人员'
    table.cell(15,4).text = '设计日期'
    
    
    
    table.cell(0,3).text = date0[0]    #开始打印cecel表格中的内容
    table.cell(0,7).text = date0[1]
    table.cell(2,2).text = date0[2]
   # table.cell(9,0).text = date0[3]
    table.cell(15,6).text = date0[4]
    table.cell(14,2).text = date0[5]
    table.cell(15,3).text = date0[10]
    
    
    document.add_page_break()  #作用是插入分页符

document.save('%s用例.docx'%today)

 

<think>我们使用pythonexcel数据导入到word表格中,需要两个库: - `openpyxl` 用于读取Excel文件 - `python-docx` 用于操作Word文件 步骤: 1. 读取Excel文件,获取数据。 2. 打开Word文档,定位到表格(假设只有一个表格,或者指定表格)。 3. 将Excel中的数据逐行逐列填充到Word表格的对应单元格中。 注意:需要确保Excel中的数据行数和列数不超过Word表格的容量,否则需要扩展表格或者处理异常。 安装必要的库(如果未安装): ``` pip install openpyxl python-docx ``` 示例代码: 假设我们有一个Excel文件`data.xlsx`,其中第一个工作表有数据;一个Word文档`template.docx`,里面有一个表格,我们想将Excel数据填充到这个表格中。 代码步骤: 1. 加载Excel工作簿,获取活动工作表。 2. 加载Word文档,获取第一个表格(索引0)。 3. 遍历Excel中的行和列,将每个单元格的值写入Word表格的对应单元格。 注意:Word表格的行和列索引从0开始,与Excel相同。 但是,如果Excel数据有标题行,我们可能需要跳过?这取决于需求。这里假设Excel数据从第一行开始,且需要全部导入。 代码示例:</think>### Python脚本:将Excel数据导入Word表格 以下是使用Python自动将Excel数据填充到Word表格的完整解决方案: #### 所需库 ```python import openpyxl # 读取Excel文件 from docx import Document # 操作Word文档 from docx.shared import Pt # 设置字体大小 ``` #### 完整脚本 ```python def excel_to_word_table(excel_path, word_path, output_path): # 读取Excel数据 wb = openpyxl.load_workbook(excel_path) sheet = wb.active # 获取Excel数据 excel_data = [] for row in sheet.iter_rows(values_only=True): excel_data.append(list(row)) # 打开Word文档 doc = Document(word_path) # 定位第一个表格(根据需求可调整索引) table = doc.tables[0] # 使用doc.tables[n]选择第n个表格 # 填充数据Word表格 for i, row_data in enumerate(excel_data): # 跳过表头(可选) if i == 0: continue # 添加新行(如果表格行数不足) if i > len(table.rows) - 1: table.add_row() # 填充单元格数据 for j, cell_value in enumerate(row_data): # 确保列不越界 if j < len(table.columns): cell = table.cell(i, j) cell.text = str(cell_value) if cell_value is not None else "" # 设置字体格式(可选) for paragraph in cell.paragraphs: for run in paragraph.runs: run.font.size = Pt(10) # 10号字体 # 保存结果 doc.save(output_path) print(f"数据已成功导出到: {output_path}") # 使用示例 if __name__ == "__main__": excel_to_word_table( excel_path="input_data.xlsx", # Excel文件路径 word_path="template.docx", # Word模板路径 output_path="output_report.docx" # 输出文件路径 ) ``` #### 关键步骤说明 1. **Excel数据读取**: - 使用`openpyxl`读取Excel文件内容 - 获取所有行数据存入二维列表 2. **Word表格操作**: - 使用`python-docx`打开模板文档 - 通过`doc.tables[0]`访问第一个表格(可调整索引) - 动态添加行保证表格容量:`table.add_row()` 3. **数据填充**: - 双重循环遍历行列坐标 - 使用`table.cell(row, col).text`赋值 - 可选格式设置(字体、大小等) 4. **异常处理**: - 自动跳过`None`值防止报错 - 列越界检查确保兼容性 #### 使用前准备 1. 安装依赖库: ```bash pip install openpyxl python-docx ``` 2. 文件要求: - Excel文件:`.xlsx`格式 - Word模板:预先创建好表格结构 #### 典型应用场景 1. 自动化报告生成(销售数据→周报) 2. 批量填写表格(员工信息→人事档案) 3. 数据可视化转换(实验数据→科研报告) 4. 系统集成(ERP导出→合同模板) #### 注意事项 1. 表格位置: - 默认操作文档中**第一个表格** - 修改`doc.tables[0]`索引操作其他表格 2. 格式保留: - 脚本会保留模板中的表格样式 - 新增行继承上一行格式 3. 性能优化: - 处理大型数据集时建议分批操作 - 万行级数据需添加进度提示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值