
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
お礼コメントを読んで既に解決済みだと思っておりました。
久しぶりにチェックしたら補足が追加されていたので、もう遅いかも知れませんが少し書き足します。> 教えていただいたスクリプトでは、読み込み専用で開かれます。
とのことですが、私のほうではこのような現象は発生しません。値を書き込んだ後、"book.save"とすれば普通に上書き保存されます。
ところで、「読み込み専用で開かれる」ということはどのように確認されたのでしょう?メッセージボックスでも表示されたんでしょうか。試しにoletest.xlsのプロパティで「読み取り専用」にチェックしてやってみたんですが、そのようなメッセージは出ませんでした("ファイルを置き換えますか"というメッセージは出た)。
ということで、現象が再現できないので今のところは原因を探ることもできません。実行環境の違いとか、ファイルの状態(内容やステータス)の違いが関係しているのかもしれません。もしまだ未解決なら、実行環境とかファイルの状態を補足していただければアドバイスできるかもしれないです。
ちなみに私のほうの環境は次のようになります。
OS: Windows 2000
Ruby: ruby 1.8.3 (2005-09-21) [i386-mswin32]
Win32OLE: 上記Ruby標準添付のもの
Excelファイルはスクリプトと同じ場所に置いてあります。内容はSheet1のA1:C3に1~9の数値を入れただけです。それ以外のこと(計算式を入れるとか、セルの書式を変えるとか)は何もしてません。
ご回答ありがとうございました。
書き込みをした後、あれこれとやってみて、ターゲットのファイルを一時的な名前にリネームし、Excelで処理したあとオリジナルのファイル名で保存することが対処しました。
No.2
- 回答日時:
#1です。
すみません、スクリプトにごみが残ってました。下の2行はいりません。> def getAbsolutePath(filename)
> end
あと、次の行で指定しているセル番地が違ってました。データ範囲をいくつか変えて実験していたのでそのままになってました。質問文に合わせるならA2ではなくA1です。
> cell = sheet.range("A2").End(ExcelConst::XlDown)
No.1
- 回答日時:
WIN32OLEを使ってなかったんですがちょっと試してみました。
とりあえず、const_loadメソッドでExcelの定数を読み込まないといけないみたいです。やってますか?やってるとしたら今回の回答は的外れになりますがご容赦ください。以下がそのスクリプトです。
# oletest.rb
require 'win32ole'
def getAbsolutePath(filename)
end
xl = WIN32OLE.new('Excel.Application')
# Excelの定数を読み込む
module ExcelConst end
WIN32OLE.const_load(xl, ExcelConst)
fso = WIN32OLE.new('Scripting.FileSystemObject')
filename = fso.GetAbsolutePathName('oletest.xls')
book = xl.Workbooks.open(filename)
sheet = xl.Worksheets.Item('Sheet1')
cell = sheet.range("A2").End(ExcelConst::XlDown)
p cell.row # これで最終行の番号がわかる
book.Close
xl.Quit
# oletest.rb 終わり
定数の読み込みについては次のページを参考にしました。
http://www.morijp.com/masarl/homepage3.nifty.com …
またデータ範囲の取得はUsedRangeを使ったほうがいい場合もあります。これについては次のページに書かれていますので参考にしてください。
http://www.happy2-island.com/excelsmile/smile03/ …
うまくいかない場合はご自分のスクリプトを補足されたほうがいいと思います。
この回答への補足
教えていただいたスクリプトでは、読み込み専用で開かれます。シートへの書き込みを行って上書き保存をしようとしたのですが、いまくいきませんでした。
いろいろ試行錯誤して、
オリジナルのファイルをhonmei.xlsとしてスクリプトの頭に
File.rename("honmei.xls","oletest.xls")
とし、
スクリプトの途中で、
book.saveas("honmei.xls")
を入れ、
スクリプトの最後に
File.delete("oletest.xls")
として希望のことはできたのですが、あまりスマートではないような気がします。
他にもっとよい方法があれば教えてください。
# oletest.rb
require 'win32ole'
File.rename("honmei.xls","oletest.xls")
xl = WIN32OLE.new('Excel.Application')
# Excelの定数を読み込む
module ExcelConst end
WIN32OLE.const_load(xl, ExcelConst)
fso = WIN32OLE.new('Scripting.FileSystemObject')
filename = fso.GetAbsolutePathName('oletest.xls')
book = xl.Workbooks.open(filename)
sheet = xl.Worksheets.Item('Sheet1')
cell = sheet.range("A2").End(ExcelConst::XlDown)
p cell.row # これで最終行の番号がわかる
sheet.range(cell.address).vaule="なにか書き込み"
book.saveas("honmei.xls")
book.Close
xl.Quit
File.delete("oletest.xls")
# oletest.rb 終わり
masa_pee様
解決しました。どうもありがとうございました。
module ExcelConst end
WIN32OLE.const_load(xl, ExcelConst)
ここがわかっていませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlのライセンス
-
ディスクの空き容量を求める(W...
-
ADサーバにおけるログインID,PC...
-
cygwinでcshが認識されず困って...
-
powershellで関数名を変更する...
-
「デバイスは PRN を初期化でき...
-
エクセルVBAでシートモジュール...
-
例外処理のフローチャートの記...
-
ユーザー定義関数に#NAME?が返...
-
”:”がいっぱいの文について。
-
モジュールの最大数はいくつな...
-
モジュールからフォームのボタ...
-
VBでグローバル変数を宣言するには
-
VBAで旧字体を異字体に一括で変...
-
SendKeysの使い方について
-
ExcelVBA AddinでOnAction
-
VBA モジュールで共通に使う変...
-
Perl モジュールのアンインスト...
-
vba 標準モジュールインポート...
-
Excel VBAで、ユーザーフォーム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbs: オブジェクトがコレクショ...
-
Perlのライセンス
-
Cからシェルを起動し返り値をハ...
-
cygwinでcshが認識されず困って...
-
パスワードの保存
-
powershellで関数名を変更する...
-
dieによる終了コード(ステータ...
-
perl初心者 「カウンタ」
-
ptkdbを使ってCGIプログラムを...
-
VBScriptでCurrentDirectoryを...
-
UWSCのスクリプトにラグが発生...
-
月刊LinuxWorldのめっちゃ便利...
-
ADサーバにおけるログインID,PC...
-
CGI、このベンチマークは重い?...
-
プログラム初心者です。unix上...
-
perlに特化したエディタご存じ...
-
ちょっとした疑問です
-
掲示板のコメントの中に自動的...
-
スペースを含むファイルの実行...
-
Mac OSX 10.6を使っています。
おすすめ情報