@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/
Excel-Tabelle mit Python bearbeiten
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 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?
Ich habe es versucht, leider scheint es nicht zu funktionieren, zumindest nicht so: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/
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')
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älenPapageno hat geschrieben: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 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?
@am2: Du musst das Ergebnis natürlich auch speichern, also nicht nur das Attribut `save` abfragen sondern auch *aufrufen* → ``Workbook.save()``
Ich TrottelBlackJack hat geschrieben:@am2: Du musst das Ergebnis natürlich auch speichern, also nicht nur das Attribut `save` abfragen sondern auch *aufrufen* → ``Workbook.save()``
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')
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