python自動生成Docx(docxtpl庫)


python這個庫很有用,可以格式化生成報告等。

其他內容請點此處,下面只寫docxtpl的功能代碼。

# coding: utf-8
import web  # 我們用的webpy框架
import StringIO
form docxtpl import DocxTemplate

def doctest():
    tpl = DocxTemplate('E:/safe.docx')  # 讀取docx模板,注意:需要提前設置好模板,下面會介紹
    tpl = DocxTemplate('/home/sysadm/shell/usm/usm_tk_online2/usm/www/safetytrain/safe.docx')
    # 將文件流返回
    web.header('Content-type', 'aapplication/msword')  # 指定返回類型
    web.header('Transfer-Encoding', 'chunked')
    web.header('Content-Disposition',
                       'attachment;filename={0}'.format('名稱' + '.doc'))
    list_docx = []  # 將需要寫道doc的內容都放到list_docx列表里面
    list_docx.append({'personname':"personname","companyname":"companyname","division":"division"})
    datetody = str(datetime.date.today())  # 用來給doc名稱動態顯示時間
    list_docx_x, list_docx_y = divmod(len(list_docx), 35)  # 生產doc文檔的頁數
    
    if list_docx_y != 0:
        list_docx_count = list_docx_x + 1
    else:
        list_docx_count = list_docx_x
    list_docx_de = []
    page_s = []
    for i in range(list_docx_count):
        page_s.append(i+1)
    for i in range(list_docx_count):
        if i == list_docx_count - 1:
            li_c = list_docx[(i)*35:]
        else:
            li_c = list_docx[(i)*35: (i)*35 + 35]
        list_docx_de.append(li_c)
    
    ret = {"page":list_docx_count,"datetody":datetody, "total": list_docx_de}  # 在doc里面對ret進行取值
    # 以下都是固定寫法
    tpl.render(ret)  
    sio = StringIO.StringIO()
    # 將文件保存為string流
    tpl.save(sio)
    # 將光標移到開頭
    sio.seek(0)
    # 會在瀏覽器顯示下載特效
    return sio.getvalue()

模板語法(圖片來至網絡)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM