2013-08-01 2 views
10

Ich kann meine bereits vorhandene Arbeitsmappe öffnen, aber ich sehe keine Möglichkeit, bereits vorhandene Arbeitsblätter in dieser Arbeitsmappe zu öffnen. Gibt es eine Möglichkeit, dies zu tun?xlsxwriter: Gibt es eine Möglichkeit, ein vorhandenes Arbeitsblatt in meiner Arbeitsmappe zu öffnen?

+2

[xlsxwriter] (https://pypi.python.org/pypi/XlsxWriter) Bibliothek ist zum Schreiben von Excel-Dateien - es kann sie nicht lesen. – alecxe

+1

sehen diese http://stackoverflow.com/questions/18849535/how-to-write-update-data-into-cells-of-existing-xlsx-workbook-using-xlsxwriter-i – shellbye

Antwort

15

Sie können keine an eine vorhandene xlsx-Datei mit xlsxwriter anhängen.

Es gibt ein Modul mit der Bezeichnung openpyxl, mit dem Sie Excel-Dateien lesen und schreiben können, aber ich bin mir sicher, dass die Methode das Auslesen aus der Excel-Datei erfordert und alle Informationen (Datenbank oder Arrays) speichert. und dann umschreiben, wenn Sie workbook.close() aufrufen, die dann alle Informationen in Ihre xlsx-Datei schreiben wird.

In ähnlicher Weise können Sie eine eigene Methode verwenden, um xlsx-Dokumente zu "anhängen". Ich musste vor kurzem an eine xlsx-Datei anhängen, da ich viele verschiedene Tests hatte, bei denen ich GPS-Daten in ein Hauptarbeitsblatt eingab, und dann jedes Mal, wenn ein Test gestartet wurde, ein neues Blatt anhängen musste. Der einzige Weg, ich um dieses ohne openpyxl bekommen konnte, war die Excel-Datei mit xlrd und führen Sie durch die Reihen und Spalten zu lesen ...

heißt

cells = [] 
for row in range(sheet.nrows): 
    cells.append([]) 
    for col in range(sheet.ncols): 
     cells[row].append(workbook.cell(row, col).value) 

Sie haben keine Arrays benötigen, though. Zum Beispiel funktioniert die völlig in Ordnung:

import xlrd 
import xlsxwriter 

from os.path import expanduser 
home = expanduser("~") 

# this writes test data to an excel file 
wb = xlsxwriter.Workbook("{}/Desktop/test.xlsx".format(home)) 
sheet1 = wb.add_worksheet() 
for row in range(10): 
    for col in range(20): 
     sheet1.write(row, col, "test ({}, {})".format(row, col)) 
wb.close() 

# open the file for reading 
wbRD = xlrd.open_workbook("{}/Desktop/test.xlsx".format(home)) 
sheets = wbRD.sheets() 

# open the same file for writing (just don't write yet) 
wb = xlsxwriter.Workbook("{}/Desktop/test.xlsx".format(home)) 

# run through the sheets and store sheets in workbook 
# this still doesn't write to the file yet 
for sheet in sheets: # write data from old file 
    newSheet = wb.add_worksheet(sheet.name) 
    for row in range(sheet.nrows): 
     for col in range(sheet.ncols): 
      newSheet.write(row, col, sheet.cell(row, col).value) 

for row in range(10, 20): # write NEW data 
    for col in range(20): 
     newSheet.write(row, col, "test ({}, {})".format(row, col)) 
wb.close() # THIS writes 

Allerdings fand ich, dass es leichter war, die Daten und speichert in einen 2-dimensionalen Array zu lesen, weil ich die Daten manipuliert und empfange Eingang immer und immer wieder und wollte nicht in die Excel-Datei schreiben, bis der Test zu Ende war (was Sie genauso gut mit xlsxwriter tun könnten, da dies wahrscheinlich so ist, bis Sie .close() aufrufen).

+0

I wouldn wirklich sage nicht "extrem komplexe Struktur". Die Struktur ist nur ein Zipfile-Archiv von Blättern, in denen jedes Blatt eine XML-Datei mit dem Zellinhalt ist. Es ist ziemlich einfach zu erreichen, lesen und bearbeiten, nur XlsxWriter beabsichtigt, ein ** Schriftsteller **. Kein ** Leser **. –

+1

@AlexanderHuszagh danke! – dylnmc

+0

Super, eine ausgezeichnete Antwort jetzt nach den Änderungen. +1. –

Verwandte Themen