[ruby + excel] SaveAsでの注意点
rubyではwin32oleを使えばエクセルを操作することができます。
SaveAsのところでエラーが出てしまったので、注意点をメモします。
method_missing: (in OLE method 'saveas')(WIN32OLERuntimeError)みたいなエラーでした。
結論
指定したディレクトリに保存する場合
- 絶対パスにする。
- パスの区切りは/ではなく\にする。
require 'win32ole'
app = WIN32OLE.new('Excel.Application')
book = app.workbooks.add
out_path = File.expand_path('test.xlsx').gsub('/', '\\')
book.saveas filename: out_path
book.close savechanges: false
app.quit
SaveAsで指定するパスについて
- 相対パスではエクセルが持っているローカルが基準になります。
- パスの区切り文字は/ではなく\にしてあげます。
- 名前付き引数はシンボルで指定してあげます。
1. エクセルが持っているカレント
rubyでは相対パスが利用できます。
エクセルでも相対パスが使えますが、「カレント」が指す場所はエクセルで設定されているローカルフォルダになります。
オプションの「規定のローカル ファイルの保存場所」に書かれている場所です。
なので、rubyが実行している場所をカレントとするために絶対パスにしてあげます。
out_path = File.expand_path('test.xlsx')
2. パスの区切りは/ではなく\で。
rubyのパスでは、階層の区切りに/(スラッシュ)が使われます。
どうやらこのままでは保存できなかったので区切り文字を(バックスラッシュ)に置き換えます。
out_path = File.expand_path('test.xlsx').gsub('/', '\\')
3. 名前付き引数の指定
名前付き引数はシンボルで指定できます。
VBAでは「:=」を使いますが、下記のように書きます。
workbook.saveas filename: path
なぜできるのかは未検証です。引数をハッシュで渡しているから?
余談
rubyの基本のようですが、
p out_path
では文字列が""で囲まれ、\が\\とエスケープされて表示されます。
(\\じゃなくて、一つにしたい!と、いろいろやって数時間。。)
あくまでもプロンプトの表示の問題で、実際には\はひとつです。
puts out_path
とすればよかったのでした。
ruby初心者のため、間違った記述があるかもしれません。
コメント等でご指摘いただければ幸いです。
Author And Source
この問題について([ruby + excel] SaveAsでの注意点), 我々は、より多くの情報をここで見つけました https://qiita.com/maruvi/items/02970205078c845149f0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .