0

ファイルをフォルダから に挿入するスクリプトを作成していますが、Excel columns間違っているようです。誰でも同じことで私を助けることができますか?

更新された Ruby コード:

require 'fileutils'
require 'win32ole'

#Excel Application will be started from here.
#--------------------------------------------

    excel = WIN32OLE.new('Excel.Application')
    excel.visible = true
    wb=excel.workbooks.open("E:\\WIPData\\Ruby\\Scripts\\Copy of GSL_File_DownLoad1.xlsx")
    wbs= wb.Worksheets(1)
    rows=2
    column=2

        until wbs.cells(rows,1).value == nil do


            Dir.entries("E:\\WIPData\\Ruby").each do |f|

                if f == wbs.cells(rows,1).value then

                  files_dir = File.expand_path("..", Dir.pwd)
                  column=2
                  Dir.foreach(files_dir.concat("/" + f)) do |x| 

                    full_path=files_dir.concat("/" + x)
                    wbs.cells(rows,column).Select
                    wbs.oleobjects.add({ 
                                            'Filename'      => full_path,
                                            'Link'          => true,
                                            'DisplayAsIcon' => false,
                                      })
                    column = column + 1

                  end

                    break
                end 

            end

        end

    wb.Save
    wb.Close(0)
    excel.Quit()

#Excel Application will be finished here.
#------------

エラー:

E:/WIPData/Ruby/Scripts/test.rb:27:in `method_missing': (in OLE method `add': )
(WIN32OLERuntimeError)
    OLE error code:800A03EC in Microsoft Excel
      Cannot insert object.
    HRESULT error code:0x80020009
      Exception occurred.
        from E:/WIPData/Ruby/Scripts/test.rb:27:in `block (2 levels) in <main>'
        from E:/WIPData/Ruby/Scripts/test.rb:23:in `foreach'
        from E:/WIPData/Ruby/Scripts/test.rb:23:in `block in <main>'
        from E:/WIPData/Ruby/Scripts/test.rb:17:in `each'
        from E:/WIPData/Ruby/Scripts/test.rb:17:in `<main>'
4

1 に答える 1

1

問題はコードの 25 行目にあります。wbs.OLEObjects.Add(,full_path,False,True,,,f)問題を引き起こしているのはメソッドです。

VBA では、メソッドのパラメーターが必要ない場合は、パラメーターを空白のままにしてもまったく問題ありません。ただし、これは Ruby では使用できません。

元のマクロでは、キーワード引数をメソッドに渡しました。Ruby でこれを行う 1 つの方法は、Hash. Ruby on Windowsブログの記事では、次のようにすることを提案しています。

wbs.oleobjects.add({
    'Filename'      => full_path,
    'Link'          => false,
    'DisplayAsIcon' => true,
    'IconIndex'     => 0,
    'IconLabel'     => f,
    'IconFileName'  => icon_path
})

Ruby コードでアイコン パスを提供しているのを見たことがないので、その最終的な変数を仮定しています。

trueまた、 andfalseは小文字であることに注意してください。大文字のバージョンは、Ruby によって定数またはクラスとして読み取られます。

Ruby を使用して Microsoft Office で作業している場合は、Ruby on Windows を頻繁に使用することを強くお勧めします。著者はもう投稿していないようですが、それでも関連する情報源です。

編集:

あなたの新しいエラーはおそらくDir.entries. このメソッドは、エントリをプルするときにグラブ.します。..これら2つをワークシートに追加しようとすると、Excelがつまずいていると思います。

これを取り除くには2つの方法があります。each1) あなたのブロックでそれらをスキップします。

Dir.entries("E:\\WIPData\\Ruby").each do |f|
    next if ['.', '..'].include? f
    # The rest of your block code
end

2)Dir#glob返還されない使用.及び..

Dir.chdir("E:\\WIPData\\Ruby")
Dir.glob('*').each do |f|
    # Your block code
end

編集:

ドキュメンテーションのために、このトピックはRuby Forumsでも議論されています。

于 2013-01-28T13:51:57.553 に答える