Невозможно сохранить файл Excel после модификации, используя Ruby & win32ole - PullRequest
4 голосов
/ 20 июля 2011

Используя 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 после всего этого, она остается неизменной. Есть идеи?

1 Ответ

3 голосов
/ 20 июля 2011

Установка свойства Saved объекта Workbook на True не приводит к сохранению книги.Это свойство используется в качестве флага, чтобы показать, есть ли в книге несохраненные изменения.Установка его на True - это простой способ предотвратить появление диалогового окна «Хотите сохранить ...» при закрытии Excel.

Чтобы сохранить рабочую книгу, вам необходим метод SaveWorkbook объект.Этот метод ничего не возвращает, поэтому я предполагаю, что workbook.Save справится (у меня нет опыта работы с Ruby, к сожалению, поэтому я не могу быть уверен на 100%)

...