Excel-Tabelle mit Python bearbeiten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
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/
Papageno
User
Beiträge: 33
Registriert: Sonntag 21. Dezember 2014, 10:53

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.
am2
User
Beiträge: 17
Registriert: Montag 8. September 2014, 09:57

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 ;)
BlackJack

@am2: Du musst das Ergebnis natürlich auch speichern, also nicht nur das Attribut `save` abfragen sondern auch *aufrufen* → ``Workbook.save()``
am2
User
Beiträge: 17
Registriert: Montag 8. September 2014, 09:57

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
Antworten