hack のためのネタ帳, etc,,,

参考になるページ等

雛形

#!/usr/bin/env ruby
require 'win32ole'
wso = WIN32OLE.new('WScript.Shell')
["USERPROFILE", "HOMEDRIVE", "HOMEPATH"].each{|k|wso.Environment("Process").setproperty("item", k, (["Process", "Volatile", "User", "System"].map{|t|wso.Environment(t).Item(k)} << ENV[k]).bsearch{|x|x!=""})}

fso = WIN32OLE.new('Scripting.FileSystemObject')
xl  = WIN32OLE.new('Excel.Application')
xl.Visible = true
unless 0 < ARGV.count
  wb = xl.Workbooks.Add()                                  # 新規ワークブック
else
  wb = xl.Workbooks.Open(fso.GetAbsolutePathName(ARGV[0])) # 既存のワークブック
end
p wb
4行目で WSH の WshEnvironment へ 3 つの環境変数(USERPROFILE, HOMEDRIVE, HOMEPATH)を上書きしているが、これを行わない場合、自分の環境では Workbook を開く際に以下のようなエラーが発生してしまう。

2013-09-09 現在以下の環境で行った結果

上記の結果を見ての通り、
ローカルだと xlsx は開けるものの、.Add() や csv, tsv の .Open() が失敗してしまい、
リモートだと .Add(), .Open() がすべて失敗してしまうという状況。
ファイルの置き場所がローカルかリモートかで失敗したとされる原因が微妙に異なっているのも気持ち悪いのだが、
ディスクもメモリもたっぷり余っているし、当該のファイルも開いてない状態なので原因がさっぱりわからない。

とりあえず、参考にしたページから、環境変数に問題がありそうだと当りが付いたので、以下のような感じで調べた。

envcheck.js

実行結果

envcheck.rb

実行結果

あとは、動作に必要な最低限の環境変数がどれか絞り込むという地味な作業。

以下、参考にしたページでは、環境変数 TEMP の設定が原因になっている場合もあるようなので、
TEMP もコピーしておいた方が良いのかもしれないが、うちの環境では TEMP は放置しておいても特に問題なく動いている模様。

参考:

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

編集にはIDが必要です