Я могу открыть свою уже существующую книгу, но я не вижу способа открыть уже существующие листы в этой книге. Есть какой-либо способ сделать это?
xlsxwriter: есть ли способ открыть существующий рабочий лист в моей книге?
Ответы (3)
Вы не можете добавить к существующему файлу xlsx xlsxwriter
.
Существует модуль под названием openpyxl, который позволяет вам читать и записывать в уже существующий файл excel, но я уверен, что этот метод включает чтение из файла excel, сохранение всей информации каким-либо образом (база данных или массивы), а затем перезапись при вызове workbook.close()
, который затем запишет всю информацию в ваш файл xlsx.
Точно так же вы можете использовать собственный метод «добавления» к документам xlsx. Недавно мне пришлось добавить в файл xlsx, потому что у меня было много разных тестов, в которых данные GPS поступали на основной рабочий лист, а затем мне приходилось добавлять новый лист каждый раз, когда начинался тест. Единственный способ обойти это без openpyxl — прочитать файл excel с помощью xlrd, а затем просмотреть строки и столбцы. ...
i.e.
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()
).
Немного поискав способ открытия существующего листа в xlxs, я обнаружил
existingWorksheet = wb.get_worksheet_by_name('Your Worksheet name goes here...')
existingWorksheet.write_row(0,0,'xyz')
Теперь вы можете добавлять/записывать любые данные на открытый рабочий лист. Я надеюсь, что это помогает. Спасибо
Вы можете использовать функцию workbook.get_worksheet_by_name(): https://xlsxwriter.readthedocs.io/workbook.html#get_worksheet_by_name
Согласно https://xlsxwriter.readthedocs.io/changes.html, функция была добавлена 13 мая 2016 года.
«Выпуск 0.8.7 — 13 мая 2016 г.
-Исправлена проблема при вставке изображений только для чтения в Windows. Выпуск №352.
-Добавлен метод get_worksheet_by_name(), позволяющий извлекать рабочий лист из рабочей книги по его имени.
-Исправлена проблема, из-за которой даты создания и изменения внутренних файлов указывались в местном часовом поясе, а не в формате UTC.