初学python 最近因为工作需要大量导入图片至word,学习了大佬们的代码后自己写了段
我的表格第一行默认标题,所以均从第二行开始读取
初学者,代码格式比较乱
表格的形式
import docx
from docx import Document
from docx.shared import Cm
from docx.oxml.ns import qn
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Pt, RGBColor
from docx.shared import Pt
import xlrd
path = 'E:/Python项目/项目测试/'
pathP = 'E:/Python项目/项目测试/图片/' # 文件路径,主要是方便后面懒得写
xlsx = xlrd.open_workbook(path + "01.xls") # 打开工作表
# xlsx.sheet_by_name('表名')#根据表的名称来读取工作表
# i=sheet.cell_value(1,4)
j = 1
t = int(input("请输入图片设置宽度,(为防止图片变形仅支持设置宽度单位cm):\n"))
xlsx = xlrd.open_workbook(path + "01.xls") # 打开工作表
sheet = xlsx.sheet_by_index(0) # 根据表的序号来读取工作表 0开始
i = sheet.nrows # 获取表格最大行数 设定i为循环次数
nCols = sheet.ncols # 获取表格最大列数
print('该表格的最大行数为', i, '默认执行次数为', i - 1, '次')
while i > 1: # 循环i次,因我设置表格数据为第2行读取,循环次数比最大行数小1
k = 2 #这里因为我是从第3列开始插入图片
name = str(sheet.cell_value(j, 0)) # 获取j行,0+1列的数据
number = int(sheet.cell_value(j, 1)) # 这里因为我是用该单元格数据命名,且表格数据获取后带小数点 转换成int型
i -= 1
doc = Document() # 新建一个word文档
doc.styles['Normal'].font.name = u'Times New Roman' # 全局设置 英文字体
doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '楷体') # 全局设置中文字体
DL1 = doc.add_paragraph()
p1 = DL1.add_run("我是标题" + str(number))
p1.font.size = Pt(22)
p1.font.name = 'Times New Roman' # 控制是西文时的字体
p1.element.rPr.rFonts.set(qn('w:eastAsia'), '方正小标宋简体') # p1为段落一 字体设置为
DL1.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 设置文档中的第1个段落居中
while k < nCols:
# 如果k小于最大列数并且循环执行
tx1: str = sheet.cell_value(j, k) # 获取j行k列该单元格数据
if tx1 == '': # 如果获取到的单元格数据为空跳出循环
break
doc.add_picture(pathP + tx1 + ".jpg", width=Cm(t)) # 插入图片1
doc.add_paragraph(" \n我是图片"+str(k - 1)+"号")
k += 1
j += 1
dl = doc.paragraphs # 获取所有段落
dlnum: int = len(dl) - 1 # 获取段落数量
# 格式设置
while dlnum > 0: # 循环遍历段落,并且居中,除第一段其余段落设置字体
doc.paragraphs[dlnum].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 循环对段落居中
ddc = doc.paragraphs[dlnum]
runs = ddc.runs[0] # 获取文字块
runs.font.size = Pt(14) # 更改获取的文字块字体为14号
runs.font.color.rgb = RGBColor(0, 0, 0) # 更改颜色为黑色
dlnum -= 1
doc.save(path + "输出/" + str(number) + ".docx") # 保存至指定路径
print("第" + str(j) + "行数据导入成功")
excel数据的获取注意事项,
excel的列长是表格中最长的一列的长,行数是最多的行。就想一个矩形,在该范围内的,即使是空单元格也是空字符串进行填充。
但是如果超出最长列或者行,获取数据就会报错!!
excel表格的列跟行均是从0开始起算
生成的第一文件
生成的最后一个文件