You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:12:04