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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】A列にある連続したデータの1番下に文字列を入力したい 1 2023/01/28 04:40
- Excel(エクセル) VBAのoffsetの動き方について教えてください 3 2022/11/25 23:36
- Visual Basic(VBA) 追記する列を増やしたい 2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記し 9 2022/10/05 10:50
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Excel(エクセル) Excelの複数人での参照について 2 2022/06/01 13:38
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- Excel(エクセル) Excel ドロップダウンリスト(入力規則)に関してです データの入力規則で元データ79000行のド 3 2023/07/17 10:06
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- その他(Microsoft Office) ExcelデータをPDFにして保存するとWordデータに変換されるようになった 10 2023/06/20 09:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Cからシェルを起動し返り値をハ...
-
UWSCのスクリプトにラグが発生...
-
ホームページ作成でCGI、VBスク...
-
「ActiveX」と「スクリプト」の...
-
Perlスクリプトで文字化けして...
-
VBSで自動ログインについて
-
CシェルプログラミングをCygwinで?
-
crontab での実行結果が違う
-
cygwinでcshが認識されず困って...
-
Excel VBAでリンク切れをチェッ...
-
例外処理のフローチャートの記...
-
ユーザー定義関数に#NAME?が返...
-
VBA This Workbookモジュール...
-
SOAP::Liteを利用したい!
-
「デバイスは PRN を初期化でき...
-
エクセルVBAで標準モジュー...
-
ユーザーフォーム上に表示され...
-
VBでグローバル変数を宣言するには
-
Excel VBA 『Call』で呼び出す...
-
”:”がいっぱいの文について。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Cからシェルを起動し返り値をハ...
-
"JScript"が見つかりません!
-
Perlスクリプトで文字化けして...
-
awkの処理速度を改善したい
-
powershellで関数名を変更する...
-
pythonスクリプトの停止方法に...
-
VBSを利用して、IEのタブを自動...
-
Perlのライセンス
-
cygwinでcshが認識されず困って...
-
UWSCのスクリプトにラグが発生...
-
シェルでsyntax errorがでてしまう
-
ADサーバにおけるログインID,PC...
-
VBSで自動ログインについて
-
VBScriptでCurrentDirectoryを...
-
CシェルプログラミングをCygwinで?
-
vbs: オブジェクトがコレクショ...
-
perlスクリプトのブラウザURLか...
-
perl起動方法
-
Net-SNMPのPerlモジュールでTra...
-
Linux Fedora core2のwebサーバー
おすすめ情報