Seite 1 von 1
Excel-Tabelle mit Python bearbeiten
Verfasst: Freitag 23. Januar 2015, 11:58
von Galunder13
Hallo Leute,
ich möchte mit Python, lediglich eine bereits bestehende EXCEL-Tabelle erweitern. Nun finde ich leider keine gescheiten Ansätze. Mit xlwt scheint's mir so als könnte man dadurch nur neue EXCEL-Tabellen erstellen, aber keine bereits vorhandene Tabelle erweitern. Wen jemand bitte Lösungsansätze hat, ich wäre sehr dankbar!
Gruß
Galunder13
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Freitag 23. Januar 2015, 12:26
von sparrow
Das ist schon ein paar Tage her, dass ich mich damit beschäftigt habe, aber soweit ich mich erinnere wird immer eine neue Excel-Tabelle erstellt, wenn du sie bearbeiten willst.
Du müsstest also die bestehende Tabelle lesen, dann die neue Tabelle anlegen, die alten Daten hinein schreiben und die neuen Anhängen.
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Freitag 23. Januar 2015, 13:02
von pillmuncher
@Galunder13: Unter Windows kannst du Excel mit win32com fernsteuern.
https://www.google.de/search?q=win32com+python+excel
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Sonntag 25. Januar 2015, 12:18
von Papageno
@Galunder13: Mit dem habe ich innerhalb kürzester Zeit alle meine Excel Fragen gelöst:
http://www.python-excel.org/
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Montag 17. August 2015, 17:38
von am2
Papageno hat geschrieben:@Galunder13: Mit dem habe ich innerhalb kürzester Zeit alle meine Excel Fragen gelöst:
http://www.python-excel.org/
Und wie hast Du dieses Problem genau gelöst?
Also eine Excel- Datei, von der Du nur weißt, dass es z.B. ein Tabellenblatt XY gibt, dass du modifizieren willst (Beispiel: Spalte 3 = Spalte 1 + Spalte 2).
Darüber hinaus kann es andere Tabellenblätter geben mit Formatierungen, Rechten, VBA- Code etc.
Wie kann man eine solche Excel- Tabelle mit python (ohne Fernsteuerung) bearbeiten?
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Montag 17. August 2015, 19:34
von Papageno
Da sind doch jede Menge Beispiele in dem genannten Link vorhanden.
Ganz grob:
öffnen:
Code: Alles auswählen
import xlrd
import xlwt
book = xlrd.open_workbook(filename)
print("Worksheet name(s):", book.sheet_names())
sh = book.sheet_by_index(0)
print( sh.name, sh.nrows, sh.ncols)
Auslesen der Zellen dann mit sh.cell_value(rownummer,colnummer)
Speichern geht irgendwie umgekehrt, das habe ich noch nicht gemacht
Am besten schaust du dir die Doku an, ist gar nicht wild.
Viel Erfolg
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Dienstag 18. August 2015, 08:17
von am2
Ich hatte das damals erfolglos versucht (sowohl die Beispiele als auch die Doku).
xlrd liest (und man kann dorthin nie wieder schreiben)
xlwt schreibt eine neue Datei (man kann nicht in eine vorhandene etwas einfügen)
Wenn ich eine mir unbekannte Datei habe, die gespickt ist mit VBA- Scripten, bedingten Formatierungen, Diagrammen, in die ich irgendein Tabellenblatt einfügen will, ohe den Rest zu manipulieren, dann bin ich erschossen.
Ich benötige irgendetwas in der folgenden Form (pseudo)
Code: Alles auswählen
Workbook = ÖffneDatei(NameDerDatei)
Zaehler = 0
wiederhole
Zaehler += 1
IstFrei = FindeTabellenblatt (MeinName+Zaehler) == None
bis IstFrei == True
Tabellenblatt = ErzeugeTabellenblatt(MeinName + Zaehler)
FuelleTabellenblatt (Tabellenblatt)
SpeichereDatei(WorkBook)
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Dienstag 18. August 2015, 09:13
von sparrow
Ich habe das so gemacht, dass ich in der Excel-Tabelle ein Quellblatt habe, aus dem ich alle Werte in Excel ziehe.
Das Quellblatt lese ich mit Python aus, manipuliere es nach belieben und schreibe es in eine neue Excel-Datei.
Von da kopiere ich den Kram in Excel von der geschriebenen in die Quelltabelle, oder verknüpfe die direkt auf die andere Datei.
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Dienstag 18. August 2015, 10:39
von am2
Na ja, aber das löst mein Problem ja letztlich nicht.
Der Anfang würde genauso laufen, ich lese ein Blatt aus einer Exceltabelle. Aber ich kann es eben nicht in eine neue Datei schreiben, sondern ich muss die Originaltabelle modifizieren.
Ich muss für meinen Häuptling ein tool schreiben, das auch mit wenig EDV- Kenntnissen das liefert, was er erwartet.
Also Exceltabelle auf, Tabellenblatt ausfüllen, eine exe starten und das Ergebnis in der selben Excel- Tabelle wiederfinden.
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Dienstag 18. August 2015, 10:46
von sparrow
Warum schreibst du den Kram dann nicht einfach in VisualBasic? Oder wie dieser Makrokram rund um Microsoft Office heißt.
Alternativ kannst du LibreOffice nehmen. Wenn ich das richtig verstanden habe kann das sogar Makros in Python.
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Dienstag 18. August 2015, 11:22
von am2
Weil ich keinen Einfluss auf die Datei haben will/darf/soll etc, ich soll sie nur ergänzen. Sie geht mich nichts an, ich bekomme sie nie zu Gesicht. Ich muss nur ein Tool schreiben, dass auf Knopfdruck diese Datei an den vereinbarten Stellen füllt.
Ich weiß, dass ich theoretisch beim Öffnen der Datei auch alles mögliche andere herausziehen und irgendwohin schicken kann. Aber zum Einen wird mir vertraut, dass ich eben das nicht tue, zum anderen ist ja der Quelltext bekannt. Aber die betroffenen Excel- Dateien entstehen ohne mein Zutun lange nach meinem Script.
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Dienstag 18. August 2015, 11:36
von ngulam
sparrow hat geschrieben:LibreOffice nehmen
.. .und Apache OpenOffice.
Da gibt es eine Anbindung für Python zur API.
Für "Office"-Kram mache ich das lieber in OO/LO direkt, anstelle die xlrd/xlwt Module zu nutzen.
Die Python-Skripte können von der Office-Installation aus gestartet werden, oder das Office von der Kommandozeile fernsteuern.
Fragen? Fragen!
@am2: Warum nicht in eine neue Datei schreiben, die alte sichern, die Neue dann unter "altem Namen" speichern?
Edit: sehe gerade Dein Posting... ist dann echt schwer.
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Dienstag 18. August 2015, 11:40
von sparrow
Naja, die Aufgabenstellung schreit halt danach durch Makros in Office gelöst zu werden

Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Dienstag 18. August 2015, 19:51
von Sirius3
@Galunder13: erzähl doch ein bißchen mehr, was Du machen willst. Die COM-Schnittstelle von Excel aus Python heraus anzuprechen, ist doch das einfachste. Wenn es nur darum geht, den Inhalt bestimmter Zellen zu ändern, kann man über Python auch direkt XML lesen und schreiben.
Es gibt auch .net und java-Bibliotheken, die deutlich mehr können, wenn also Iron- oder Jython eine Alternative sind...
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Mittwoch 19. August 2015, 10:07
von am2
Ich fürchte, Galunder13 ist nicht mehr Teilnehmer der Diskussion.
Muss ich aus dem Fehlen geeigneter Antworten folgern, dass es keine Möglichkeit gibt, eine Excel- Tabelle ohne Zuhilfenahme von Excel selbst allein mit den Mitteln von Python zu modifizieren?
Ich kann also entweder Lesen ODER schreiben, aber nicht etwas laden, verändern und speichern?
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Mittwoch 19. August 2015, 10:28
von BlackJack
@am2: Du kannst schon etwas laden, verändern, und speicher, bzw. Filter schreiben die zwischen laden und speichern die Daten verändern/erweitern, die Frage ist allerdings ob dabei wirklich alles aus der Ursprungsdatei diesen Vorgang überlebt. Excel-Dateien sind ein relativ komplexes Format das entweder geschlossen ist (ältere Versionen), oder offen spezifiziert, aber dafür wirklich sehr komplex (XML-basierte Versionen). Selbst verschiedene Excel-Versionen können sehr aufwändige Dokumente kaputtmachen oder zumindest nicht 1:1 wieder speichern wenn man Pech hat.
Falls es die neuen XML-basierten Formate von Excel sein dürfen, könntest Du auch mal einen Blick auf OpenPyxl werfen:
http://openpyxl.readthedocs.org/en/latest/
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Mittwoch 19. August 2015, 12:14
von Papageno
am2 hat geschrieben:
Muss ich aus dem Fehlen geeigneter Antworten folgern, dass es keine Möglichkeit gibt, eine Excel- Tabelle ohne Zuhilfenahme von Excel selbst allein mit den Mitteln von Python zu modifizieren?
Ich kann also entweder Lesen ODER schreiben, aber nicht etwas laden, verändern und speichern?
Benutze die
win32com Schnittstelle. Das greift direkt auf die installierte MS Office Version zu und kann die Orginaldateien bearbeiten. Beispiele findest du in anspruchsvollen englischsprachigen Foren.
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Mittwoch 19. August 2015, 14:49
von am2
BlackJack hat geschrieben:@am2: Du kannst schon etwas laden, verändern, und speicher, bzw. Filter schreiben die zwischen laden und speichern die Daten verändern/erweitern, die Frage ist allerdings ob dabei wirklich alles aus der Ursprungsdatei diesen Vorgang überlebt. Excel-Dateien sind ein relativ komplexes Format das entweder geschlossen ist (ältere Versionen), oder offen spezifiziert, aber dafür wirklich sehr komplex (XML-basierte Versionen). Selbst verschiedene Excel-Versionen können sehr aufwändige Dokumente kaputtmachen oder zumindest nicht 1:1 wieder speichern wenn man Pech hat.
Falls es die neuen XML-basierten Formate von Excel sein dürfen, könntest Du auch mal einen Blick auf OpenPyxl werfen:
http://openpyxl.readthedocs.org/en/latest/
Ich habe es versucht, leider scheint es nicht zu funktionieren, zumindest nicht so:
Code: Alles auswählen
from openpyxl import Workbook,load_workbook
def TryWrite(FileName,SheetName):
WorkBook = load_workbook(FileName, read_only = False)
WorkSheet = WorkBook[SheetName]
Content = WorkSheet['A1'].value
print Content
WorkSheet['A1'] = Content + 1
WorkBook.save
TryWrite('Test.xlsx','Test')
TryWrite('Test.xlsx','Test')
TryWrite('Test.xlsx','Test')
In A1 verändert sich der Wert überhaupt nicht.
Papageno hat geschrieben:am2 hat geschrieben:
Muss ich aus dem Fehlen geeigneter Antworten folgern, dass es keine Möglichkeit gibt, eine Excel- Tabelle ohne Zuhilfenahme von Excel selbst allein mit den Mitteln von Python zu modifizieren?
Ich kann also entweder Lesen ODER schreiben, aber nicht etwas laden, verändern und speichern?
Benutze die
win32com Schnittstelle. Das greift direkt auf die installierte MS Office Version zu und kann die Orginaldateien bearbeiten. Beispiele findest du in anspruchsvollen englischsprachigen Foren.
Das ist ja dann wohl NICHT ohne Zuhilfenahme von Excel. Ich will nicht die Anwendung (oder Teile davon) fernsteuern, sondern eine vorhandene Datei ausschließlich mit python modifizieren. Anderenfalls klappt das weder unter Linux, noch unter Android oder auf einem Windows- Rechner ohne Office etc. Wenn ich eine Anwendung fernsteuern will, dann kann ich auch andere Wege gehen, als mich durch python zu quälen

Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Mittwoch 19. August 2015, 15:13
von BlackJack
@am2: Du musst das Ergebnis natürlich auch speichern, also nicht nur das Attribut `save` abfragen sondern auch *aufrufen* → ``Workbook.save()``
Re: Excel-Tabelle mit Python bearbeiten
Verfasst: Mittwoch 19. August 2015, 16:15
von am2
BlackJack hat geschrieben:@am2: Du musst das Ergebnis natürlich auch speichern, also nicht nur das Attribut `save` abfragen sondern auch *aufrufen* → ``Workbook.save()``
Ich Trottel

Leider kann ich nicht diese Datei direkt speichern, sondern muss sie unter einem neuen Namen speichern.
Code: Alles auswählen
from openpyxl import Workbook,load_workbook
def TryWrite(FileName, FileNameSave, SheetName):
WorkBook = load_workbook(FileName, read_only = False)
WorkSheet = WorkBook[SheetName]
Content = WorkSheet['A1'].value
print Content
WorkSheet['A1'] = Content + 1
WorkBook.save(FileNameSave)
TryWrite('Test.xlsx','Test2.xlsx','Test')
TryWrite('Test2.xlsx','Test3.xlsx','Test')
TryWrite('Test3.xlsx','Test2.xlsx','Test')
TryWrite('Test2.xlsx','Test3.xlsx','Test')
TryWrite('Test3.xlsx','Test2.xlsx','Test')
Aber das lässt sich im Grunde in den Griff bekommen.
Meine aktuelle Beobachtung:
- weitere Tabellenblätter werden mit Inhalt geladen
- Zum Inhalt zählen
-- übliche Zellinhalte (Text, Zahlen, Formeln)
-- bedingte Formatierungen
- nicht funktionert
-- Pivottabelle (wird nur als Datentabelle kopiert)
-- Shapes (verschwinden)
-- Diagramme (verschwinden)
Also noch nicht alles so, wie man sich das wünschen würde, aber immerhin eine gute Lösung
Vielen Dank