python利用docxtpl将excel数据写入word表格

文章讲述了如何使用python-docx和xlrd库将Excel数据填充到Word表格中,并解决读取整数变为浮点数的问题。通过docxtpl模板引擎动态生成表格,利用xlrd检查单元格数据类型,确保整数不被转换。解决方案包括检查cell.ctype属性,将数值类型的单元格转换为整数。
摘要由CSDN通过智能技术生成

解决问题一:将excel数据读取,并将其保存在word中的表格

解决问题二:使用xlrd读入excel数据,如果是整数的话,打开word后发现保存变成了浮点数,后边多了“.0”。

问题一、

可以参考docxtpl快速上手使用,数据填入以及循环写入表格_sxuccs的博客-CSDN博客

docxtpl/python-docx_雪球干死黄旭东的博客-CSDN博客

 首先在word里边编写模板,大概这个样子: 

 填充数据的地方最少要写三行:

一行是

{%tr for item in list%}

中间是你要填充的数据,都写成这种形式就好(把xxx替换掉):

{{item.xxx}}

最后一行写end

{%tr endfor%}

这样有多少数据就会自动填充多少行啦。

将excel数据导入word我是这么写的:

##前边首先打开读取excel,这部分没写
list1 = []
for i in range(nrows):
    name = sheet.cell_values(i,1)
    num =  sheet.cell_values(i,2)
    dic = {'name':name,'num':num}
    list1.append(dic)
context = {"list" : list1}
doc.render(context)
doc.save("1.docx")

问题二:

我的数据格式是姓名;数字

例如  张三;125

在开始处理的时候我将excel数据进行了分列,一列姓名一列数字,但是运行完之后打开word却发现里边的数据变成了这样:

张三125.0

原来的整数变成了浮点数。于是我尝试将excel数据设置成了“文本”,再次运行代码后发现没有用

于是我不再将数据分列处理,直接将代码写成了这样:

value = sheet.cell_values(i,1)
name  = value.split(";",1)[0]
num   = value.split(";",1)[1]

这样就搞定了。后来我继续查阅了一些资料

参考在Python中使用xlrd读取数字Excel数据作为文本 - 行业资讯 - 电子产品设计开发与电子技术学习交流!

 他这个排版有点乱,意思是这样的:

cell = sheet.cell(r,c) 
cell_value = cell.value 
if cell.ctype in (2,3) and int(cell_value) == cell_value: 
    cell_value = int(cell_value)

其实挺好理解的,但是这个2,3我没有看懂,继续查了资料原来是这个意思:

参考Python操作 Excel_sheet.cell_超级代码的博客-CSDN博客

​cell.value:这个单元格中的值

cell.ctype:这个单元格的数据类型

print(sheet.cell(0,1).ctype)  # 1   姓名    文本
print(sheet.cell(2,2).ctype)  # 2  100    数字 

Cell数据类型

  1. xlrd.XL_CELL_TEXT 文本类型
  2. xlrd.XL_CELL_NUMBER 数值类型
  3. xlrd.XL_CELL_DATE 日期类型
  4. xlrd.XL_CELL_BOOLEAN 布尔类型
  5. xlrd.XL_CELL_BLANK 空白类型

 所以23就代表数据类型是数值或者日期

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值