4

http://ruby-doc.org/stdlib/libdoc/win32ole/rdoc/classes/WIN32OLE.htmlをガイドとして使用して、次のように記述しました。

require 'win32ole'
excel = WIN32OLE.new('Excel.Application')
excel.visible = false #Setting this is 'true' doesn't reveal anything
workbook = excel.workbooks.open('C:\myspreadsheet.xlsx')
worksheet = workbook.worksheets('sheet1')
worksheet.Activate

data = worksheet.UsedRange.Value
p data.size #This works! - My spreadsheet has 3987 rows.
p data[3932] #This works, too! - I can "see" row 3932.

worksheet.Rows(3932).Insert #Insert a row above row 3932

data = worksheet.UsedRange.Value
p data.size #Returns 3988! This would seem to indicate that I've successfully added a row since it was just 3987.

workbook.saved = true #Save the workbook and quit.
excel.ActiveWorkbook.Close(0)
excel.Quit()

このすべての後に Excel スプレッドシートを開くと、変更されていません。何か案は?

4

1 に答える 1

3

オブジェクトのSavedプロパティを に設定しても、ブックは保存されません。このプロパティは、ブックに未保存の変更があるかどうかを示すフラグとして使用されます。に設定すると、Excel を閉じたときに [保存しますか...] ダイアログが表示されなくなります。WorkbookTrueTrue

ワークブックを実際に保存するには、オブジェクトのSaveメソッドが必要です。Workbookこのメソッドは何も返さないので、うまくいくworkbook.Saveと思います (残念ながら私は Ruby の経験がないので、100% 確実なことは言えません)。

于 2011-07-20T05:42:49.177 に答える