「差し込み印刷」を使わないでWordにCSVデータの差し込み(差し込み印刷もどき その2) [VBA/VBS]
以前にExcelからWord文書への「差し込み印刷もどき」を作成してみたが、同じように考えている方が多いようで当Blogで一番のアクセスがある記事となっています。
帳票等で不定行数の表データを差し込みたい場合も多いが、前回の方式では実現できない。そこで不定行数の表データをWord文書に差し込むマクロを作成してみた。Word VBAに慣れるためExcelからWordを制御するのでは無く、Word VBAでCSVデータと差し込む方式で作成してみた。
概要
Word VBAコード
Public Sub read_csv() Dim Path As String, file As String, buf As String, strLine As String, data_ary() As Variant Dim arrLine As Variant, tmp() As String Dim max_n As Long, i As Long, j As Long, max_c As Long Dim myPath As String myPath = ActiveDocument.Path file = myPath & "\data.csv" 'CSVデータ読み取り i = 0 Open file For Input As #1 'CSVファイルを開く Do Until EOF(1) ReDim Preserve tmp(i) Line Input #1, strLine tmp(i) = strLine i = i + 1 Loop Close #1 '2次元配列に格納 max_n = UBound(tmp) max_c = UBound(Split(tmp(0), ",")) ReDim data_ary(max_n + 1, max_c + 1) As Variant For i = 0 To UBound(tmp) arrLine = Split(tmp(i), ",") For j = 0 To UBound(arrLine) - 1 data_ary(i, j) = arrLine(j) Next j Next i Close #1 'データ書き込み If ActiveDocument.Tables.Count >= 1 Then For i = 1 To max_n For j = 0 To max_c With ActiveDocument.Tables(1).Cell(Row:=i + 2, Column:=j + 1).Range .Delete .InsertAfter Text:=data_ary(i, j) End With Next j ActiveDocument.Tables(1).Rows.Add Next i End If 'pdf出力 ActiveDocument.ExportAsFixedFormat _ OutputFileName:=myPath & "\" & "出力.pdf", _ ExportFormat:=wdExportFormatPDF '終了 MsgBox "完了しました。" Application.Quit SaveChanges:=wdDoNotSaveChanges End Sub
サンプルの使用方法
- ダウンロード Wordファイル(csv2word.docm)はこちら、CSVファイル(data.csv)はこちら
- サンプルのWord、CSVファイルは同じフォルダー内に保存
- Word(csv2word.docm)を起動すると、セキュリティの警告がでますがコンテンツの有効化ボタンをクリック。
- 実行ボタンを押すと、CSVデータが差し込まれたPDFファイル"出力.pdf"が作成されます。なおcsv2word.docmは更新されませんので何度でも使用できます。
2018-01-23 22:00
nice!(0)
コメント(0)
コメント 0