Web-WF Python Tornado Partie 3 (Introduction à Openpyexcel)

introduction

En tant que serveur Web APIServer, je voudrais vous présenter Tornado, qui est facile et excellent (je pense), en plusieurs parties.

[Web-WF Python Tornado Partie 1] (https://qiita.com/sin_hayasi/private/c5af3b21e7abda196cfd) [Web-WF Python Tornado Partie 2] (https://qiita.com/sin_hayasi/private/bdc4f45b092ed5433aec) Web-WF Python Tornado Partie 3 (Cet article

Cible

Ingénieur full stack, ingénieur front, personne qui aime Python, personne qui a lu la partie 1 et la partie 2, personne qui a été forcée de produire du matériel avec Excel

Python3.6 ou supérieur, tornado installé

objectif

Cette fois, je vais présenter un module qu'il est pratique d'avoir dans l'application avec un goût légèrement différent (Openpyxl)

Qu'est-ce qu'Openpyxl

Un module qui peut lire, écrire et éditer des fichiers Excel à partir de python Il est pratique de sortir le résultat agrégé sous forme de rapport dans Excel ou, au contraire, d'importer des données Excel. Cette fois, je vais créer un échantillon pour sortir la facture [Officiel ici] (https://openpyxl.readthedocs.io/en/stable/)

Installation

Openpyxl ne peut être installé qu'avec pip

$ pip install openpyxl

préparation du modèle Excel

Préparez le modèle suivant (La partie en rouge est un exemple de macro) スクリーンショット 2020-08-24 18.43.28.png

Code source

Ajoutez les sources suivantes aux sources présentées dans les parties 1 et 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):
        #Chargez le modèle de facture
        wb = px.load_workbook(BASE_DIR+u'/template.xlsx')
        ws = wb.active
        #Spécifiez la plage d'impression
        ws.page_setup.fitToWidth = 1
        ws.page_setup.fitToHeight = 0
        ws.sheet_properties.pageSetUpPr.fitToPage = True
        #Préparez un tel modèle (en fait à partir de DB, etc.
        model = {
            'companyName': 'Société de test',
            'items': [
                {'itemName': 'Produit A', 'price': 1000, 'quantity': 1},
                {'itemName': 'Produit B', 'price': 2000, 'quantity': 2},
                {'itemName': 'Produit C', 'price': 3000, 'quantity': 3}
            ]
        }

        #Régler la date du jour
        #F2 est la cellule Excel de la cellule
        dt_now = datetime.datetime.now()
        ws['F2'] = dt_now.strftime("%Y année%m mois 〆jour")
        #Définir le nom de l'entreprise
        ws['B7'] = '{0}Tu'.format(model['companyName'])
        for i, item in enumerate(model['items']):
            #Définissez le nom du produit
            ws['B'+str(i+25)] = '  {0}'.format(item['itemName'])
            #Définir la quantité
            ws['D'+str(i+25)] = item['quantity']
            #Fixer le prix unitaire
            ws['E'+str(i+25)] = item['price']

        #Télécharger au format 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'

La fonctionnalité de ce module est que vous pouvez définir et lire des données dans des cellules Excel comme celle-ci.

Exécuter et parcourir

Vous pouvez télécharger le fichier Excel en spécifiant directement l'URL comme indiqué ci-dessous. (Enregistré directement dans le dossier de téléchargement du client)

スクリーンショット 2020-08-24 18.54.22.png

Lorsque vous ouvrez le fichier Excel téléchargé スクリーンショット 2020-08-24 18.56.04.png Oui, j'ai réussi à afficher ce genre de données

Recommended Posts

Web-WF Python Tornado Partie 3 (Introduction à Openpyexcel)
Introduction à Python Hands On Partie 1
Introduction au langage Python
Introduction à OpenCV (python) - (2)
Introduction à PyQt4 Partie 1
Introduction à Tornado (1): Framework Web Python démarré avec Tornado
Introduction à Python Django (2) Win
Introduction à la communication série [Python]
[Introduction à Python] <liste> [modifier le 22/02/2020]
Introduction à Python (version Python APG4b)
Une introduction à la programmation Python
Introduction à Ansible Part «Inventaire»
Introduction à Python pour, pendant
Introduction à Python numpy pandas matplotlib (pour ~ B3 ~ part2)
Introduction à Ansible Part ④'Variable '
[Introduction à cx_Oracle] (Partie 6) Mappage des types de données DB et Python
Introduction à Python que même les singes peuvent comprendre (partie 3)
Introduction à Python scikit-learn, matplotlib, algorithme monocouche (~ vers B3 ~ part3)
Introduction à Python que même les singes peuvent comprendre (partie 1)
Introduction à Python que même les singes peuvent comprendre (partie 2)
[Présentation de l'application Udemy Python3 +] 58. Lambda
[Présentation de l'application Udemy Python3 +] 31. Commentaire
Introduction à la bibliothèque de calcul numérique Python NumPy
Entraine toi! !! Introduction au type Python (conseils de type)
[Introduction à Python] <numpy ndarray> [modifier le 22/02/2020]
[Présentation de l'application Udemy Python3 +] 57. Décorateur
[Introduction à Python3 Jour 13] Chapitre 7 Chaînes de caractères (7.1-7.1.1.1)
[Introduction à Python] Comment analyser JSON
[Présentation de l'application Udemy Python3 +] 56. Clôture
[Introduction à Python3 Jour 14] Chapitre 7 Chaînes de caractères (7.1.1.1 à 7.1.1.4)
Introduction à Protobuf-c (langage C ⇔ Python)
[Présentation de l'application Udemy Python3 +] 59. Générateur
[Introduction à Python3 Jour 15] Chapitre 7 Chaînes de caractères (7.1.2-7.1.2.2)
[Introduction à Python] Utilisons les pandas
[Introduction à Python] Utilisons les pandas
[Introduction à l'application Udemy Python3 +] Résumé
Introduction à l'analyse d'image opencv python
[Introduction à Python] Utilisons les pandas
Premiers pas avec Python pour les non-ingénieurs
Introduction à Python Django (2) Édition Mac
Introduction à Ansible Partie 1 Hello World !! '
[AWS SAM] Présentation de la version Python
[Introduction à Python3 Day 21] Chapitre 10 Système (10.1 à 10.5)
[Tutoriel Python] Une introduction facile à Python
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie2-
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie4-
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie3-
[Introduction à Udemy Python3 + Application] 18. Méthode List
[Introduction à l'application Udemy Python3 +] 28. Type collectif
[Introduction à Python] Comment utiliser la classe en Python?
[Introduction à Udemy Python3 + Application] 25. Méthode de type dictionnaire
[Introduction à l'application Udemy Python3 +] 33. instruction if
Introduction à la simulation d'événements discrets à l'aide de Python # 1
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.1-8.2.5)
[Introduction à l'application Udemy Python3 +] 55. Fonctions intégrées
[Introduction à l'application Udemy Python3 +] 48. Définition des fonctions
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.3-8.3.6.1)
Super Introduction Arithmétique Bit Python
[Introduction à l'application Udemy Python3 +] 10. Valeur numérique
[Introduction à l'application Udemy Python3 +] 21. Type Taple
[Introduction à l'application Udemy Python3 +] 45. fonction enumerate