アプリ開発ときどきアウトドア

主にJavaを使ったアプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング bat_vbs 実装技術

WindowsでQRコードを生成(VBScript)

投稿日:


概要

  • Windows環境でVBScriptを使用してQRコードを生成する方法を紹介します。
  • このVBScriptは、Excelを起動し、バーコードコントロールを使ってQRコードを生成しています。
  • 動作確認で使用した環境は次の通りです。
    • Windows 10(64ビット)
    • Microsoft Office Home and Business(Microsoft Excel 2019 MSO 64ビット)
    • Microsoft Access Runtime 2016
      (バーコードコントロールはAccessに付属するもので、AccessまたはAccess Runtimeが必要になります。)
  • Excel VBAでQRコードを作成したい場合は別のサイトをご覧ください。
  • より高度なことを行う場合、開発効率が良いExcel VBAや.NET等のプログラミング言語での実装をお薦めします。

サンプルコード

サンプルコードは次の通りです。
こちらからダウンロードできます。

'======================================================================
' QRコード画像生成スクリプト
'
' - ExcelからAccessのBarcodeControlを使用してQRコードを生成します。
' - 実行には"Microsoft Office Access"、または"Access Runtime"が必要です。
'======================================================================

' 定数定義 ------------------------------------------------------------

'QRコードの縦・横幅
const QR_WIDTH = 300

'画像出力時の画像サイズ調整用の比率
'(作成される画像ファイルが上記の縦・横幅と異なる場合の調整用)
const SIZE_WEIGHT = 0.5

'処理途中の画像コピー&ペースト処理の失敗を抑制するための待機時間
const COPY_PASTE_INTERVAL = 1000 '[s]

'QRコード化する対象データ
const ENCODE_VALUE = "https://www.yahoo.co.jp"


' メイン処理 ----------------------------------------------------------

'Excelアプリを起動
Set App = CreateObject("Excel.Application")

'作業用のブック・シートを作成
Set TargetBook = app.Workbooks.Add
Set TargetSheet = TargetBook.Sheets(1)

'ワークシートにバーコードコントロールを追加
'(後のプロパティ設定でリサイズされてしまうので適当なサイズを指定)
Set OleObject = TargetSheet.OLEObjects.Add( _
	"BARCODE.BarCodeCtrl.1", "", 1, 0, 0, 100, 100)
Set BarcodeObject = OleObject.Object

'プロパティ設定する前に非表示
'(QRコードがレンダリングされない問題の回避)
BarcodeObject.Visible = False

'QRコードの設定と表示
With BarcodeObject
	.AutoLoad = True
	.Style = 11
	.Substyle = 0
	.Validation = 1
	.LineWeight = 3
	.Direction = 0
	.ShowData = 1
	.ForeColor = 0
	.BackColor = &H00FFFFFF
	.Value = ENCODE_VALUE
	.Refresh
End With
OleObject.Visible = True

'QRコードをコピー
WScript.Sleep COPY_PASTE_INTERVAL
BarcodeObject.CopyPicture

'画像をエクスポートするためのチャートを作成
'(チャートの挿入場所は適当な場所を指定)
WScript.Sleep COPY_PASTE_INTERVAL
TmpChartWidth = QR_WIDTH * SIZE_WEIGHT
Set TmpChart = TargetSheet.ChartObjects.Add( _
	300, 0, TmpChartWidth, TmpChartWidth)
'チャートの枠線の出力を抑制
TmpChart.Chart.ChartArea.Format.Line.Visible = False

'QRコードをチャートに張り付け
TmpChart.Chart.Paste

'Excel上での上記処理結果を確認したい場合は有効化
'MsgBox "pause for debugging..."

'QRコードをファイルにエクスポート
ScriptPath = WScript.ScriptFullName
WorkFolder = Left(ScriptPath, InStrRev(ScriptPath, "\"))
'拡張子でエクスポートファイル形式を自動判別、上書き保存
TmpChart.Chart.Export WorkFolder & "qrcode-output.png"

'Excel終了(作成したブックは不要なので保存しない)
TargetBook.Close False
App.Quit

  • バーコードコントロールを追加し、各種プロパティを指定してQRコードを生成します。
    コントロールの説明やプロパティ・メソッドは次のサイトやヘルプファイル(CHM形式)をご覧ください。
    1. Microsoft バーコード ActiveX コントロール | Microsoft Docs
    2. Download Microsoft バーコード コントロール 9.0 リファレンス from Official Microsoft Download Center
  • バーコードコントロールを表示状態でプロパティを設定しても、QRコードの画像が生成されません。この状態でコピーしても、やはりQRコードの画像を取得できません。
    バーコードコントロールを非表示の状態(Visible=False)でプロパティを設定する必要があるようです。(結構ハマりました…)
  • バーコードコントロールのQRコードを画像ファイルとして保存するためにチャート(Chart.Export)を使用しています。
  • タイミング?によってコピペが失敗する場合があり、その調整を行うためにコピペ処理前後に待機時間を設けています。環境に応じてCOPY_PASTE_INTERVALの値を変更してください。

実行結果の例

前述のサンプルでファイルにエクスポートしたQRコード(300x300px)を次に示します。
(画像の切れ目が分かるよう枠線を入れていますが、画像に枠線は含まれません。)



(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

-1. システムエンジニアリング, bat_vbs, 実装技術

執筆者:

関連記事

Javaでサポートする暗号化アルゴリズム

Java暗号化アーキテクチャ Javaで暗号化処理を実装する場合、Java暗号化アーキテクチャ(Java Cryptography Architecture: JCA)と呼ばれるフレームワークを使いま …

Java/JavaEE開発キットの作成

Javaアプリ開発者のローカルPCに、ファイル展開するだけで開発環境をできるようにするための開発キットの準備について記載します。 ★随時更新予定★ 背景 Java/JavaEE等を使ったアプリ開発では …

Hyper-VでリモートのISOイメージをマウント

皆で使用するCD/DVDはISOイメージファイルとして、ファイルサーバ上の共有フォルダに配置する運用を想定しています。Hyper-V上の仮想マシンのCD/DVDドライブに、これらのISOイメージファイ …

Webアプリテスト用のHTTPヘッダの追加

フロントに配置されたリバースプロキシサーバやロードバランサで設定されたHTTPヘッダを使用するWebアプリを開発することが多々あります。 このようなシナリオでは、設計に基づいて実装することはできますが …

localhost(pfx)をPEM形式の証明書と鍵に変換

開発環境にて、Visual Studioのインストール時に追加されるlocalhostサーバ証明書(IIS Express Development Certificate)を、Apache httpd …