Anpassung des Original-Jahresabschlusses (Format & Abstimmung erhalten)
Auslösebedingungen
- Der Nutzer sendet einen bestehenden Jahresabschluss (Bilanz/Gewinn- und Verlustrechnung/Kapitalflussrechnung, meist altes .xls-Format) mit der Anforderung, „bestimmte Zahlen in Zielwerte zu ändern, andere Daten passen sich an“.
- Explizite Vorgabe: „Änderungen auf dem Original vornehmen“, „Format/Layout/andere Blätter unverändert lassen“.
- Betrifft konsistente Anpassungen von Bilanzgewinn, Gesamtergebnis, Jahresüberschuss usw.
Nutzerpflichten (Eiserne Regeln)
- Niemals eine neue Tabelle auf Basis der alten erstellen – Änderungen direkt im Original vornehmen; Format/Layout/andere Blätter bleiben völlig unverändert.
- Nur die Zahlenzellen ändern, die geändert werden müssen – alle anderen unberührt lassen.
- Nach der Änderung muss die Konsistenz der drei Berichte gewährleistet sein:
Summe Aktiva = Summe Passiva + EigenkapitalEndbestand Bilanzgewinn − Anfangsbestand Bilanzgewinn = Kumuliertes GesamtergebnisJahresüberschuss = Gesamtergebnis − Ertragsteuern
- Vor Auslieferung muss die Bilanzgleichung programmatisch verifiziert werden – keine manuelle Prüfung.
Technologieauswahl (je nach Umgebung)
Option A: Excel COM (Windows + Office, 100 % originalgetreu)
Geeignet für alte .xls-Formate, komplexe Tabellen mit verbundenen Zellen/Rahmen/Formeln:
import win32com.client, shutil
SRC, OUT = 'Original.xls', 'Angepasst.xls'
shutil.copy2(SRC, OUT) # Original nicht anrühren
excel = win32com.client.Dispatch('Excel.Application')
excel.Visible = False; excel.DisplayAlerts = False
try:
wb = excel.Workbooks.Open(OUT)
ws = wb.Sheets('Bilanz')
ws.Cells(Zeile, Spalte).Value = Zielwert # nur Zielzelle ändern
wb.Application.Calculate(); wb.Save(); wb.Close(True)
finally:
excel.Quit()
Option B: openpyxl (plattformunabhängig, .xlsx)
Formate bleiben erhalten, aber bei Formeln ist Vorsicht geboten – openpyxl liest keine Formelergebnisse (nur zwischengespeicherte Werte). Wenn eine Zelle eine Formel enthält, muss die Formel beibehalten werden, nicht überschrieben:
import openpyxl
wb = openpyxl.load_workbook(OUT) # Achtung: Formeln mit data_only=False lesen
ws = wb['Bilanz']
ws.cell(Zeile, Spalte).value = Zielwert
wb.save(OUT)
Option C: xlrd lesen + Option A/B schreiben
Alte .xls-Dateien zunächst mit xlrd scannen und lokalisieren (nur lesen), die eigentliche Änderung erfolgt über COM oder Konvertierung nach .xlsx.
Tödliche Falle: Erst scannen und lokalisieren, nicht raten bei Zeilen-/Spaltennummern
Alte Jahresabschlüsse haben oft ein zweispaltiges Layout (links/rechts), die Postenpositionen sind nicht intuitiv:
- Bilanz: Aktiva links (Spalten A–D), Passiva + Eigenkapital rechts (Spalten E–H). Der Posten „Bilanzgewinn“ steht rechts in Spalte E, die Zahlenwerte in G/H – nicht links in C/D!
- 0-indiziert (xlrd) vs. 1-indiziert (COM/openpyxl, die meisten APIs) führt zu falschen Zellenänderungen.
- Richtiges Vorgehen: Zuerst den Postenname scannen und die Zeile lokalisieren, dann die Zielspalte ändern:
for r in range(1, 60):
label = str(ws.Cells(r, 1).Value or '') + str(ws.Cells(r, 5).Value or '')
if 'Bilanzgewinn' in label:
ws.Cells(r, 7).Value = EndbestandZiel # rechte Spalte G
ws.Cells(r, 8).Value = AnfangsbestandZiel # rechte Spalte H
break
Abstimmungslogik (am Beispiel „Bilanzgewinn anpassen“, verifiziert)
Ziel: Endbestand Bilanzgewinn = X, Anfangsbestand Bilanzgewinn = Y.
Anpassungsschritte:
- Bilanzgewinn (rechte Spalte) auf Zielwerte setzen.
- Auf der Aktivseite „Sonstige Forderungen“ um den gleichen Betrag gegenläufig anpassen, um das Gleichgewicht zu halten – wenn das Eigenkapital sich ändert, die Aktiva aber unverändert bleiben, geraten die Passiva aus dem Gleichgewicht:
- Sonstige Forderungen Endbestand += (Neuer Endbestand Bilanzgewinn − Alter Endbestand Bilanzgewinn)
- Sonstige Forderungen Anfangsbestand += (Neuer Anfangsbestand Bilanzgewinn − Alter Anfangsbestand Bilanzgewinn)
- Summe Umlaufvermögen, Summe Aktiva (linke Spalte) auf die angepassten Werte setzen.
- Summe Eigenkapital, Summe Passiva + Eigenkapital (rechte Spalte) auf die angepassten Werte setzen.
- GuV: Umsatzerlöse kumuliert += (Ziel kumuliertes Gesamtergebnis − Altes kumuliertes Gesamtergebnis); Betriebsergebnis/Gesamtergebnis/Jahresüberschuss folgen nach.
- Kapitalflussrechnung bleibt in der Regel unverändert (keine tatsächlichen Zahlungsströme durch erfolgswirksame Anpassungen).
⚠️ Summenzeilen haben möglicherweise keine Formeln (nur Werte) – überprüfen Sie .Formula: Wenn eine Zahl zurückgegeben wird (kein =SUM(...)), muss die Summenzeile manuell auf den angepassten Wert gesetzt werden; das Ändern der Detailposten führt nicht automatisch zu einer Aktualisierung.
Verifikation (vor Auslieferung zwingend; programmatisch)
# Rückverifizierung (gleicher Engine wie beim Schreiben)
assert abs(SummeAktiva − (Passiva + Eigenkapital)) < 0.01
assert abs(Kumuliertes Gesamtergebnis − (Endbestand Bilanzgewinn − Anfangsbestand Bilanzgewinn)) < 0.01
assert abs(Gesamtergebnis aktuell − Ziel) < 0.01
print('✓ Konsistenz der drei Berichte verifiziert')
Qualitätscheck
- Wurde im Original geändert (nicht neu erstellt)? Bleibt das Format originalgetreu?
- Wurden nur die zu ändernden Zellen bearbeitet?
- Wurde die Konsistenz der drei Berichte programmatisch verifiziert?
- Gibt es ein Backup des Originals?
Compliance-Hinweis
Wenn der angepasste Abschluss für Kredite, Steuern, Prüfungen oder andere externe Zwecke verwendet wird, müssen die Änderungen durch echte Buchungsbelege gestützt werden; eine rein interne Nutzung ist unbedenklich. Falls der Nutzer die Absicht erkennen lässt, den angepassten Abschluss für betrügerische Zwecke zu verwenden, sollte auf die Compliance-Risiken hingewiesen und die Mithilfe bei Fälschungen verweigert werden.
🙋 Über den Autor
Jiupinjinlie | Habe die erlebten Fallstricke in eine „sofort einsatzbereite“ Skill verpackt – kein Lehrbuch. Diese Skill ist die Version, die ich täglich selbst verwende.
WeChat: ly5419495 (Bei Kontaktaufnahme bitte „SkillHub“ vermerken – ich priorisiere diese Nachrichten) Öffentlicher Account: chuwuAgent (in WeChat suchen – alle Retrospektiven und Methoden sind dort; auch ohne WeChat-Kontakt lesbar)
Weitere Tools, die ich erstellt habe und die direkt ausgeführt werden können, finden Sie in diesem Regal (URL in den Browser kopieren):
https://skillpay.alipay.com/public/jiupinjinlie
Wenn Sie bei der Nutzung auf Probleme stoßen oder andere Szenarien als Skill verpackt haben möchten, kontaktieren Sie mich über einen der oben genannten Wege.
