from openpyxl import load_workbook from docxcompose.composer import Composer from docx import Document # 加载Excel文件 wb = load_workbook(r'D:\好记薪\工商资料生成\表格.xlsx') sheet = wb['需调用文档'] # 获取需要插入的Docx文件路径 docx_files = [] if sheet['D2'].value: docx_files.append(r'D:\好记薪\工商资料生成\A公司登记申请书.docx') if sheet['E2'].value: docx_files.append(r'D:\好记薪\工商资料生成\B股东会决议.docx') if sheet['F2'].value: docx_files.append(r'D:\好记薪\工商资料生成\C章程.docx') if sheet['G2'].value: docx_files.append(r'D:\好记薪\工商资料生成\D股权转让协议.docx') if sheet['H2'].value: docx_files.append(r'D:\好记薪\工商资料生成\E有关债务清偿及担保情况说明.docx') # 创建模板Docx template_docx = Document(r'D:\好记薪\工商资料生成\template.docx') # 将需要插入的Docx文件逐个加到模板末尾 if docx_files: composer = Composer(template_docx) for docx_file in docx_files: composer.append(Document(docx_file)) composer.save(r'D:\好记薪\工商资料生成\merged.docx')
时间: 2024-03-24 16:35:59 浏览: 170
这段代码看起来是一个Python程序,它依赖于openpyxl和docxcompose模块。它的作用是将多个Docx文件插入到一个模板Docx文件中,并保存为一个新的Docx文件。
在运行这段代码之前,你需要确保在你的计算机上已经安装了openpyxl和docxcompose模块。你可以使用pip来安装它们:
```
pip install openpyxl
pip install docxcompose
```
如果你已经安装了这些模块,那么你可以直接运行这段代码。它会根据Excel表格中的某些条件来决定需要插入哪些Docx文件,并将它们逐个加入到模板Docx文件的末尾。
最后,它将保存一个新的Docx文件,其中包含了插入的所有文档。
相关问题
为什么这串代码替换不了obj的内容。from openpyxl import load_workbook from docx import Document # 打开 Excel 文件 wb = load_workbook('data.xlsx') ws = wb.active # 打开 Word 模板文件 document = Document('template.docx') # 遍历 Excel 表格并填充 Word 模板 for row in ws.iter_rows(min_row=2, values_only=True): name, obj = row # 复制模板段落并插入数据 new_paragraph = document.add_paragraph() for run in document.paragraphs[0].runs: new_run = new_paragraph.add_run(run.text) if '{{name}}' in run.text: new_run.text = new_run.text.replace('{{name}}', name) elif '{{obj}}' in run.text: new_run.text = new_run.text.replace('{{obj}}', obj) # 保存 Word 文档 document.save('output.docx')
这段代码可以替换 `name` 的内容,但无法替换 `obj` 的内容是因为 `obj` 可能是一个元组或列表,而这些类型无法直接传递给 `new_run.text` 方法。解决方法是将 `obj` 转换为字符串,例如使用 `str()` 函数。修改后的代码如下:
```
from openpyxl import load_workbook
from docx import Document
# 打开 Excel 文件
wb = load_workbook('data.xlsx')
ws = wb.active
# 打开 Word 模板文件
document = Document('template.docx')
# 遍历 Excel 表格并填充 Word 模板
for row in ws.iter_rows(min_row=2, values_only=True):
name, obj = row
# 复制模板段落并插入数据
new_paragraph = document.add_paragraph()
for run in document.paragraphs[0].runs:
new_run = new_paragraph.add_run(run.text)
if '{{name}}' in run.text:
new_run.text = new_run.text.replace('{{name}}', name)
elif '{{obj}}' in run.text:
new_run.text = new_run.text.replace('{{obj}}', str(obj))
# 保存 Word 文档
document.save('output.docx')
```
现在有4个文件,修改代码,对文件进行循环操作合并文件from openpyxl import load_workbook from openpyxl.utils import get_column_letter from openpyxl import Workbook # 打开第一个Excel文件 wb1 = load_workbook('file1.xlsx') ws1 = wb1.active # 打开第二个Excel文件 wb2 = load_workbook('file2.xlsx') ws2 = wb2.active # 创建一个新的工作簿 wb3 = Workbook() ws3 = wb3.active # 复制第一个文件的内容到新的工作簿 for row in ws1.iter_rows(): for cell in row: ws3[cell.coordinate].value = cell.value # 复制第二个文件的内容到新的工作簿 for row in ws2.iter_rows(): for cell in row: column_letter = get_column_letter(cell.column) ws3[column_letter + str(cell.row)].value = cell.value # 保存新的工作簿 wb3.save('merged_file.xlsx')
要对多个文件进行循环操作并合并它们,您可以使用一个文件名列表,然后在循环中打开每个文件并将其内容复制到合并的工作簿中。以下是修改后的代码示例:
```python
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
from openpyxl import Workbook
# 创建一个新的工作簿
wb3 = Workbook()
ws3 = wb3.active
# 文件名列表
file_names = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx', 'file4.xlsx']
# 循环处理每个文件
for file_name in file_names:
# 打开当前文件
wb = load_workbook(file_name)
ws = wb.active
# 复制当前文件的内容到新的工作簿
for row in ws.iter_rows():
for cell in row:
ws3[cell.coordinate].value = cell.value
# 关闭当前文件
wb.close()
# 保存合并后的文件
wb3.save('merged_file.xlsx')
```
在上述代码中,我们首先创建了一个新的工作簿(Workbook)来存储合并后的数据。然后,我们定义了一个包含要处理的所有文件名的列表(file_names)。接下来,在循环中逐个打开每个文件,复制其内容到新的工作簿中。最后,我们保存合并后的工作簿为merged_file.xlsx。
请确保所有要合并的文件都位于同一目录下,并确保每个文件的数据结构相同,以便正确合并。
希望这次的修改满足了您的需求!如果还有其他问题,请随时提问。
阅读全文