SSブログ

「差し込み印刷」を使わないでWordにCSVデータの差し込み(差し込み印刷もどき その2) [VBA/VBS]


以前にExcelからWord文書への「差し込み印刷もどき」を作成してみたが、同じように考えている方が多いようで当Blogで一番のアクセスがある記事となっています。
 帳票等で不定行数の表データを差し込みたい場合も多いが、前回の方式では実現できない。そこで不定行数の表データをWord文書に差し込むマクロを作成してみた。Word VBAに慣れるためExcelからWordを制御するのでは無く、Word VBAでCSVデータと差し込む方式で作成してみた。

概要
  • 差し込むCSVデータを作成(data.csv)
  • csvData20180123.png
  • Word文書のCSVデータを差し込む表を作成(csv2word.docm)
  • word20180123.png
  • PDF出力
  • pdf20180123.png

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は更新されませんので何度でも使用できます。


nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。