HTA内に埋め込まれたJScriptからExcelを開くことができません
Dec 02 2020
この質問に続いて、このページのVBScriptコードをJScriptに変換しようとしています。以下の.hta
コードを実行した場合:
<HTML>
<BODY>
<INPUT id=button1 name=button1 type=button value=Button>
<SCRIPT LANGUAGE="VBScript">
sub button1_onclick()
dim app
set app = createobject("Excel.Application")
app.Visible = true
dim wb
set wb = app.workbooks.add
end sub
</SCRIPT>
</BODY>
</HTML>
ボタンをクリックすると、空のExcelシートが開きます。予想通り。ただし、VBScript部分をJScriptに変換すると
<HTML>
<BODY>
<INPUT id=button1 name=button1 type=button value=Button>
<script LANGUAGE="JScript">
function button1_onclick() {
// var app = WScript.CreateObject("Excel.Application");
var app = new ActiveXObject("Excel.Application");
app.Visible = true;
var wb = app.Workbooks.Add();
}
</script>
</BODY>
</HTML>
ボタンをクリックしてもExcelはまったく開きません。何が問題なのか、どうすれば解決できるのかを教えていただければ幸いです。よろしくお願いします。
回答
1 user692942 Dec 02 2020 at 16:53
Object_Event
構文が機能しないのはなぜですか?
実際には非常に単純なObject_Event
構文はVBScriptです。イベントをJScriptで自動的にバインドできるようにするには、正しい構文を使用する必要があります。これはObject::Event
、自動バインドされたイベントを使用した例です。
<html>
<body>
<input id="button1" name="button1" type="button" value="Button">
<script language="JScript">
function button1::onclick() {
var app = new ActiveXObject("Excel.Application");
app.Visible = true;
var wb = app.Workbooks.Add();
}
</script>
</body>
</html>
これをテストしたところ、機能しているようです。@ Teemuがコメントで示唆しているように、onclick
イベントハンドラーが欠落している可能性があります。
<html>
<body>
<input id="button1" name="button1" type="button" value="Button" onclick="return button1_onclick();">
<script language="JScript">
function button1_onclick() {
var app = new ActiveXObject("Excel.Application");
app.Visible = true;
var wb = app.Workbooks.Add();
}
</script>
</body>
</html>
唯一の本当の違いはonclick
、<input>
要素にイベントハンドラーが含まれていることです。
onclick="return button1_onclick();"
クリックすると新しいワークブックでMicrosoftExcelを開くボタンが表示されます。
便利なリンク
- HTAファイルのJavascript
- HTAアプリケーションからプログラムを開く
- Javascriptを使用するHTAのActiveXイベントハンドラー (これがJavascriptと呼ばれるという事実は、JScriptに関する誤った情報を示しているだけです)。
- MSDN(スクリプトクリニック)-スクリプトイベント