[Python] [Excel] Betreiben Sie Excel-Tabellen in Python mit openpyxl (am Beispiel eines Testblatts).

Ich denke, es gibt verschiedene Softwaretests, aber meiner Erfahrung nach war die Methode, Protokolle aus dem Terminal zu extrahieren (z. B. seriell für das Netzwerk oder integriert) und sie zu betrachten, um ein Urteil zu fällen, üblich. Die Testergebnisse sind also wie in Excel. Es ist wie ein sicheres Excel ...

Es scheint, dass jede Skriptsprache gut darin ist, Protokolle zu analysieren und zu beurteilen. Danach werde ich das Ergebnis eintragen, aber wenn ich mich frage, was damit passiert ist, gibt es in Python eine Bibliothek namens openpyxl, mit der Sie sie bedienen können. In meinem Fall ist es auch nicht notwendig, alles mit openpyxl zu generieren. Ich denke, ich werde das Format und Design mit der GUI machen und eine Skriptperson die erforderlichen Daten schreiben lassen.

Dieses Mal habe ich leicht recherchiert, wie man so etwas macht, und eine Probe gemacht, also werde ich sie einschließlich der Bedeutung des Memorandums enthüllen. Ich hoffe, es wird für diejenigen hilfreich sein, die versuchen, Excel zu betreiben.

Umwelt etc.

Ich werde Excel verwenden, also habe ich diesmal Windows verwendet. Ich habe den Vorgang in der folgenden Umgebung bestätigt.

Grundlegende Bedienung von openpyxl

Für die Grundoperation kann es hilfreich sein, nur die folgende Formel zu betrachten. https://openpyxl.readthedocs.io/en/default/

Auch der folgende Artikel von Qiita war sehr hilfreich. Vielen Dank. http://qiita.com/tftf/items/07e4332293c2c59799d1

Als grobe Bewertung konnte ich es ohne Beschwerden bedienen, solange es darum ging, ein Blatt auszuwählen, Informationen über Row und Colomn zu erhalten und im Gegenteil eine Zeichenkette zu schreiben.

Die Installation kann mit der Standard-Pip-Installation openpyxl erfolgen, solange Sie eine Zeichenfolge wie diese ausführen. Wenn Sie auch Bilddateien verarbeiten möchten, scheint sich die Installationsmethode zu ändern. Ich denke, Sie sollten sich auf die oben angegebene offizielle URL beziehen.

Wenn Sie sich mit Zeichenketten befassen, ist es möglicherweise besser, u "Zeichenkette" und "Zeichen" auf der Benutzerseite richtig zu verwenden (ich denke, dass dies je nach Situation usw. unterschiedlich sein kann, aber dieses Mal werden wir basierend darauf fortfahren Ich habe).

Beispiel - Ich habe es mit diesem Excel versucht

Diesmal habe ich versucht, ein solches Blatt als Beispiel zu verwenden. excel1.JPG

Auf dieser Grundlage möchte ich das Protokoll analysieren, das Testergebnis beurteilen und das Ergebnis eingeben. Der Punkt ist __ "Fügen Sie das Ergebnis an der entsprechenden Stelle in Spalte G hinzu" __. Ich werde den Beispielcode später verfügbar machen, aber wenn ich den Beispielcode ausführe,

excel2.JPG

(Obwohl es einen Tsukkomi gibt, bei dem das normale Schließsystem versagt oder verborgen ist, w)

Wenn Sie Zeile und Spalte direkt angeben, endet dies natürlich in zwei Zeilen, aber der Code ist (nur) etwas genialer.

Ich habe eine Excel-Operationsklasse (test_excel) erstellt

Dieses Mal habe ich versucht, die Idee zu codieren, zu entscheiden, welches Ergebnis in "API- und Testinhalte" aufgenommen werden soll. Zu diesem Zweck habe ich Code namens test_excel geschrieben, der die folgende API bereitstellt. Es ist weniger als.

#!/usr/bin/env python
# -*- coding: shift-jis -*-

#Excel-bezogene Operations-API

import sys
import openpyxl as px

#
#Bitte ändern Sie diese Parameter entsprechend dem Material.
#

#SPALTE Wie viel zu lecken beim Lecken
EXCEL_END_OF_COLUMN   = "Z"

#Wie weit schaust du von oben, wenn du nach TITEL suchst?
EXCEL_END_OF_ROW_TITLE = 20

#Wie weit schauen Sie bei der Suche nach Artikeln von oben?
EXCEL_END_OF_ROW_ITEM = 30

class TestExcel:

    #Geben Sie beim Generieren der Klasse den Namen der Excel-Datei an.
    def __init__(self, filename):
        self.filename = filename
        self.workbook = px.load_workbook(filename)
        self.sheet = None

    def err_print(self, text):
        print "\r\nERROR!:", text, "\r\n"

    # select_Wählen Sie das Namensblatt als Verarbeitungsziel aus.
    def select_sheet(self, select_name):
        sheetnames = self.workbook.get_sheet_names()
        for name in sheetnames:
            sheet_name = name
            if select_name == sheet_name:
                self.sheet = self.workbook[name]
                print "%s selected." % select_name
                return True
        self.err_print("%s not found." % select_name)
        return False

    #Spalte mit dem durch name angegebenen Namen(A,B,...)Kehrt zurück.
    def get_column(self, name):
        row_list =  [int(i) for i in range(1, EXCEL_END_OF_ROW_TITLE)]
        column_list = [chr(i) for i in range(ord('A'), ord(EXCEL_END_OF_COLUMN)+1)]
        for row in row_list:
            for column in column_list:
                pos = column + str(row)
                value = self.sheet[pos].value
                if value == name:
                    return column
        self.err_print( "%s not found." % name)
        return None

    #Mehrere Zeilen(1,2,3...)Ruft den Bereich der Elemente ab, die durch Kombinieren erstellt wurden.
    #Rückgabewerte sind Minimum und Maximum+Es ist 1.
    def get_multi_row_data(self, row_title, row_name):
        hit = False
        column = self.get_column(row_title)
        if column == None:
            self.err_print( "%s not found." % row_name)
            return None, None
        row_list =  [int(i) for i in range(1, EXCEL_END_OF_ROW_ITEM)]
        for row in row_list:
            pos = column + str(row)
            value = self.sheet[pos].value
            if value != None:
                if hit == True:
                    api_max = row
                    return api_min, api_max
            if value == row_name and hit == False:
                hit = True
                api_min = row
        if hit == True:
            api_max = row
            return api_min, api_max
        else:
            self.err_print( "%s not found." % row_name)
            return None, None

    #Angegebene Zeile,Schreiben Sie Wertdaten in die Spalte.
    def write(self, colomn, row, value):
        self.sheet[colomn + str(row)] = value

    #Die ursprüngliche Excel-Datei wird von Genji A aktualisiert.
    def save(self):
        self.workbook.save(self.filename)

#EOF

Das Verhalten jeder API ist wie folgt.

API Bewegung
err_print Fehlermeldung anzeigen. Annahme des internen Gebrauchs
select_sheet Wählen Sie das zu verarbeitende Blatt aus
get_column Spalte mit dem angegebenen Namen (A.,B,...) Ist zurück gekommen. Dies ist sich bewusst, dass die Spalte des Elementnamens über der Tabelle angezeigt wird.
get_multi_row_data Wenn mehrere Zeilen kombiniert werden, berechnen Sie den Bereich. Im Beispiel gilt die API dafür
write Angegebene Zeile,Schreiben Sie eine Zeichenfolge in die Spalte.
save Aktualisieren Sie die Excel-Datei (andernfalls werden die Änderungen nicht in Excel übernommen)

Die Parameter haben folgende Rollen: Nun, es tut mir leid, dass ich es richtig mache. Ich denke, dass EXCEL_END_OF_ROW_ITEM weiter unten gemacht werden soll.

Parameter Rolle
EXCEL_END_OF_COLUMN Spalte Mit anderen Worten, geben Sie an, wie weit beim seitlichen Lecken verfolgt werden soll
EXCEL_END_OF_ROW_TITLE get_Wie weit von oben zu suchen, wenn in einer Spalte gesucht wird
EXCEL_END_OF_ROW_ITEM get_multi_row_Wie weit von der Suche nach Daten von oben

Auch wenn ich nicht gut im Codieren bin, ist es ein einfacher Prozess. Wenn Sie also die URL und den Code des offiziellen oder zitierten Artikels vergleichen, können Sie den Prozess bis zu einem gewissen Grad verstehen. In diesem Fall ist get_multi_row_data ziemlich schrecklich, aber der Punkt ist, dass der Ort, an dem Sie treffen, der kleinste ist. Markieren Sie ihn mit und drehen Sie ihn dann, bis er nicht None ist, und den Ort, an dem er nicht None ist (oder bis zum Ende None war). Es fühlt sich wie das Maximum an.

Ich frage mich, ob dieser Bereich ohne große Abhängigkeit vom Blatt verwendet werden kann.

Ich habe eine Excel-Operations-App geschrieben

Der Code zum Betreiben des Beispiel-Excel mit test_excel lautet wie folgt.

#!/usr/bin/env python
# -*- coding: shift-jis -*-

# test_excel.App, die py verwendet, um die Ergebnisse des relevanten Excel auszufüllen

from datetime import datetime
from test_excel import TestExcel

#Name des Tabellenelements, Name der Test-API, Name des Tests und Spalte(A,B,C,..)Wenn Sie setzen
#Zeile des entsprechenden Elements (1,2,3..) Ist zurück gekommen.
def get_test_row(excel, test_koumokumei, test_apiname, siken_naiyou_column, siken_naiyou_name):
    api_min, api_max = excel.get_multi_row_data(test_koumokumei, test_apiname)
    if api_min == None:
        return None
    for row in range(api_min, api_max):
        pos = siken_naiyou_column + str(row)
        value = excel.sheet[pos].value
        if value == siken_naiyou_name:
            return row
    print("\r\nerror::%s found. but %s not found.\n\n" % (test_apiname, siken_naiyou_name))
    return None

#
#Beispiel für eine Excel-Operation
#In Begleitung einer Saitenmanipulation"ascii"、u"Prüfung"Es wird davon ausgegangen, dass der Anrufer es ordnungsgemäß verwendet.
#
if __name__ == "__main__":

    filename = "API-Testbeispiel.xlsx"

    #Excel-Initialisierung
    excel = TestExcel(filename)

    #Blattauswahl
    excel.select_sheet(u"API-Prüfung")

    #Erkennt Spalten, die dem Element entsprechen
    naiyou_column = excel.get_column(u"Inhalt des Tests")
    print "Testinhaltsspalte=", naiyou_column
    kekka_column = excel.get_column(u"Ergebnis")
    print "Ergebnisspalte=", kekka_column

    #Extrahieren Sie die Testinformationen und beschreiben Sie die Ergebnisse(1)
    test_koumokumei = "API"
    test_api = "sample_open(char *name)"
    test_name = u"Wieder öffnen"
    test_row = get_test_row(excel, test_koumokumei, test_api, naiyou_column, test_name)
    result = u"Erfolg"
    excel.write(kekka_column, test_row, result)
    print "API:", test_api, "Inhalt des Tests:", test_name, " =", test_row, "Ergebnis:", result

    #Extrahieren Sie die Testinformationen und beschreiben Sie die Ergebnisse(2)
    test_api = "sample_close(void)"
    test_name = u"Normales System"
    test_row = get_test_row(excel,test_koumokumei, test_api, naiyou_column, test_name)
    result = u"Fehler"
    excel.write(kekka_column, test_row, result)
    print "API:", test_api, "Inhalt des Tests:", test_name, " =", test_row, "Ergebnis:", result

    #aktualisieren
    excel.save()

    print "complete."

#EOF

In diesem Fall muss anhand des API-Namens und des Testinhalts nach dem relevanten Speicherort gesucht werden. Column kann sofort mit get_column von test_excel eingefügt werden, Row erfordert jedoch AND von API-Namen und Testnamen. Es wird von der Funktion __get_test_row __ verarbeitet. Der Prozess ist wie folgt.

Die Idee ist dann, dass Sie Zeile und Spalte angeben und schreiben sollten.

In der Hauptsache wird beschrieben, wie das Blatt "API-Test" von "API-Test sample.xlsx" verarbeitet wird. Es wird davon ausgegangen, dass die in der obigen Abbildung gezeigte Tabelle dort geschrieben ist. Die folgende Verarbeitung wird also durchgeführt.

Wenn Sie diese Python tatsächlich ausführen, wird die folgende Meldung angezeigt und das Ergebnis in Excel angezeigt.

API-Prüfung ausgewählt.
Testinhaltsspalte= D
Ergebnisspalte= G
API: sample_open(char *name)Inhalt des Tests:Wieder öffnen=4 Ergebnisse:Erfolg
API: sample_close(void)Inhalt des Tests:Normales System=7 Ergebnisse:Fehler
complete.

Wenn Sie also den API-Namen und den Testinhalt angeben, können Sie den Zielspeicherort finden. Ich suche es, indem ich es lecke, also habe ich das Gefühl, dass ich damit umgehen kann, selbst wenn ich die Anordnung von Excel ein wenig ändere. Wie bei anderen Skripten ist die Protokollbeurteilung eine Spezialität von Python. Wenn Sie es diesmal mit der Klasse test_excel kombinieren, kann es ohne Erlaubnis ausgefüllt werden (sollte).

Über die Lizenz

Ich habe es unten benutzt. Vielen Dank für die Bereitstellung der wunderbaren Software.

das ist alles.

Recommended Posts

[Python] [Excel] Betreiben Sie Excel-Tabellen in Python mit openpyxl (am Beispiel eines Testblatts).
Führen Sie Python-Skripte in Excel aus (mit xlwings).
Betreiben Sie Excel mit Python Open Pyxl
Versuchen Sie, eine Excel-Datei mit Python (Pandas / XlsxWriter) zu betreiben
Versuchen Sie, eine Excel-Datei mit Python (Pandas / XlsxWriter) zu betreiben
Bedienen Sie ein mit I2C verbundenes Display über Python
Rufen Sie die Formel in der Excel-Datei als Zeichenfolge in Python ab
Versuchen Sie, Excel mit Python (Xlwings) zu betreiben.
Erstellen Sie mit Pandas einen Datenrahmen aus Excel
Führen Sie Python-Dateien mit Django aus HTML aus
Zusammenfassung der Excel-Operationen mit OpenPyXL in Python
Ich habe versucht, von Postman aus mit Cisco Guest Shell als API-Server zu arbeiten
Bearbeiten Sie Redmine mit Python Redmine
Führen Sie Python aus Excel aus
Bedienen Sie Neutronen von Python!
Betreiben Sie LXC von Python aus
Betreiben Sie Excel mit Python (1)
Betreiben Sie Excel mit Python (2)
So erstellen Sie eine Instanz einer bestimmten Klasse aus dict mit __new__ () in Python
Fügen Sie das Bild mit Pythons openpyxl in eine Excel-Datei ein
[Python] So geben Sie eine Pandas-Tabelle in eine Excel-Datei aus
Nehmen Sie Zeitraffer von einer PC-Kamera mit Python, OpenCV auf
Mit Python abflachen
Verstehen Sie die Funktion der Faltung am Beispiel der Bildverarbeitung
Erstellen Sie eine Instanz einer vordefinierten Klasse aus einer Zeichenfolge in Python
Erstellen Sie mit turicreate eine API, die Daten aus einem Modell zurückgibt
Format, wenn eine lange Zeichenfolge als Python-Argument übergeben wird
Versuchen Sie, mit Python3 eine Zeichenfolge aus einem Bild zu extrahieren
Lesen Sie die Excel-Tabelle und wiederholen Sie den Prozess zeilenweise Python VBA
Hinzufügen von Excel-Dateispalten und Löschen von Zeilen mithilfe von Python Openpyxl
So bekommen Sie einen Ingenieur aus Ihren 30ern
[Hinweis] Verwenden eines 16x2-stelligen LCD-Zeichens (1602A) von Python mit Raspeye
Ich habe versucht, die Liste der Drehzahlen des SSH-Anmeldeziels mit Python + openpyxl in einer Excel-Tabelle auszugeben.