代码如下,我需要将 第一份文件中的“品名” 和 “j” 放到excel的A1、B1单元格,然后第二份文件中的“品名” 和 “j” 放到A2,B2单元格,以此类推,然而现在每行只会重复第一个文件的“品名” 和 “j” 。
用到的库:openpyxl、docx
python版本:3.8
import docx
import os
import openpyxl as vb
from docx import *
P = 0
for 文件夹路径, 子文件夹路径, 文件列表 in os.walk('这里填入文件夹地址'):
for i in 文件列表:
# print(文件夹路径 + "/" + i)
h = (文件夹路径 + "/" + i)
P += 1 #这一段之前是为了拿到每个文件的路径,然后依次打开
document = Document(h) # 打开每个文件
y = len(document.paragraphs) # 查询每个文件有几个段落
print('总段落为:' + str(y))
for o in range(30, y): # 从第十行开始直到最后一行找出 含有“正式文件” 和 “审批意见”中间的段落数
T = document.paragraphs[o].text
if "正式文件" in T:
# print(T)
a = o
print('正式文件在第:' + str(a) + '段')
a = a + 1
if "审批意见" in T:
b = o
print('审批意见在第:' + str(b) + '段')
table1 = document.tables[0]
品名 = table1.cell(0, 1).text
print(品名) #拿到每个文件的品名
j = []
for g in range(a, b):
k = document.paragraphs[g].text #拿到 “正式文件” 和 “审批意见”中间的段落
j.append(k) #内容较多,将j添加到list
print(j)
# 打开excel ,就是下面这块出现了问题
# 无法将每个文件的内容依次填入每行的第一个单元格和第二个单元格,希望热心网友帮忙解决!
路径 = '这里填入xlsx的空白excel文件地址'
工作簿 = vb.load_workbook(路径)
工作表 = 工作簿['Sheet1']
u = len(文件列表)
print(u)
for 行 in range(1, u + 1):
品名 = 工作表.cell(行, 1).value #品名填入每行的第一个单元格
列表 = 工作表.cell(行, 2).value # “j” 填入每行的第二个单元格
行 = 行 + 1
工作簿.save(路径)
我按逻辑改了一下程序结构,试试看是否有效
我没试过用中文名做变量名 , 修改后的代码没测试。
import docx
import os
import openpyxl as vb
from docx import *
P = 0
# 在最开始就打开工作表
路径 = '这里填入xlsx的空白excel文件地址'
工作簿 = vb.load_workbook(路径)
工作表 = 工作簿['Sheet1']
行 = 1
for 文件夹路径, 子文件夹路径, 文件列表 in os.walk('这里填入文件夹地址'):
for i in 文件列表:
# print(文件夹路径 + "/" + i)
h = (文件夹路径 + "/" + i)
P += 1 # 这一段之前是为了拿到每个文件的路径,然后依次打开
document = Document(h) # 打开每个文件
y = len(document.paragraphs) # 查询每个文件有几个段落
print('总段落为:' + str(y))
# 品名 初始化
品名 = ""
j = []
for o in range(30, y): # 从第十行开始直到最后一行找出 含有“正式文件” 和 “审批意见”中间的段落数
T = document.paragraphs[o].text
if "正式文件" in T:
# print(T)
a = o
print('正式文件在第:' + str(a) + '段')
a = a + 1
if "审批意见" in T:
b = o
print('审批意见在第:' + str(b) + '段')
table1 = document.tables[0]
品名 = table1.cell(0, 1).text
print(品名) # 拿到每个文件的品名
for g in range(a, b):
k = document.paragraphs[g].text # 拿到 “正式文件” 和 “审批意见”中间的段落
j.append(k) # 内容较多,将j添加到list
print(j)
# 品名 = 工作表.cell(行, 1).value # 品名填入每行的第一个单元格
# 列表 = 工作表.cell(行, 2).value # “j” 填入每行的第二个单元格
工作表.cell(行, 1).value = 品名
工作表.cell(行, 2).value = str(j)
行 = 行 + 1
# 打开excel ,就是下面这块出现了问题
# 无法将每个文件的内容依次填入每行的第一个单元格和第二个单元格,希望热心网友帮忙解决!
u = len(文件列表)
print(u)
# 最后保存
工作簿.save(路径)
题主在excel部分的代码咋看起来怪怪的:
for 行 in range(1, u + 1):
品名 = 工作表.cell(行, 1).value #品名填入每行的第一个单元格
列表 = 工作表.cell(行, 2).value # “j” 填入每行的第二个单元格
行 = 行 + 1
工作簿.save(路径)
都已经遍历行号了,为啥行号还要加1,而且给单元格填值,则变成取值了,填值不应该是 工作表.cell(行, 1).value = 品名 吗?按你这个思路来应该是可以正常填值的啊,我这里写了一个小Demo,仅供参考:
import openpyxl as vb
# 加载一个工作簿对象
wbook = vb.load_workbook("demo.xlsx")
# 获取Sheet页
sheet = wbook['Sheet1']
flist = [
["品名1", ["j1", "j2", "j3"]],
["品名2", ["j1", "j2", "j3"]],
["品名3", ["j1", "j2", "j3"]],
["品名4", ["j1", "j2", "j3"]],
["品名5", ["j1", "j2", "j3"]]
]
# 逐行填入,每行填入第1,2个单元格
for i in range(1, len(flist) + 1):
name, contents = flist[i - 1][0], flist[i - 1][1]
sheet.cell(i, 1).value = name
# 列表填入表格,需要遍历列表,然后依次填入单元格2,3,...
for j in range(1, len(contents) + 1):
sheet.cell(i, j + 1).value = contents[j - 1]
wbook.save("demo.xlsx")
其最后是能够成功写入excel的: