使用`gets`作为文件路径

时间:2015-10-01 18:36:45

标签: ruby

我正在编写一个脚本来编辑excel文件。我正在测试它是否从用户那里收集信息。

require 'rubygems'
require 'win32ole'

print "filpath?"
$filepath = $stdin.gets

print "sheet?"
$sheetname = $stdin.gets

excel = WIN32OLE.new('Excel.Application')
excel.visible = true
workbook = excel.workbooks.Open($filepath)
worksheet = workbook.Worksheets($sheetname)
worksheet.Cells(2,2).Value = 10
workbook.saved = true 
workbook.Save
excel.ActiveWorkbook.Close(0)
excel.Quit()

当我直接在脚本中放入文件路径时,它可以正常工作。它可以查找excel文件并正常编辑。但是,当我从gets语句中收集它时,它会给出以下错误消息:

test.rb:20:in `method_missing': (in OLE method `Open': ) (WIN32OLERuntimeError)
    OLE error code:800A03EC in Microsoft Excel
      Sorry, we couldn't find C:\filename.xlsx
. Is it possible it was moved, renamed or deleted?
    HRESULT error code:0x80020009
      Exception occurred.
        from test.rb:20:in `<main>'

不确定发生了什么。我很乐意帮忙。

1 个答案:

答案 0 :(得分:4)

当您使用gets收到结束行字符时,它会附加到文件名中,但可能您的文件未命名。在.chomp之后添加gets。在将文件传递给win32ole之前检查文件的存在性和可访问性也更好。