XLSX-Erstellung, -Bearbeitung und -Analyse
| Aufgabe | Ansatz |
|---|---|
| Erstellen oder Bearbeiten mit Formeln/Formatierung | openpyxl — siehe Hinweise unten |
| Massendaten ein- oder auslesen | pandas (read_excel, to_excel) |
| Schnellansicht eines Blatts | markitdown datei.xlsx — ## Blattname pro Blatt; liest auch .xlsm. Keine Zellkoordinaten, daher keine Bearbeitungen daraus planen |
| Lesen eines Modells (Formeln und Werte) | zwei load_workbook-Durchläufe — siehe Hinweise unten |
openpyxl,pandasundmarkitdownsind vorinstalliert — führen Sie zuerst keinuv pip installaus; schreiben Sie das Skript und importieren Sie direkt. Nur wenn ein Import fehlschlägt (oder der Befehlmarkitdownfehlt):uv pip installfür das fehlende Paket ausführen.
Skriptpfade unten sind relativ zum Verzeichnis dieses Skills.
Anforderungen an jede Ausgabe
- Professionelle Schriftart (Arial, Times New Roman) durchgehend, sofern der Benutzer nichts anderes angibt.
- Null Formelfehler. Nie ausliefern, wenn
recalc.pyerrors_foundmeldet. Wenn Sie glauben, dass ein Fehler vor Ihnen existiert, beweisen Sie es: Laden Sie das Original mitdata_only=Trueund sehen Sie sich diese Zelle an. Ein von Ihnen eingeführter Fehler sieht genauso aus wie einer, den Sie übernommen haben. - Formeln verwenden, niemals hartcodierte Ergebnisse. Schreiben Sie
blatt['B10'] = '=SUMME(B2:B9)', nicht den in Python berechneten Gesamtwert. Das Blatt muss neu berechnen, wenn sich seine Eingaben ändern. - Folgen Sie der Spezifikation des Benutzers buchstabengetreu. Exakte Registerkartennamen, exakte Spaltenüberschriften und die von ihnen buchstabierte Formel. Ein Redesign, das etwas anderes berechnet, schlägt fehl, so elegant es auch sein mag.
- Dokumentieren Sie jede Annahme und jede hartcodierte Zahl dort, wo der Leser sie sieht — ein Zellkommentar oder eine benachbarte Zelle am Ende einer Tabelle. Zitieren Sie eine echte Quelle, wenn eine vorhanden ist (
Quelle: Unternehmens-10-K, GJ2024, Seite 45, Umsatzvermerk, [SEC EDGAR URL]); wenn die Zahl vom Benutzer stammt, sagen Sie dies klar. - Eine Arbeitsmappe, die Sie erstellen, damit jemand sie ausfüllt, benötigt eine kurze Legende, die angibt, welche Zellen bearbeitet werden sollen, und eine Beispielzeile mit realistischen Werten, die das erwartete Format zeigt. Fügen Sie eine solche Zeile niemals zu einer Datei hinzu, die Sie bearbeiten sollen.
- Bearbeiten einer vorhandenen Datei: Befolgen Sie deren Konventionen exakt. Sie überschreiben jede hier aufgeführte Richtlinie. Finden Sie zuerst die dafür vorgesehenen Eingabezellen — eine deutliche Schriftfarbe, Füllung oder Schattierung markiert sie — schreiben Sie nur dort und lassen Sie jede vorhandene Formel unberührt.
Neu berechnen (obligatorisch, wenn die Datei Formeln enthält)
openpyxl schreibt Formeln als Zeichenfolgen ohne zwischengespeicherte Werte. Bis Sie neu berechnen, gibt jede Formelzelle None an alles zurück, was zwischengespeicherte Werte liest — pandas, load_workbook(data_only=True) und die meisten Vorschauprogramme.
python skripte/recalc.py ausgabe.xlsx [timeout_sekunden] # Standard 30
LibreOffice berechnet jede Formel, die Datei wird an Ort und Stelle überschrieben, und Sie erhalten JSON: status (success | errors_found), total_formulas, total_errors und ein error_summary, das bis zu 100 Zellen pro Fehlertyp benennt (locations_truncated gibt an, wie viele davon zurückgehalten wurden — vertrauen Sie total_errors, nicht der Länge der Liste). Beheben Sie, was benannt wird, und führen Sie es erneut aus. JSON mit einem error-Schlüssel anstelle eines status bedeutet, dass nichts neu berechnet wurde, und nur in diesem Fall wird mit einem Exit-Code ungleich Null beendet — errors_found wird mit 0 beendet, behandeln Sie eine saubere Ausführung also nie als saubere Arbeitsmappe.
Eine grüne Neuberechnung beweist, dass Ihre Formeln ausgewertet werden, nicht dass sie richtig sind. Ein um eins verschobener Bereich oder ein Verweis auf die falsche Zeile führt zu einer sauberen, fehlerfreien Datei mit falschen Zahlen. Schreiben Sie zuerst 2–3 Formeln und überprüfen Sie, ob sie die erwarteten Werte liefern, bevor Sie ein Raster aufbauen.
Eine Arbeitsmappe, die auf eine andere Datei verlinkt, verliert diese Links, wenn Sie sie mit openpyxl erneut speichern und dann neu berechnen. Eine solche Formel liest ='[1]Returns-Analyse'!$B$2 — das [1] ist ein Index in die Liste der externen Verweise der Arbeitsmappe, der eine separate Datei auf der Festplatte benennt, kein Blatt. Diese Datei ist hier selten vorhanden, daher ist der zwischengespeicherte Wert der Zelle das Einzige, was ihre Daten hält. openpyxl entfernt diesen Wert beim Speichern; LibreOffice muss dann den Verweis tatsächlich auflösen, schlägt fehl, schreibt #NAME? und löscht jeden Link. recalc.py weigert sich, in diesem Zustand ausgeführt zu werden — kopieren Sie die Werte dieser Zellen aus dem Original, bevor Sie darüber speichern (--force überschreibt und akzeptiert den Verlust).
Auswahl von Formeln, die die Überprüfung überleben
LibreOffice implementiert weniger Funktionen als Excel, und eine, die es nicht auswerten kann, wird zu einem buchstäblichen #NAME?, das in die von Ihnen bereitgestellte Datei eingebrannt ist.
- Bevorzugen Sie Funktionen aus der Excel-2007-Ära —
SUMMEWENNS,INDEX,VERGLEICH,WENNFEHLER,SUMMENPRODUKT— die kein Präfix benötigen. - Sechs Funktionen nach 2007 funktionieren, aber nur mit einem
_xlfn.-Präfix, weil openpyxl Ihre Formel unverändert in das XML schreibt und Excel Namen nach 2007 mit Präfix speichert (seine Benutzeroberfläche verbirgt das Präfix):_xlfn.TEXTJOIN,_xlfn.CONCAT,_xlfn.IFS,_xlfn.SWITCH,_xlfn.MAXIFS,_xlfn.MINIFS. Ohne Präfix ergibt jede#NAME?. - Verwenden Sie niemals
XVERWEIS,XVERGLEICH,SORTIEREN,FILTER,EINDEUTIGoderSEQUENZ. Die Laufzeit-LibreOffice kann sie unter keinem Präfix auswerten. Neuere Builds werten sie zwar aus, aber sie sind übergreifende Array-Funktionen und eine mit openpyxl geschriebene Datei hat keine Übergabe-Metadaten, sodass nur die oberste linke Zelle des Bereichs einen Wert erhält — undrecalc.pymeldettotal_errors: 0für das abgeschnittene Ergebnis. Verwenden SieINDEX/VERGLEICHfür Suchvorgänge und sortieren, filtern und deduplizieren Sie in Python, bevor Sie die Zellen schreiben. - Eine Formel, die LibreOffice nicht parsen konnte, wird in Kleinbuchstaben zurückgeschrieben — ein schneller Hinweis neben einem
#NAME?.
openpyxl-Hinweise
- Das Lesen eines Modells erfordert zwei Ladevorgänge.
data_only=Trueliefert zwischengespeicherte Werte, wobei die Formeln verschwunden sind; die Standardeinstellung liefert Formelzeichenfolgen ohne Werte. Ein Durchlauf kann Ihnen nicht beides geben. data_only=Trueist destruktiv, wenn Sie speichern. Diese Arbeitsmappe hat keine Formeln mehr, sodass das Speichern jede durch einen Literalwert ersetzt — dauerhaft.data_only=Truebei einer Datei, die openpyxl gerade geschrieben hat, gibt überallNonezurück — führen Sie zuerstrecalc.pyaus. (Eine Formel, deren Ergebnis""ist, wird auch alsNonezurückgelesen.)- Zusammengeführte Zellen: Schreiben Sie nur den oberen linken Anker. Jede andere Zelle im Bereich ist eine
MergedCell, deren.valueschreibgeschützt ist. .xlsmverliert seine Makros, wenn Sie nichtkeep_vba=Trueanload_workbookübergeben.- Ein Blattname, der ein Leerzeichen enthält, muss in einem blattübergreifenden Verweis in Anführungszeichen gesetzt werden:
='Annahmen Eingaben'!$B$5. Ohne Anführungszeichen wird es zu#WERT!ausgewertet.
Finanzmodelle
Sofern der Benutzer nichts anderes angibt oder die vorhandene Datei bereits etwas anderes tut.
Farbe: blauer Text (0,0,255) für hartcodierte Eingaben und Szenariohebel · schwarz für Formeln · grün (0,128,0) für Verweise auf ein anderes Blatt · rot (255,0,0) für Verweise auf eine andere Datei · gelbe Füllung (255,255,0) für wichtige Annahmen und Zellen, die der Benutzer ausfüllen soll.
Zahlen: Währung $#,##0, mit der Einheit in der Überschrift (Umsatz ($Mio.)) · Nullen werden als - dargestellt, auch in Prozenten ($#,##0;($#,##0);-) · negative in Klammern · Prozentsätze 0,0%, als Brüche gespeichert (0,15 zeigt 15,0%; das Speichern von 15 zeigt 1500,0%) · Bewertungsmultiplikatoren 0,0x · Jahre als Text ("2024", niemals 2.024).
Struktur: jede Annahme in einer eigenen beschrifteten Zelle, auf die die Formeln verweisen, die sie verwenden (=B5*(1+$B$6), niemals =B5*1,05) · Formeln konsistent über jeden Prognosezeitraum, da eine einzelne bearbeitete Zelle in der Mitte einer Zeile der häufigste stille Fehler ist · Nenner schützen, die Null sein können.
Abhängigkeiten
openpyxl, pandas, markitdown (pip, vorinstalliert — nur installieren, wenn ein Import fehlschlägt oder der Befehl fehlt) · LibreOffice (soffice, automatisch für abgesicherte Umgebungen über skripte/office/soffice.py konfiguriert)
Dieses Skill wird von Anthropic erstellt und gepflegt. Hier unverändert eingebracht, abgesehen von Frontmatter-Metadaten; siehe LICENSE.txt für Bedingungen.