使用docxtpl生成文档后找不到文件及模板报错问题求助
解决docxtpl库文件定位与模板找不到的问题
问题根源与解决方案
1. 未执行文档生成逻辑
你定义了Documento()函数但从未调用它,导致生成文档的核心代码完全没运行,这是代码无报错但找不到Perro.docx的核心原因。
2. 模板路径与文件保存路径的可靠性优化
- 硬编码绝对路径容易因特殊字符(如空格、非英文字符)或路径变动出问题,用
os模块动态获取脚本所在目录,能确保模板路径和保存路径的准确性。 - 直接写
"Perro.docx"会保存到Python的当前工作目录(不一定是脚本所在文件夹),指定绝对路径可避免找不到文件的情况。
修改后的完整代码
from docxtpl import DocxTemplate import os def Datos_Entrada(mensaje): while True: try: Entrada = int(input(mensaje)) if Entrada >= 0 : return Entrada else: print("Valor no Valido") except ValueError: print("Valor equivocado") #Datos Obtenidos por el Usuario def Operaciones(): Unidades_Servicios_hechos = Datos_Entrada("Unidades Vendidas/Servicios hechos: ") Ingresos_Entrada = Datos_Entrada("Ingresos: ") Cuentas_PorCobrar = Datos_Entrada("Cuentas Por Cobrar: ") GastosOperativos_Entrada = Datos_Entrada("Gastos Operativos: ") GastosAdminVentas_Entrada = Datos_Entrada("Gastos Admin/Ventas: ") IngresosPorProducto_Salida = Ingresos_Entrada / Unidades_Servicios_hechos GastosTotales_Salida = GastosOperativos_Entrada + GastosAdminVentas_Entrada GastosPorProducto_Salida = GastosTotales_Salida / Unidades_Servicios_hechos UtilidadesOperativas_Salida = Ingresos_Entrada - GastosOperativos_Entrada UtilidadesTotales_Salida = Ingresos_Entrada - GastosTotales_Salida MargenGanancia_Salida = UtilidadesTotales_Salida / Ingresos_Entrada * 100 UtilidadesPorProducto_Salida = UtilidadesTotales_Salida / Unidades_Servicios_hechos return Unidades_Servicios_hechos, Ingresos_Entrada, Cuentas_PorCobrar, GastosOperativos_Entrada, GastosAdminVentas_Entrada, IngresosPorProducto_Salida, GastosPorProducto_Salida, GastosTotales_Salida, UtilidadesOperativas_Salida, UtilidadesTotales_Salida, MargenGanancia_Salida, UtilidadesPorProducto_Salida #Imprimir los datos Obtenidos def Documento(): # 获取当前脚本所在的目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接模板的绝对路径 template_path = os.path.join(script_dir, "Documento.docx") Documento_Input = DocxTemplate(template_path) datos = Operaciones() context = { 'A': datos[0], 'B' : datos[1], 'C' : datos[2], 'D' : datos[3], 'E' : datos[4], 'F' : datos[7], 'G' : datos[5], 'H' : datos[6], 'I' : datos[8], 'J' : datos[9], 'K' : datos[10], 'M' : datos[11], } Documento_Input.render(context) # 拼接保存文件的绝对路径,确保和脚本同目录 save_path = os.path.join(script_dir, "Perro.docx") Documento_Input.save(save_path) print(f"El archivo se ha guardado correctamente en: {save_path}") # 关键:调用Documento函数执行文档生成逻辑 Documento() print("Lo lograste")
额外说明
os.path.dirname(os.path.abspath(__file__))能动态获取脚本所在文件夹,不管脚本移动到哪里,路径都能正确识别。- 将
Operaciones()的返回值存入datos变量,通过索引取值避免一行代码过长,提升可读性。 - 保存文件时打印具体路径,方便直接定位生成的文件。
内容的提问来源于stack exchange,提问作者A cp
相关产品推荐
相关产品推荐

