Bei der Entwicklung eines Systems habe ich oft die Möglichkeit, ein in Excel geschriebenes Dokument zu schreiben. In einigen Fällen ist es selten erforderlich, eine große Anzahl von Dateien mit fast demselben Inhalt wie unten gezeigt zu erstellen.
Yahyakuya Shopping Procedure Manual.xlsx
Einkaufsverfahren für Fischgeschäfte manual.xlsx
Die beiden oben genannten sind genau die gleichen wie das Geschäft, das Sie kaufen, mit Ausnahme dessen, was Sie kaufen.
In einem solchen Fall gibt es eine Methode, "ein Yahyakuya-Einkaufsverfahren-Handbuch zu erstellen und dann eine Fischgeschäft-Version durch Ersetzen von Zeichenketten zu erstellen", aber in einigen Fällen kann dies mit der schlechten Ersetzungsfunktion von Excel nicht realisiert werden, so dass manuelles Ersetzen weint Ich denke, dass es viele Fälle gibt, in denen die sogenannte Hand sed) durchgeführt wird.
Daher openpyxl, das xlsx-Dateien aus Python und Pythons typischer Template-Engine [jinja2] liest und schreibt (http://jinja.pocoo.org) Ich habe versucht, mit / docs / dev /) den Text in einer Excel-Datei mit einer Vorlage zu generieren.
https://gist.github.com/kokumura/c44970102e1f33685152
python
pyxl.py [Xlsx-Dateiname mit der Jinja-Vorlage] [Name der Ausgabedatei] [Vorlagenvariable(YAML)]
Auf diese Weise werden alle Zellen aller in der ursprünglichen xlsx-Datei enthaltenen Blätter gescannt, die jinja2-Vorlage wird erweitert, wenn sie enthalten ist, und das Ergebnis wird in eine andere Datei ausgegeben.
Bereiten Sie zunächst die folgende Vorlagendatei mit Excel vor. Die Grammatik ist jinja2 selbst.
template.xlsx
Beschreiben Sie die in der Vorlage in YAML verwendeten Variablen.
yasai.yml
---
place:Yahyakuya
targets:
- name:Mandarine
num: 3
- name:Apfel
num: 2
- name:Karotte
num: 1
sakana.yml
---
place:Fisch-laden
targets:
- name:Sanma
num: 2
- name:Der Tintenfisch
num: 1
- name:Tintenfisch
num: 1
Durch Ausführen der folgenden Schritte werden "Yahyakuya Shopping Procedure Manual.xlsx" und "Fish Shop Shopping Procedure Manual.xlsx" aus den Dateien template.xlsx und YAML generiert. Ich bin glücklich.
python xljj.py template.xlsx Yahyakuya Einkaufshandbuch.xlsx yasai.yml
python xljj.py template.xlsx Fischgeschäft Einkaufsverfahren.xlsx sakana.yml
openpyxl ist unerwartet vielseitig und wenn Sie Ihr Bestes geben, können Sie den Stil ändern und so weiter. Die Dokumentation ist jedoch nicht sehr umfangreich. Daher müssen Sie manchmal darauf vorbereitet sein, Funktionen oder private Methoden aufzurufen, die nicht in der Dokumentation angegeben sind.
Im Folgenden finden Sie eine Funktion, die automatisch eine weitere allgemeine Aufgabe ausführt: "Öffnen Sie eine Excel-Datei, wählen Sie auf allen Blättern die Zelle" A1 "aus, wechseln Sie zum ersten Blatt und speichern Sie sie."
from openpyxl import load_workbook
import openpyxl.worksheet.views
def select_a1(workbook_path):
wb = load_workbook(workbook_path)
wb._active_sheet_index = 0
for ws in wb.worksheets:
ws.sheet_view.selection = (openpyxl.worksheet.views.Selection(),)
wb.save(workbook_path)
Recommended Posts