
指定のEXCELファイルを開き、名前を変えて保存するプログラム(ソース)を必要としています。以下に詳細を記入します。
EXCELファイルを開く
(1)36ファイルの中から6ファイルを開く。
(2)その6ファイルは利用者がボックス等に入力して選ぶ。
EXCELファイルを保存
(1)それぞれ別名で保存したい。
(2)保存名はあらかじめ"A","B","C","D","E","F"とする。
(3)別フォルダに保存したい。(あらかじめ保存フォルダを作成しておいてもよい)
例;6ファイルから2ファイルを開き、別名で保存する場合(EXCEL)
全6ファイル("1","2","3","4","5","6")があるとする
→利用者がボックス等入力する
1{ "2" }
2{ "5" } ※{ }をボックスに見立てている
→"2","5"のファイルが開く
→別名で保存する
1{ }は"A"
2{ }は"B"とあらかじめ決めておく
→全6ファイルとは別に"A","B"というファイルが作られ全8ファイルとなる。
HSP3.0(2.6)かHTML Applicationsで、できるのではないかと考えています。他のプログラムは利用できる環境にありません。HSP3.0(2.6)は基本的プログラムを組むことができますが初心者です。HTML Applicationsにおいては全くの初心者です。
もとより、このようなプログラムは可能でしょうか?
ご回答よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
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>
この回答への補足
本当にありがとうございました。実際に実行してみましたら、うまくいきました。
欲をいえば、ファイル名に.xlsをつけなくても実行してくれるとうれしいですが。失礼しました。
しかしながら、システムに影響するとセキュリティゼロが言っていますが大丈夫でしょうか?
No.3
- 回答日時:
ANo.2 補足への回答です。
初めに申し上げましたようにここでできる回答は大筋でしかありません。HTAやJScriptなどで検索すれば様々な情報が得られます。自己責任で情報を選択・活用し、不便な点を改良するとよいでしょう。
>欲をいえば、ファイル名に.xlsをつけなくても実行してくれるとうれしいですが。
拡張子を除いた入力に対して".xls"を連結してやればよいですね。JScriptの文字列は + 記号で連結できます。コードはあえて控えておきます。
>しかしながら、システムに影響するとセキュリティゼロが言っていますが大丈夫でしょうか?
大丈夫じゃありません! というのは冗談ですが、例えばスクリプトを誤ってシステムのファイルを上書きしてしまったら…ということを考えると危険です。スクリプトの内容を調べてから許可するようにしましょう。
ウィルスセキュリティゼロについては デジタルライフ > ウィルス対策 のカテゴリを検索されるとよいでしょう。
そうですね。いや、でも本当に助かりました。お忙しい中(おそらく)ありがとうございました。大筋どころか大方成功したといっても過言ではないプログラムとなり、感謝します。
No.1
- 回答日時:
まず、このプログラムを掲示板のやりとりとスペースで完結させるのは不可能でしょうと申し上げておきます。
しかし大筋を示すことはできると思いまして、私の勉強のため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ファイル用になるでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) [クイックアクセスツールバー]の設定ファイルの格納場所について、 5 2023/04/21 14:43
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) Excelを開くとエラーが出る 2 2022/10/03 16:13
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Word(ワード) office 2021へ自分用のクイックアクセスとマクロをコピーしたい 2 2023/03/11 21:15
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/20 10:00
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルの特定行の削除
-
エクセルのファイル:「自分」が...
-
彼女の過去の恋愛に嫉妬してし...
-
ファイルが移動してもリンクの...
-
Excel: ファイル名になぜ、[...
-
WINDOWS CMDからゴミ箱のファ...
-
docxをmht形式で保存したファイ...
-
[Unity]シーンファイルの中が消...
-
Googleドライブについて
-
複数のExcelファイルにある同名...
-
mediaplayerの取り込みフォルダ...
-
EXCELVBAにて文字列にして「01...
-
ファイルを別のフォルダに移動...
-
VBAにおいて、ファイルの移...
-
html ネットワークドライブへ...
-
File::delete失敗時のテスト方法
-
CreateFile関数によるCD/DVDへ...
-
FFFTPのホストサイドを開いても...
-
my.cnfファイルを編集しようと...
-
Excelに貼り付けた画像を圧縮す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSVファイルの特定行の削除
-
彼女の過去の恋愛に嫉妬してし...
-
Excel: ファイル名になぜ、[...
-
エクセルのファイル:「自分」が...
-
ファイルが移動してもリンクの...
-
iCloud for Windowsをアンイン...
-
EXCELVBAにて文字列にして「01...
-
WINDOWS CMDからゴミ箱のファ...
-
vbsからのExcelマクロ呼び出し...
-
[Unity]シーンファイルの中が消...
-
5000個のtiffファイルをpdfへ変...
-
複数のExcelファイルにある同名...
-
このファイルは外部のエディタ...
-
batでファイル名を変更したい(...
-
フォルダ内の複数のファイルの...
-
docxをmht形式で保存したファイ...
-
FTPのgetとputの使いわけ。
-
Googleドライブについて
-
VBA ファイル一覧を取得して全...
-
エクセル保存終了で一時ファイ...
おすすめ情報