- ベストアンサー
EXCELファイルを保存するプログラムについて
- 指定のEXCELファイルを開き、名前を変えて保存するプログラムを必要としています。
- EXCELファイルを開く際は、36ファイルの中から6ファイルを選択します。
- EXCELファイルを保存する際は、別名で保存し、保存フォルダを指定します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ANo.1 お礼への回答です。Excelとは直接は関係ないファイルコピーと解釈しました。 ファイル名を表示して選択するのは将来の課題とし、6個のボックスを並べてみました。入力フォルダと出力フォルダはスクリプト内で記述していますので適切に書き換えて下さい。出力フォルダは作成しておいて下さい。 ダブルクリックで起動し、6個のボックス全てに入力ファイル名のみを入力して[保存]ボタンを押すとコピーされます。上書き処理です。エラーチェックは【全く行っていません】ので誤りませんように…。 <HTML> <HTA:APPLICATION ID="oHTA" APPLICATIONNAME="ExcelCopy" SCROLL="no" INNERBORDER="no" MAXIMIZEBUTTON="no" MINIMIZEBUTTON="no" SINGLEINSTANCE="yes" /> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=x-sjis"> <TITLE>Excelコピー</TITLE> <STYLE><!-- BODY {background-color: buttonface; --></STYLE> <SCRIPT> var InFolder = "C:\\Test\\In"; //★ 入力フォルダ名 var OutFolder = "C:\\Test\\Out"; //★ 出力フォルダ名 var Wsh = new ActiveXObject("WScript.Shell"); var Fs = new ActiveXObject("Scripting.FileSystemObject"); function Window_onLoad(){ window.resizeTo(250,350); //★ 好みの大きさx,yに window.moveTo(100,200); //★ 好みの位置x,yに } function go_save(){ Fs.CopyFile(Fs.BuildPath(InFolder,document.Form1.txt1.value), Fs.BuildPath(OutFolder,"A.xls"), true); Fs.CopyFile(Fs.BuildPath(InFolder,document.Form1.txt2.value), Fs.BuildPath(OutFolder,"B.xls"), true); Fs.CopyFile(Fs.BuildPath(InFolder,document.Form1.txt3.value), Fs.BuildPath(OutFolder,"C.xls"), true); Fs.CopyFile(Fs.BuildPath(InFolder,document.Form1.txt4.value), Fs.BuildPath(OutFolder,"D.xls"), true); Fs.CopyFile(Fs.BuildPath(InFolder,document.Form1.txt5.value), Fs.BuildPath(OutFolder,"E.xls"), true); Fs.CopyFile(Fs.BuildPath(InFolder,document.Form1.txt6.value), Fs.BuildPath(OutFolder,"F.xls"), true); Wsh.Popup("Excelファイルを保存しました。"); } </SCRIPT></HEAD><BODY onLoad="Window_onLoad()"> <FORM NAME="Form1"> <p><input type="text" id="txt1" size="30" /> → A.xls</p> <p><input type="text" id="txt2" size="30" /> → B.xls</p> <p><input type="text" id="txt3" size="30" /> → C.xls</p> <p><input type="text" id="txt4" size="30" /> → D.xls</p> <p><input type="text" id="txt5" size="30" /> → E.xls</p> <p><input type="text" id="txt6" size="30" /> → F.xls</p> <p> <CENTER><input type="button" value="保存" onClick="go_save()" /></CENTER> </p> </BODY></FORM></HTML>
その他の回答 (2)
- SHIMAPEE
- ベストアンサー率75% (154/203)
ANo.2 補足への回答です。 初めに申し上げましたようにここでできる回答は大筋でしかありません。HTAやJScriptなどで検索すれば様々な情報が得られます。自己責任で情報を選択・活用し、不便な点を改良するとよいでしょう。 >欲をいえば、ファイル名に.xlsをつけなくても実行してくれるとうれしいですが。 拡張子を除いた入力に対して".xls"を連結してやればよいですね。JScriptの文字列は + 記号で連結できます。コードはあえて控えておきます。 >しかしながら、システムに影響するとセキュリティゼロが言っていますが大丈夫でしょうか? 大丈夫じゃありません! というのは冗談ですが、例えばスクリプトを誤ってシステムのファイルを上書きしてしまったら…ということを考えると危険です。スクリプトの内容を調べてから許可するようにしましょう。 ウィルスセキュリティゼロについては デジタルライフ > ウィルス対策 のカテゴリを検索されるとよいでしょう。
お礼
そうですね。いや、でも本当に助かりました。お忙しい中(おそらく)ありがとうございました。大筋どころか大方成功したといっても過言ではないプログラムとなり、感謝します。
- SHIMAPEE
- ベストアンサー率75% (154/203)
まず、このプログラムを掲示板のやりとりとスペースで完結させるのは不可能でしょうと申し上げておきます。しかし大筋を示すことはできると思いまして、私の勉強のためHTML Applicationsで書いてみました。 ソースをExcelCopy.htaのような名前を付けて保存し、下記の手順で操作してみて下さい。Windows XP SP2で試しました。 (1)ダブルクリックして起動すると、テキストボックス一つと[開く]ボタン、[保存]ボタンの画面が現れます。 (2)テキストボックスに元のExcelファイルのフルパスを入力します。 (3)[開く]ボタンを押すとExcelファイルが開かれます。Excelは更新してもよいですが閉じないで下さい。 (4)[保存]ボタンを押すと、元のExcelファイルと同じフォルダに"A.xls"の名前で保存されます。Excelは自動的に閉じられます。 なお、繰り返しますがこれは大筋でしかありません。テキストボックスを増やすことはもちろん、大量のエラーチェックを入れる必要があります。また、もっと画面をアプリケーションらしくカッコよくすることもできるでしょう。 示された仕様にもいろいろ疑問があります。例えばなぜ"6"というマジックナンバーなのか、ボックスに入力させるのは面倒ではないか(ファイル名を表示して選択させた方が良くないか)、Excelを表示する必要はあるのか、既に"A","B"というファイルがあったらどうするのか、などなど。 HTAを作成してみて不明な点を抜書きして示して頂ければ、別の回答が付くかもしれません。 <HTML> <HTA:APPLICATION ID="oHTA" APPLICATIONNAME="ExcelCopy" SCROLL="no" INNERBORDER="no" MAXIMIZEBUTTON="no" MINIMIZEBUTTON="no" SINGLEINSTANCE="yes" /> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=x-sjis"> <TITLE>Excelコピー</TITLE> <SCRIPT> var Wsh = new ActiveXObject("WScript.Shell"); var Fs = new ActiveXObject("Scripting.FileSystemObject"); var oExcel; function go_open(){ oExcel = new ActiveXObject("Excel.Application"); oExcel.Visible = true; oBooks = oExcel.WorkBooks.Open(document.Form1.txt1.value); } function go_save(){ oExcel.ActiveWorkbook.SaveAs( Fs.BuildPath(Fs.GetParentFolderName(document.Form1.txt1.value), "A.xls")); oExcel.Quit(); Wsh.Popup("Excelファイルを保存しました。"); } </SCRIPT></HEAD><BODY> <FORM NAME="Form1"> Excelファイルを指定して下さい。<input type="text" id="txt1" size="100"> <p> <input type="button" value="開く" onClick="go_open()" /> <input type="button" value="保存" onClick="go_save()" /> </p> </BODY></FORM></HTML>
お礼
ありがとうございます。 >例えばなぜ"6"というマジックナンバーなのか ファイル名は、中のデータが番号順になっているので、分かりやすいように数字で表示しています。実際のところ"1","2"などではなく、"1 2","3 4"というファイルが36ファイルあります。 >ボックスに入力させるのは面倒ではないか(ファイル名を表示して選択さ せた方が良くないか) 確かにファイル名を表示すれば使いやすいです。 >Excelを表示する必要はあるのか 表示しなくてもいいです。 >既に"A","B"というファイルがあったらどうするのか これは問題ですが、上書き処理はできないでしょうか?できない場合は、そのつど削除した上で用いればいいかもしれません。 詳細; ようは36個ある、EXCELファイルの中から6個のファイルを別名保存しなくてはなりません。毎回コピー&ペーストして名前を変更するのが大変なのでプログラム化できないかと考えたわけです。 6個のファイルは毎回異なり、規則性がありません。別名保存する際の保存名は"A"B"C"D"E"F"というわけです。名前自体には意味はありません。ただマクロを組んでいるので比較的短い名前を選択しただけです 実際にhtaファイルを作成し実行したところ大方私のやりたいことが実践できて助かりました。ただお聞きしたいのはフルパスでなくてはならないかということです。できればフルパスは避けたいのですが。たしか同フォルダにプログラムを入れておけばそこからファイルを探すはずではないでしょうか。もしくはおっしゃるとおりリスト化してプログラム上でファイル選択する方法もひとつだと思います。 hta初心者で申し訳ないのですが、どこからどこまでコピーすれば6ファイル用になるでしょうか。
補足
投稿してくださって感謝します。 このような内容の質問は大方伝わり方が不十分になりがちなので、説明をよく考えたつもりでしたが、分かりにくい部分も多々あろうかと思います。深く反省しています。 詳細を今日中に記したいと思います。 本当にありがとうございます。
補足
本当にありがとうございました。実際に実行してみましたら、うまくいきました。 欲をいえば、ファイル名に.xlsをつけなくても実行してくれるとうれしいですが。失礼しました。 しかしながら、システムに影響するとセキュリティゼロが言っていますが大丈夫でしょうか?