web-dev-qa-db-ja.com

xlsxwriter:ブック内の既存のワークシートを開く方法はありますか?

既存のワークブックを開くことはできますが、そのワークブック内で既存のワークシートを開く方法がありません。これを行う方法はありますか?

20
Nick

xlsxwriterを使用して既存のxlsxファイルに追加することはできません。

openpyxl というモジュールがあります。これにより、既存のExcelファイルの読み取りと書き込みが可能になりますが、その方法にはExcelファイルからの読み取り、すべての情報の保存(データベースまたは配列)、workbook.close()を呼び出すときに書き換えます。これにより、xlsxファイルにすべての情報が書き込まれます。

同様に、独自のメソッドを使用して、xlsxドキュメントに「追加」できます。メインのワークシートにGPSデータを入力するさまざまなテストがあったため、最近xlsxファイルに追加する必要があり、テストが開始されるたびに新しいシートを追加する必要がありました。 openpyxlなしでこれを回避できる唯一の方法は、 xlrd でExcelファイルを読み取り、行と列を実行することでした...

つまり.

_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ファイルに書き込みたくないため、データを読み取って2次元配列に保存する方が簡単であることがわかりました(これはおそらく.close()を呼び出すまで、とにかく彼らがすることなので、xlsxwriterでも簡単にできます。).

25
dylnmc

Xlxsで既存のシートを開く方法について少し検索した後、私は発見しました

existingWorksheet = wb.get_worksheet_by_name('Your Worksheet name goes here...')
existingWorksheet.write_row(0,0,'xyz')

これで、開いているワークシートにデータを追加/書き込むことができます。役に立てば幸いです。ありがとう

1