CX's VBScript Diary

2017-06-10

VBScript + PowerPoint を利用してファイル形式を変換する方法

12:21 | VBScript + PowerPoint を利用してファイル形式を変換する方法 - CX's VBScript Diary を含むブックマーク はてなブックマーク - VBScript + PowerPoint を利用してファイル形式を変換する方法 - CX's VBScript Diary

はてなブックマーク経由で以下の記事を読みました。UWSC でパワーポイントを自動化しましょうというものでした。

パソコンの自動化で稼ぐことができたので方法教えるよ! – ysklog

http://ysklog.net/pc/5298.html

確かに UWSC で出来なくはないですが、もっとスマートな方法があります。

Office 製品は、それ自体が、COM コンポーネントと呼ばれる部品となっており、VBScript 等のプログラミング言語から呼び出して使用することができます。オートメーションと呼ばれる機能になります。

以下は、オートメーションの機能を利用した自動化サンプルになります。


' File : SaveAsPpt.vbs
' Usage : CScript //Nologo SaveAsPpt.vbs
' Description : VBScript でパワーポイントの .pptx 形式のファイルをオープンして .ppt 形式で保存するサンプル
Option Explicit

Const ppSaveAsPresentation = 1 

Call Main()

Sub Main()
    Dim ppt
    Set ppt = CreateObject("PowerPoint.Application")

    Dim strOldFileName
    Dim strNewFileName
    strOldFileName = "C:\work\test.pptx"
    strNewFileName = "C:\work\test.ppt"
    
    Dim pre
    Set pre = ppt.Presentations.Open(strOldFileName)
    ' ■ Presentation.SaveAs メソッド (PowerPoint)
    ' https://msdn.microsoft.com/ja-jp/library/office/ff746389.aspx
    pre.SaveAs strNewFileName, ppSaveAsPresentation
    ppt.Quit
End Sub

この記事が誰かの参考になれば幸いです。

以下は参考情報です。

Windows 標準コンポーネント最速マスター - CX's Hatena Blog

http://cx20.hatenablog.com/entry/2013/09/15/082626

2014-12-24

cx2020141224

VBScript + WIA を使って画像ファイルを作成する方法

22:45 | VBScript + WIA を使って画像ファイルを作成する方法 - CX's VBScript Diary を含むブックマーク はてなブックマーク - VBScript + WIA を使って画像ファイルを作成する方法 - CX's VBScript Diary

最近ですが、WindowsWindows Image Acquisition (WIA) という COM コンポーネントが含まれていることを知りました。

これを応用して、VBScript から画像ファイルを生成してみたいと思います。

' File : CreateMarioImage.vbs
' Usage : CScript //Nologo CreateMarioImage.vbs
' Description : VBScript で画像データを生成するサンプル。

Option Explicit

' ‥‥‥‥〓〓〓〓〓〓〓‥‥□□□
' ‥‥○○〓〓〓〓〓〓〓〓‥□□□
' ‥‥○○‥○○○○○○○○○□□
' ‥‥‥‥‥■■■□□■□‥○○○
' ‥‥‥‥■□■□□□■□□■■■
' ‥‥‥‥■□■■□□□■□□□■
' ‥‥‥‥■■□□□□■■■■■‥
' ‥‥‥‥‥‥□□□□□□□■‥‥
' ‥‥■■■■■■■○■■■‥‥‥
' ‥○■■■■■■■■■■■‥‥■
' □□○■■■■■■○■■■‥‥■
' □□□‥■■■■■■■○○■■■
' ‥□‥○○○○○○○○■■■■■
' ‥‥■■■■■■■■■■■■■■
' ‥■■■■■■■■■■‥‥‥‥‥
' ‥■‥‥■■■■‥‥‥‥‥‥‥‥
Dim dataSet
dataSet = Array( _
    "無","無","無","無","赤","赤","赤","赤","赤","赤","赤","無","無","肌","肌","肌", _
    "無","無","白","白","赤","赤","赤","赤","赤","赤","赤","赤","無","肌","肌","肌", _
    "無","無","白","白","無","白","白","白","白","白","白","白","白","赤","肌","肌", _
    "無","無","無","無","無","茶","茶","茶","肌","肌","茶","肌","無","白","白","白", _
    "無","無","無","無","茶","肌","茶","肌","肌","肌","茶","肌","肌","赤","赤","赤", _
    "無","無","無","無","茶","肌","茶","茶","肌","肌","肌","茶","肌","肌","肌","赤", _
    "無","無","無","無","茶","茶","肌","肌","肌","肌","茶","茶","茶","茶","赤","無", _
    "無","無","無","無","無","無","肌","肌","肌","肌","肌","肌","肌","赤","無","無", _
    "無","無","赤","赤","赤","赤","赤","赤","赤","赤","白","赤","赤","無","無","無", _
    "無","白","赤","赤","赤","赤","赤","赤","赤","赤","赤","赤","赤","無","無","茶", _
    "肌","肌","白","赤","赤","赤","赤","赤","赤","赤","白","赤","赤","無","無","茶", _
    "肌","肌","肌","無","赤","赤","赤","赤","赤","赤","赤","赤","白","白","茶","茶", _
    "無","肌","無","白","白","白","白","白","白","白","白","白","赤","赤","茶","茶", _
    "無","無","茶","茶","茶","赤","赤","赤","赤","赤","赤","赤","赤","赤","茶","茶", _
    "無","茶","茶","茶","赤","赤","赤","赤","赤","赤","赤","無","無","無","無","無", _
    "無","茶","無","無","赤","赤","赤","赤","無","無","無","無","無","無","無","無" _
)

Function GetRgbColor( c ) 
    Dim colorHash
    Set colorHash = CreateObject("Scripting.Dictionary")
    colorHash.Add "無", &hFF000000
    colorHash.Add "白", &hFFFFFFFF
    colorHash.Add "肌", &hFFFFCCCC
    colorHash.Add "茶", &hFF800000
    colorHash.Add "赤", &hFFFF0000
    colorHash.Add "黄", &hFFFFFF00
    colorHash.Add "緑", &hFF00FF00
    colorHash.Add "水", &hFF00FFFF
    colorHash.Add "青", &hFF0000FF
    colorHash.Add "紫", &hFF800080

    GetRgbColor = colorHash( c )
End Function

Call Main()

Sub Main()
    Dim vec
    Set vec = CreateObject("WIA.Vector")
    
    Dim color
    Dim i
    For i = 0 To UBound(dataSet)
        color = GetRgbColor( dataSet(i) )
        vec.Add color
    Next
    
    Dim img
    Set img = vec.ImageFile(16, 16)
    img.SaveFile "C:\home\edu\vbscript\WIA\hello\mario.bmp"
End Sub
  • 実行結果

<参考>

■ Create an ImageFile Object that Contains a Blank Page

http://msdn.microsoft.com/en-us/library/windows/desktop/ms630826(v=vs.85).aspx#SharedSample029

2014-04-30

IE も FTP も PowerShell も使わずに Firefox をゲットする方法

23:24 | IE も FTP も PowerShell も使わずに Firefox をゲットする方法 - CX's VBScript Diary を含むブックマーク はてなブックマーク - IE も FTP も PowerShell も使わずに Firefox をゲットする方法 - CX's VBScript Diary

' File : GetFF.vbs
' Usage : CScript GetFF.vbs
Set http = Createobject("WinHttp.WinHttpRequest.5.1")
Set stm = Createobject("ADODB.Stream")
http.Open "GET", "http://download.mozilla.org/?product=firefox-29.0&os=win&lang=ja"
http.Send
stm.Type = 1
stm.Open
stm.Write http.ResponseBody
stm.SaveToFile "FirefoxSetup29.exe"

f:id:cx20:20140430232247p:image

2013-08-01

IE11 における VBScript サポートについて

03:05 | IE11 における VBScript サポートについて - CX's VBScript Diary を含むブックマーク はてなブックマーク - IE11 における VBScript サポートについて - CX's VBScript Diary

IE9/10 では、特段、設定変更なく、VBScript を使用することが可能でしたが、

IE11 では既定の設定で VBScript を使用することが出来ないようです。

Vbscript support in Internet Explorer 11 - Stack Overflow

http://stackoverflow.com/questions/17483782/vbscript-support-in-internet-explorer-11/

以下のコードは、IE10 では動作しますが IE11 では動作しません。

<html>
<body >
<script type="text/javascript">
alert ('Javascript');
</script>
<script type="text/vbscript">
msgbox "Vbscript"
</script>
</body>
</html>

これを回避する為には、明示的にドキュメント互換モードを指定する必要があるようです。

<meta http-equiv="x-ua-compatible" content="IE=10">

<参考情報>

ドキュメントモードと利用可能な機能の関係

ドキュメントモードVBScriptJavaScriptCanvasWebGL
7.0××
9.0×
10.0×
11.0×

IE9 以降、ブラウザ内部にJavaScriptChakra)エンジンが統合され、

旧来の JScript / VBScript は蚊帳の外(ブラウザからは COM 経由での呼出し)となっていましたが、

いよいよ、デフォルトで呼出しが出来なくなって来ているようです。

残念ですが、時代の流れのようです。。。

<関連情報>

■ 青柳 臣一 ブログ(技術系): [IE9] ついに ActiveX Scripting Engine がお払い箱に!

http://shinichiaoyagi.blogspot.jp/2010/08/ie9-activex-scripting-engine.html

JavaScriptエンジンが改良されたIE9 Platform Preview 4公開 - Publickey

http://www.publickey1.jp/blog/10/javascriptie9_platform_preview_4.html

HTML5, Modernized: Fourth IE9 Platform Preview Available for Developers - IEBlog - Site Home - MSDN Blogs

http://blogs.msdn.com/b/ie/archive/2010/08/04/html5-modernized-fourth-ie9-platform-preview-available-for-developers.aspx

2013-02-28

cx2020130228

VBScript + HTA(HTML Application)で Canvas を使う方法

04:58 | VBScript + HTA(HTML Application)で Canvas を使う方法 - CX's VBScript Diary を含むブックマーク はてなブックマーク - VBScript + HTA(HTML Application)で Canvas を使う方法 - CX's VBScript Diary

IE9/10 環境であっても、HTA のドキュメント互換モードがレガシーな設定となっている為、既定では HTML5Canvas 機能が使用できません。

ただし、互換モード(X-UA-Compatible)を明示的に「IE=edge」(最新のモード※)と指定することで、Canvas が使えるようになります。

(※IE11以降ではVBScriptが利用不可な為、「IE=10」のようにバージョンを指定する必要があります。)

<meta http-equiv="X-UA-Compatible" content="IE=edge">

実行環境とドキュメント互換モードの関係

実行環境 / 互換モード既定IE=edgeIE=9IE=10IE=11
IE99.09.09.09.09.0
IE1010.010.09.010.010.0
IE1111.011.09.010.011.0
IE9+HTA7.09.09.09.09.0
IE10+HTA7.010.09.010.010.0
IE11+HTA7.011.09.010.011.0

ドキュメントモードとHTAで利用可能な機能の関係

ドキュメントモードHTA:Application オプションVBScriptJavaScriptCanvasWebGL
7.0××
9.0××
10.0××
11.0××

以下、Canvas 機能を利用した描画サンプルです。

サンプル

<html>
<head>
<title>Hello, Canvas World!</title>
<!-- IE9/10 で Canvas を使用する場合 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- IE11 以上で Canvas を使用する場合 -->
<!-- <meta http-equiv="X-UA-Compatible" content="IE=10"> -->
<script type="text/vbscript">
Option Explicit
Const PI = 3.14159265358979
Const X_MAX = 640
Const Y_MAX = 480
Const R = 240
window.resizeTo X_MAX + 40, Y_MAX + 60

Sub Draw() 
    Dim canvas
    Set canvas = document.getElementById("Canvas")
    Dim ctx
    Set ctx = canvas.getContext("2d")
    Call DrawScreen( ctx )
    Call DrawGraph( ctx )
    Call DrawSin( ctx )
End Sub

Sub DrawScreen( ctx ) 
    ctx.fillStyle = "rgb( 0, 0, 0 )"
    ctx.fillRect 0, 0, X_MAX, Y_MAX
End Sub

Sub DrawGraph( ctx ) 
    ctx.strokeStyle = "rgb( 0, 127, 0 )"
    ctx.beginPath
    Dim x, y
    For x = 0 To X_MAX Step 20
        ctx.moveTo x, 0
        ctx.lineTo x, Y_MAX
    Next
    For y = 0 To Y_MAX Step 20
        ctx.moveTo 0, y
        ctx.lineTo X_MAX, y
    Next
    ctx.stroke
End Sub

Sub DrawSin( ctx ) 
    ctx.strokeStyle = "rgb( 0, 255, 0 )"
    ctx.beginPath
    ctx.moveTo 0, R
    Dim x, y
    For x = 0 To X_MAX Step 20
        y = R - R * Sin( 2 * PI * ( x / X_MAX ) )
        ctx.lineTo x, y
    Next
    ctx.stroke
End Sub
</script>
</head>
<body onload="Draw()">
<canvas id="Canvas" width="640" height="480"></canvas>
</body>
</html>