xlsxwriter: is there a way to open an existing worksheet in my workbook?

匿名 (未验证) 提交于 2019-12-03 02:13:02

问题:

I'm able to open my pre-existing workbook, but I don't see any way to open pre-existing worksheets within that workbook. Is there any way to do this?

回答1:

You cannot append to an existing xlsx file with xlsxwriter.

There is a module called openpyxl which allows you to read and write to preexisting excel file, but I am sure that the method to do so involves reading from the excel file, storing all the information somehow (database or arrays), and then rewriting when you call workbook.close() which will then write all of the information to your xlsx file.

Similarly, you can use a method of your own to "append" to xlsx documents. I recently had to append to a xlsx file because I had a lot of different tests in which I had GPS data coming in to a main worksheet, and then I had to append a new sheet each time a test started as well. The only way I could get around this without openpyxl was to read the excel file with xlrd and then run through the rows and columns...

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) 

You don't need arrays, though. For example, this works perfectly fine:

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 

However, I found that it was easier to read the data and store into a 2-dimensional array because I was manipulating the data and was receiving input over and over again and did not want to write to the excel file until it the test was over (which you could just as easily do with xlsxwriter since that is probably what they do anyway until you call .close()).



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!