Подтвердить что ты не робот

Xlsxwriter: есть ли способ открыть существующий рабочий лист в моей книге?

Я могу открыть свою существующую рабочую книгу, но я не вижу возможности открыть ранее созданные рабочие листы в этой книге. Есть ли способ сделать это?

4b9b3361

Ответ 1

Вы не можете добавить к существующему файлу xlsx с xlsxwriter.

Существует модуль под названием openpyxl, который позволяет вам читать и писать в существующий файл excel, но я уверен, что метод для этого включает чтение из файл excel, каким-то образом сохраняя всю информацию (базу данных или массивы), а затем переписывая, когда вы вызываете workbook.close(), который затем записывает всю информацию в ваш xlsx файл.

Аналогично, вы можете использовать собственный метод для добавления в документы xlsx. Недавно мне пришлось добавить файл xlsx, потому что у меня было много разных тестов, в которых у меня были данные GPS, поступающие на основной рабочий лист, а затем мне приходилось добавлять новый лист каждый раз, когда запускался тест. Единственный способ, которым я мог обойти это без openpyxl, - прочитать файл excel с xlrd, а затем запустить строки и столбцы...

то есть.

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

Вам не нужны массивы. Например, это работает отлично:

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

Однако я обнаружил, что читать данные и хранить их в двумерном массиве было легче, потому что я манипулировал данными и получал ввод снова и снова и не хотел писать в файл excel, пока он не будет тест был завершен (что вы так же легко могли бы сделать с xlsxwriter, так как это, вероятно, то, что они делают, пока вы не назовете .close()).