WSHの最近のブログ記事
xlsシート内にあるグラフだけを画像ファイルに保存したい。
※グラフシートでなく。
リファレンスを調べるとChartオブジェクトにSaveAsメソッドがあるようなので、html形式で保存したらいけそうだなーと思ったが、やってみるとエラーになってしまいお手上げ(詳細割愛)。
どうしたものかな、とgoogle先生で検索を繰り返したら、またもや2chのスレッドに答えそのものを発見。
あなどれんな~。
Exportメソッドというものがあるらしい。
形式も指定できるが、省略してもファイル名の拡張子から適宜判断してくれる。便利。
gif/png/jpgはいけた。
■export_chart.js
■試した環境
Excel 2003 SP3 + XP Prof SP2(ja)
Excel 2007 SP1 + Vista Ultimate SP1 x64(ja)
※グラフシートでなく。
リファレンスを調べるとChartオブジェクトにSaveAsメソッドがあるようなので、html形式で保存したらいけそうだなーと思ったが、やってみるとエラーになってしまいお手上げ(詳細割愛)。
どうしたものかな、とgoogle先生で検索を繰り返したら、またもや2chのスレッドに答えそのものを発見。
あなどれんな~。
Exportメソッドというものがあるらしい。
形式も指定できるが、省略してもファイル名の拡張子から適宜判断してくれる。便利。
gif/png/jpgはいけた。
■export_chart.js
var app = new ActiveXObject("Excel.Application");
try {
var book = app.Workbooks.Open( xlsブックのフルパス, true );
var sh = book.Sheets( 1 );
var co = sh.ChartObjects( 1 );
var ch = co.Chart;
ch.Export( 出力画像ファイルのフルパス );
} catch( ex ) {
throw ex;
} finally {
app.Quit();
}
■試した環境
Excel 2003 SP3 + XP Prof SP2(ja)
Excel 2007 SP1 + Vista Ultimate SP1 x64(ja)
ADODB.Streamを使うと、SJIS以外のエンコードに変換可能。
て、ことが以下のURLに書いてある。
ADODB.Stream を使ったファイルの読み書き - by AOK
こんな方法があるとはな~。
こっちはさらに、utf-8出力時のBOMをどう除去するか、という話
JavaScriptでファイルの書き込みをUTF-8で行う(htaまたは、wsh用) - jiroの日記
ADODB.Streamを2つ使い、Positionを移動することでBOMをskipして出力。なるほどなー。
とりあえずSJIS出力で我慢しといて、iconvで変換するか、とか考えたけど、最初からutf-8で書き出せれば便利だ。
て、ことが以下のURLに書いてある。
ADODB.Stream を使ったファイルの読み書き - by AOK
こんな方法があるとはな~。
こっちはさらに、utf-8出力時のBOMをどう除去するか、という話
JavaScriptでファイルの書き込みをUTF-8で行う(htaまたは、wsh用) - jiroの日記
ADODB.Streamを2つ使い、Positionを移動することでBOMをskipして出力。なるほどなー。
とりあえずSJIS出力で我慢しといて、iconvで変換するか、とか考えたけど、最初からutf-8で書き出せれば便利だ。
/* ADODB.Stream - SaveOptionsEnum */
var adSaveCreateOverWrite = 2;
/* ADODB.Stream - StreamTypeEnum */
var adTypeBinary = 1;
var adTypeText = 2;
/* ADODB.Stream - StreamWriteEnum */
var adWriteChar = 0;
var adWriteLine = 1;
var st = new ActiveXObject("ADODB.Stream");
st.type = adTypeText;
st.charset = "utf-8";
st.open();
st.WriteText( なにか出力 , adWriteLine );
st.Position = 0;
st.Type = adTypeBinary;
st.Position = 3; ←utf8なら3
var bin = st.Read();
st.Close();
var stw = new ActiveXObject("ADODB.Stream");
stw.Type = adTypeBinary;
stw.Open();
stw.Write( bin );
stw.SaveToFile( 出力ファイル , adSaveCreateOverWrite );
stw.Close();
ちょっとしたスクリプトにおいて、WScript.Echoなどで結果をstdoutにずらずら出力したいときがある。
で、このスクリプトをエクスプローラからダブルクリックで実行してしまいMsgBoxが延々と出てきてしまうと悲しい。ので、実行時にチェックしてコマンドプロンプト(cscript.exe)から実行されたかどうか判断したい。
改めて検索してみたら、
「@IT:運用 Windows管理者のためのWindows Script Host入門 第4回 WScriptオブジェクトの詳細(2) 4.スクリプトの実行制御とホスト情報の取得」
実行ファイル名でチェックしてるサンプルが。
今までこんなん↓してた(JScript)
cscript.exe経由で実行の場合に、StdErrが汚れるし。。
で、このスクリプトをエクスプローラからダブルクリックで実行してしまいMsgBoxが延々と出てきてしまうと悲しい。ので、実行時にチェックしてコマンドプロンプト(cscript.exe)から実行されたかどうか判断したい。
改めて検索してみたら、
「@IT:運用 Windows管理者のためのWindows Script Host入門 第4回 WScriptオブジェクトの詳細(2) 4.スクリプトの実行制御とホスト情報の取得」
実行ファイル名でチェックしてるサンプルが。
今までこんなん↓してた(JScript)
try {
WScript.StdErr.WriteBlankLines(1);
} catch( ex ) {
WScript.echo( "run me under cscript.exe");
WScript.Quit();
}
うーん。cscript.exe経由で実行の場合に、StdErrが汚れるし。。
- [WSH]コマンドライン引数、オプション解釈
- [WSH]レジストリの読み書き
- [WSH]ディレクトリの有無チェック
- [WSH]ディレクトリ内ファイル列挙
- [WSH]パスから拡張子部分を抜き出す
- [WSH]イベントログ出力
- [JavaScript]乱数
どこかに保存しスタートアップにショートカットを作成するなどする。実行するたびに指定ディレクトリ内のビットマップファイルをランダムに選択し、デスクトップまたはログオンスクリーンの壁紙を変更する。
デフォルトの動作は、”「共有ピクチャ\randomwp\」内の*.bmpからランダムに選択しログオンスクリーンの壁紙を変更する”
