解决问题一:将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数据类型
xlrd.XL_CELL_TEXT
文本类型xlrd.XL_CELL_NUMBER
数值类型xlrd.XL_CELL_DATE
日期类型xlrd.XL_CELL_BOOLEAN
布尔类型xlrd.XL_CELL_BLANK
空白类型
所以23就代表数据类型是数值或者日期