Web-WF Python Tornado의 3 (Openpyexcel의 소개)

10986 단어 OpenpyxltornadoPython

개시하다


웹 서버 APIServer로서 간단하고 우수한 Tornado를 몇 번에 걸쳐 소개하고 싶습니다.
Web-WF Python Tornado 중 하나
Web-WF Python Tornado의 두 번째
Web-WF Pythhon Tornado의 3

대상


모든 스태프, 엔지니어, 파이톤을 좋아하는 사람, 그중 1, 2를 읽은 사람, Excel에서 자료를 출력해야 하는 사람
Python3.6개 이상의 tornado가 설치되어 있습니다.

골대


이번에는 아이디어를 조금 바꿔서 앱에서 편리한 모듈을 소개할게요.
(Openpyxl)

Openpyxl 소개


python에서 Excel 파일을 읽고 편집할 수 있는 모듈
합계 결과를 Excel로 출력하여 Excel 데이터를 거꾸로 가져오는 것이 편리함
이번에 수출 명세서의 샘플을 제작하다
정부 측

설치하다.


pip만 설치
$ pip install openpyxl

excel 템플릿 준비


다음 템플릿 준비
(손실 부분은 매크로 샘플)

소스 코드


이 중 1, 2에 소개된 소스에 다음 소스를 첨가한다.
main.py
import os
import datetime
import openpyxl as px
from openpyxl.writer.excel import save_virtual_workbook

class prtInvoice(tornado.web.RequestHandler):
    def get(self):
        # 請求書のtemplateをLoad
        wb = px.load_workbook(BASE_DIR+u'/template.xlsx')
        ws = wb.active
        # 印刷範囲を指定
        ws.page_setup.fitToWidth = 1
        ws.page_setup.fitToHeight = 0
        ws.sheet_properties.pageSetUpPr.fitToPage = True
        # こんなmodelを準備(実際にはDBなどから
        model = {
            'companyName': 'テスト会社',
            'items': [
                {'itemName': '商品A', 'price': 1000, 'quantity': 1},
                {'itemName': '商品B', 'price': 2000, 'quantity': 2},
                {'itemName': '商品C', 'price': 3000, 'quantity': 3}
            ]
        }

        # 今日の日付をセット
        # F2はセルのExcelのセル
        dt_now = datetime.datetime.now()
        ws['F2'] = dt_now.strftime("%Y 年 %m 月 〆 日")
        # 会社名をセット
        ws['B7'] = '{0} 御中'.format(model['companyName'])
        for i, item in enumerate(model['items']):
            # 商品名をセット
            ws['B'+str(i+25)] = '  {0}'.format(item['itemName'])
            # 数量をセット
            ws['D'+str(i+25)] = item['quantity']
            # 単価をセット
            ws['E'+str(i+25)] = item['price']

        # Excel形式でダウンロード
        self.set_header('Cache-Control',
                        'no-store, no-cache, must-revalidate, max-age=0')
        self.set_header(
            'Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        fileName = "Invoice.xlsx"
        self.set_header('Content-Disposition',
                        "attachment; filename=\"{}\"".format(fileName))
        self.write(save_virtual_workbook(wb))

def make_app():
    return tornado.web.Application(
        [
        (r"/html", htmlHandler),
        (r"/json", jsonHandler),
        (r"/excel", prtInvoice),
        ],
        debug=True,
    )
ws['B7'] = 'Hello'
이렇게 하면 Excel의 셀에 데이터를 설정할 수 있으며 데이터를 읽는 것이 이 모듈의 특징이다

실행 및 찾아보기


URL을 직접 지정하여 Excel 파일을 다운로드할 수 있습니다.
(클라이언트 다운로드 폴더에 직접 저장)

다운로드한 Excel 파일을 열면

네, 드디어 그런 데이터가 나왔어요.

좋은 웹페이지 즐겨찾기