2013-08-01 22 views
10

Jestem w stanie otworzyć istniejący skoroszyt, ale nie widzę sposobu, aby otworzyć wcześniej istniejące arkusze w tym skoroszycie. Czy jest jakiś sposób to zrobić?xlsxwriter: czy istnieje sposób na otwarcie istniejącego arkusza roboczego w moim skoroszycie?

+2

Biblioteka [xlsxwriter] (https://pypi.python.org/pypi/XlsxWriter) służy do pisania plików excela - nie może ich odczytać. – alecxe

+1

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

Odpowiedz

15

Nie można dołączyć do istniejącego pliku xlsx za pomocą xlsxwriter.

Istnieje moduł o nazwie openpyxl, który pozwala na odczyt i zapis do istniejącego pliku Excela, ale jestem pewien, że metoda ta polega na odczytaniu z pliku Excela, przechowywaniu wszystkich informacji w jakiś sposób (baza danych lub tablice), a następnie przepisanie po wywołaniu workbook.close(), które następnie zapisze wszystkie informacje do pliku xlsx.

Podobnie, możesz użyć własnej metody do "dołączania" do dokumentów xlsx. Niedawno musiałem dołączyć do pliku xlsx, ponieważ miałem wiele różnych testów, w których dane GPS przychodziły do ​​głównego arkusza roboczego, a następnie musiałem dołączyć nowy arkusz za każdym razem, gdy zaczynał się test. Jedynym sposobem mogę obejść bez openpyxl było odczytać pliku excel z xlrd a następnie uruchomić poprzez wiersze i kolumny ...

tj

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

Nie trzeba tablice, choć. Na przykład to działa perfekcyjnie:

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 

Uważam jednak, że łatwiej było odczytać dane i przechowywać do 2-wymiarowej tablicy bo manipulowanie danych i został kółko otrzymaniu wkładu i nie chciałem pisać do pliku excel, dopóki test się nie skończy (co równie dobrze można zrobić z xlsxwriterem, ponieważ prawdopodobnie tak czynią, dopóki nie zadzwonisz pod numer .close()).

+0

naprawdę wouldn powiedzieć "niezwykle złożoną strukturę". Struktura jest po prostu archiwum zipfile arkuszy, w którym każdy arkusz jest plikiem XML z zawartością komórki. Łatwo jest uzyskać dostęp, czytać i edytować, tylko XlsxWriter zamierza być ** pisarzem **. Nie ** czytnik **. –

+1

@AlexanderHuszagh dzięki! – dylnmc

+0

Niesamowita, doskonała odpowiedź po edycji. +1. –