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?
Odpowiedz
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()
).
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 **. –
@AlexanderHuszagh dzięki! – dylnmc
Niesamowita, doskonała odpowiedź po edycji. +1. –
Biblioteka [xlsxwriter] (https://pypi.python.org/pypi/XlsxWriter) służy do pisania plików excela - nie może ich odczytać. – alecxe
zobaczyć http://stackoverflow.com/questions/18849535/how-to-write-update-data-into-cells-of-existing-xlsx-workbook-using-xlsxwriter-i – shellbye