web-dev-qa-db-ja.com

xlwtを使用して既存のワークブックに書き込む

Xlwtを使用して既存のファイルに書き込む例を見つけることができません。書き込みが必要な既存のxlsファイルがあります。 xlrdを使用してファイルを読み取ると、返された「Book」タイプをxlwt.Workbookに変換する方法がわかりません。誰かが例を示してくれれば幸いです。

56
Raj N

これを行うために最近使用したサンプルコードを次に示します。

ワークブックを開き、行を下に移動します。条件が満たされた場合、行にデータを書き込みます。最後に、変更されたファイルを保存します。

from xlutils.copy import copy # http://pypi.python.org/pypi/xlutils
from xlrd import open_workbook # http://pypi.python.org/pypi/xlrd
from xlwt import easyxf # http://pypi.python.org/pypi/xlwt

START_ROW = 297 # 0 based (subtract 1 from Excel row number)
col_age_november = 1
col_summer1 = 2
col_fall1 = 3

rb = open_workbook(file_path,formatting_info=True)
r_sheet = rb.sheet_by_index(0) # read only copy to introspect the file
wb = copy(rb) # a writable copy (I can't read values out of this, only write to it)
w_sheet = wb.get_sheet(0) # the sheet to write to within the writable copy

for row_index in range(START_ROW, r_sheet.nrows):
    age_nov = r_sheet.cell(row_index, col_age_november).value
    if age_nov == 3:
        #If 3, then Combo I 3-4 year old  for both summer1 and fall1
        w_sheet.write(row_index, col_summer1, 'Combo I 3-4 year old')
        w_sheet.write(row_index, col_fall1, 'Combo I 3-4 year old')

wb.save(file_path + '.out' + os.path.splitext(file_path)[-1])
251
Greg

xlutils.copyが必要です。次のようなものを試してください:

from xlutils.copy import copy
w = copy('book1.xls')
w.get_sheet(0).write(0,0,"foo")
w.save('book2.xls')

この質問 に記載されているように、デフォルトではセルを上書きできないことに注意してください。

20
ktdrv

コード例はまさにこれです:

from xlutils.copy import copy
from xlrd import *
w = copy(open_workbook('book1.xls'))
w.get_sheet(0).write(0,0,"foo")
w.save('book2.xls')

テストするにはbook1.xlsを作成する必要がありますが、アイデアは得られます。

7
Jerry Norbury

同じ問題がありました。顧客が注文したPython 3.4 XSX(XLSXではない)Excelファイルを更新するスクリプト。

最初のパッケージxlrdは、my Python home。

2番目のxlwtは、互換性を保つために「pip install xlwt-future」と言う必要がありました。

3番目のxlutilsはPython 3をサポートしていませんが、少し変更して、少なくともダミースクリプトで動作するようになりました。

#!C:\Python343\python
from xlutils.copy import copy # http://pypi.python.org/pypi/xlutils
from xlrd import open_workbook # http://pypi.python.org/pypi/xlrd
from xlwt import easyxf # http://pypi.python.org/pypi/xlwt

file_path = 'C:\Dev\Test_upd.xls'
rb = open_workbook('C:\Dev\Test.xls',formatting_info=True)
r_sheet = rb.sheet_by_index(0) # read only copy to introspect the file
wb = copy(rb) # a writable copy (I can't read values out of this, only write to it)
w_sheet = wb.get_sheet(0) # the sheet to write to within the writable copy
w_sheet.write(1, 1, 'Value')
wb.save(file_path)

ここにファイルを添付しました: http://ifolder.su/4350758

有効期限が切れた場合は、alexander.samoylov @ gmail.comに書き込みます。

追伸:一部の関数はダミーの例では呼び出されないため、適応が必要になる場合があります。誰がそれをしたいのか、Googleヘルプで例外を1つずつ修正してください。パッケージコードが小さいため、それほど難しいタスクではありません...

2

openpyxl

# -*- coding: utf-8 -*-
import openpyxl
file = 'sample.xlsx'
wb = openpyxl.load_workbook(filename=file)
# Seleciono la Hoja
ws = wb.get_sheet_by_name('Hoja1')
# Valores a Insertar
ws['A3'] = 42
ws['A4'] = 142
# Escribirmos en el Fichero
wb.save(file)
1
marlon