[PYTHON] Du fichier Excel à l'exe et sortie de l'outil qui crache le CSV

introduction

Depuis que j'ai créé un outil pour générer un CSV à partir d'un fichier Excel, y compris une feuille à la fois avec Python Voici les étapes pour le libérer.

Contenu de l'outil

Cliquez ici pour l'outil créé cette fois Nous avons également un exe pour qu'il puisse être utilisé en dehors de l'environnement du programme. Pour le fichier exe, placez-le dans le dossier contenant Excel et double-cliquez dessus.

exe https://github.com/InTack2/csv-masher/releases

GitHub

https://github.com/InTack2/csv-masher

2020/05/09 postscript Je suis désolé! !! Il est resté privé tout en écrivant qu'il a été publié. .. libéré. .. ..

Contexte

Lorsque je travaille en tant que TA, je prépare souvent des fichiers CSV et des fichiers Json et les ai généralement. Cependant, s'il s'agit d'un fichier CSV, il est très difficile de saisir que la largeur de la cellule est cassée. .. Donc, je le gère avec Excel .. Cette fois je l'enregistre sous un nom différent et la destination d'entrée change, donc c'est quand même gênant .. Alors en créant un outil pour automatiser cette zone, Au fait, je voulais faire la sortie publique de GitHub, alors je l'ai fait.

Environnement de développement

Contenu de l'outil

Le contenu est assez simple. C'est comme lire un fichier Excel avec la bibliothèque openpyxl et cracher chaque feuille avec csv. Je vais omettre l'explication, etc., mais s'il y a une demande ...

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Convertir des fichiers Excel dans le même répertoire en csv à la fois
"""
import os
import sys
import csv
import openpyxl
#PyInstaller__file__Évitement des problèmes
if hasattr(sys, "frozen"):
    SEARCH_FILE_DIRECTORY = os.path.dirname(sys.argv[0])  # "..\\[exe_folder]"
#Lorsque le fichier est exécuté
else:
    SCRIPT_PATH = os.path.dirname(__file__)  # "..\\src\\csv-masher"
    SRC_PATH = os.path.dirname(SCRIPT_PATH)  # "..\\src"
    SEARCH_FILE_DIRECTORY = os.path.join(SRC_PATH, "sample_file")  # "..\\src\\Sample"
EXCEL_EXTENSION = ".xlsx"
CSV_EXTENSION = ".csv"

class CSVMasher(object):
    """Fonction de génération principale
    """
    def __init__(self):
        self.__excel_files = []
        self.set_excel_files(self.__search_excel_file(SEARCH_FILE_DIRECTORY))
    def create_csv_file(self):
        """Générer un fichier csv
        """
        for excel_file in self.__excel_files:
            excel_name = os.path.basename(excel_file).split(".")[0]
            excel_current_directory = os.path.dirname(excel_file)
            book = openpyxl.load_workbook(excel_file, read_only=True, keep_vba=False)
            for sheet in book.worksheets:
                sheet_name = sheet.title
                export_name = "{excel_name}_{sheet_name}{extension}".format(excel_name=excel_name, sheet_name=sheet_name, extension=CSV_EXTENSION)
                export_csv_path = os.path.join(excel_current_directory, export_name)
                with open(export_csv_path, "w", encoding="utf-8") as f:
                    writer = csv.writer(f)
                    for cols in sheet.rows:
                        writer.writerow([str(_.value or "") for _ in cols])
    def __search_excel_file(self, search_directory):
        """Obtenez un fichier Excel
        """
        hit_files = []
        for dir_path, dir_list, file_list in os.walk(search_directory):
            for file_name in file_list:
                if EXCEL_EXTENSION in file_name:
                    hit_files.append(os.path.join(dir_path, file_name))
        return hit_files
    def get_excel_files(self):
        """Obtenez un fichier Excel
        Returns:
            list:Liste de passes Excel
        """
        return self.__excel_files
    def set_excel_files(self, excel_files):
        """Définissez le fichier Excel
        Args:
            excel_files (list):liste des chemins de fichiers Excel
        """
        self.__excel_files = excel_files

if __name__ == "__main__":
    csv_masher = CSVMasher()
    print(csv_masher.get_excel_files())
    csv_masher.create_csv_file()

Publier

J'ai fait le contenu, donc je l'ai publié! !! Je veux y aller, Il y a des choses à penser lors de la conversion en exe ou de la publication.

1. Vérifiez la licence de la bibliothèque

Puisqu'il est exécuté cette fois, il importera le package. Dans ce cas, la licence de la bibliothèque sera «jointe». Vous devez vérifier la licence car il s'agit d'une méthode différente de "l'utilisation" normale. (Pour ceux qui connaissent une méthode simple ici)

1-1. Collecter les licences de package

Les packages utilisés cette fois, y compris les dépendances, sont les suivants Une seule bibliothèque est importée, mais compte tenu des dépendances, je pense qu'elle passera à la formule Imozuru.

Joindre le fichier LICENCE avec le fichier 1-2.exe

Fondamentalement, si vous le joignez, vous devrez afficher le copyright et la déclaration de licence, donc Je pense que openpyxl et ses dépendants et-xmlfile et jdcal devraient être protégés par copyright. La déclaration de licence sera assez longue, mais je pense que c'est mieux que de blesser involontairement l'auteur sans l'afficher.

référence

https://qastack.jp/software/121998/mit-vs-bsd-vs-dual-license

https://mozxxx.hatenadiary.org/entry/20110529/p4

https://www.catch.jp/oss-license/2013/09/27/mit_license/

2. Réfléchissez à la façon de libérer le fichier exe

Il y a plusieurs façons, Cette fois, j'aimerais utiliser la fonction release de GitHub pour étudier.

Cet article est facile à comprendre comment utiliser, il est donc recommandé.

https://qiita.com/keita69sawada/items/da6d8f6b6fb8f05ca670

3. Publier réellement

La version est terminée avec succès. image.png

4. Publiez également le référentiel GitHub

Ouvrir les paramètres du référentiel image.png

Faites défiler vers le bas et c'est un peu effrayant, mais c'est fait avec Rendre public dans la colonne Zone de danger. image.png

Résumé

C'était plus dur que ce à quoi je m'attendais. .. Surtout autour de la licence, peu importe lors de l'importation et de son utilisation normalement, Il semble que vous deviez être prudent lors de la conversion en exe.

Recommended Posts

Du fichier Excel à l'exe et sortie de l'outil qui crache le CSV
Création d'un toolver qui crache le système d'exploitation, Python, les modules et les versions d'outils à Markdown
Script Python qui génère tous les enregistrements de la table Oracle dans un fichier CSV
[Python] De l'analyse morphologique des données CSV à la sortie CSV et à l'affichage graphique [GiNZA]
Importer un fichier Excel depuis Python (enregistré dans DB)
Création d'un outil pour générer un diagramme de séquence à partir d'un fichier de capture de paquets de plusieurs nœuds
Procédure pour convertir un fichier python en exe à partir de la construction de l'environnement Ubunts
Comment convertir des fichiers Json au format CSV ou au format EXCEL
Script Python qui crée un fichier JSON à partir d'un fichier CSV
[Python] Création d'un outil GUI qui traite automatiquement le CSV des données d'élévation de température dans Excel
Précautions lors de la saisie à partir de CSV avec Python et de la sortie vers json pour faire exe
"Moyenne des sommes de 1 à 10" et sa vitesse d'exécution
[Python] À propos de la création d'un outil pour créer un nouveau courrier Outlook basé sur les données du fichier JSON et de la partie qui a été interceptée