Skip to main content
Participating Frequently
March 21, 2024
Answered

PNGで書き出しを行うファイルの名称をCSVで指定する方法を教えてください

  • March 21, 2024
  • 2 replies
  • 820 views

組版したデータをPNG形式で書き出しを行った後、現在EXCELのマクロを利用してファイル名の変更をしています

indesignからPNG形式で書き出し時にファイル名を指定することはできないでしょうか

よろしくお願いいたします

 

 

 

This topic has been closed for replies.
Correct answer Omachi

ご返信ありがとうございます

 

教えていただいたVBAを実行しているのですが、

.PNGExportRange = idPNGExportRangeEnum.idExportRange

 でエラー(実行時エラー'424')が発生して処理が進みません

 

PNG出力に関して宣言されているので、InDesignをVBA実行前に起動・事前にindd読み込みを試しましたが同じエラーが表示されます

VBA実行時にInDesignが起動されても、同じエラーが表示されます(その際は、inddは読み込まれていません)

何か操作を間違えているのでしょうか


実際に動かすためには、参照設定をするか、列挙を値に書き換える必要があります。

「参照設定」はご存じないですか。古い記事ですがこちらに手順が書いてあります。(参照設定の手順だけ見てください! 余計な操作も書いてありますので注意)

http://indesign.cs5.xyz/vb/making.html

 

参照設定がわからなければ、次のコードを実行してみてください。これは私のところで動くのを確認しました。

Sub InDesignでページごとにPNG書き出し()
    Set ws = ThisWorkbook.ActiveSheet
    Set app = CreateObject("InDesign.Application.2024")
    With app.PNGExportPreferences
        .PNGExportRange = 1785742674
        .ExportingSpread = False
        .PngSuffix = ""
        .PNGQuality = 1701727608
        .ExportResolution = 300
        .PNGColorSpace = 1666336578
        .TransparentBackground = False
        .AntiAlias = True
        .UseDocumentBleeds = False
        .SimulateOverprint = False
        .ExportingHiddenSpread = False
    End With
    If app.documents.Count < 1 Then
        MsgBox "ドキュメントが開かれていません"
        Exit Sub
    End If
    Set doc = app.ActiveDocument
    
    i = 3 'Excelのセルの行
    j = 1 'InDesignドキュメントのページ
    
    Do While ws.Cells(i, 2).Value <> ""
        app.PNGExportPreferences.PageString = CStr(j)
        doc.Export 1699761735, ThisWorkbook.Path & "\" & ws.Cells(i, 2).Text & ".png"
        i = i + 1
        j = j + 1
    Loop
End Sub

同じエラーは出ないはずです。環境によって別のエラーが出るかもしれませんが、それについてはサンプル提示の範囲を超えているので、別途ご相談です(チャリン)

2 replies

Uske_S
Community Expert
Community Expert
March 22, 2024

PDFを書き出すのと同様に、PNG書き出し時にファイル名を指定することはできますが、そういうことではないのですよね? できるかできないかで言えば、EXCELからコピペすればできるとは思います。どのような方法でPNG画像に書き出しているのでしょうか。

 

PNG画像を書き出した後、EXCELのマクロでファイル名を変更しているというのは、実際にファイル名を変更するのですか? 例えばAAA.pngというファイルがあったとして、マクロを利用するとBBB.pngにファイル名を変えられるマクロ(VBA)を使っていらっしゃるイメージでいいでしょうか。それであれば、書き出すPNG画像を任意の法則性をもつ名前にしておいて、VBAにファイル名を変更する処理を組み込めれば解決できそうです。

また、Bridgeを使えば、正規表現を使ったファイル名のリネームも可能です。

 

具体的にどのような状態からどのような結果を求められているか図りかねるのですが、それによってスクリプトで対応すべきか、操作を工夫してなんとかするか、結論も変わると思います。

想像ですが、結論としてはこのようなイメージですか?

  1. InDesignからPNG画像を機械的に処理する(どの画像をどのファイル名にすべきかが機械的に一意に定まる)
  2. InDesignからPNG画像を書き出すタイミングでユーザーが判断して特定のファイル名にしたい

 

1であれば、条件次第でスクリプトによる処理が可能でしょう。

2も条件次第ではありますが、PNG書き出しダイアログでユーザーがEXCELからコピペするのとあまり手間は変わらないかもしれません。

いずれにせよ、もっと具体的な条件や手順などを教えていただけると、もう少し踏み込んだアドバイスができるかもしれません。

Uske_S
TH2024Author
Participating Frequently
March 22, 2024

ご返信ありがとうございます

 

PNGの書き出し方としては、データ結合後に”ファイル→書き出し”を行っております

ファイル名の変更に関しては、ご認識の通りEXCELのマクロでAAA.PNGというファイルをBBB.PNGに変更しております

 

具体的には、データ結合後PNG書き出し時にEXCEL B列の値のファイル名.PNGを出力することを想定しております

なので、イメージとしては「1.InDesignからPNG画像を機械的に処理する」になると思います

上記処理で書き出したPNGのファイル名が、最初からEXCELのB列の値で出力できるように考えています

書き出した時点のイメージ                        現状  

 

InDesignにVBAを組み込んで機械的に処理させた方がいいでしょうか

ご教授よろしくお願いいたします

Omachi
Legend
March 22, 2024

Excelのマクロ(VBA)でやるならこんな感じですね。動かしてないけど 。VBAを書き慣れているのであればさほど難しくはないです。

Sub InDesignでページごとにPNG書き出し()
    Set ws = ThisWorkbook.ActiveSheet
    Set app = CreateObject("InDesign.Application.2024")
    With app.PNGExportPreferences
        .PNGExportRange = idPNGExportRangeEnum.idExportRange
        .ExportingSpread = False
        .PngSuffix = ""
        .PNGQuality = idPNGQualityEnum.idMaximum
        .ExportResolution = 300
        .PNGColorSpace = idPNGColorSpaceEnum.idRGB
        .TransparentBackground = False
        .AntiAlias = True
        .UseDocumentBleeds = False
        .SimulateOverprint = False
        .ExportingHiddenSpread = False
    End With
    Set doc = app.ActiveDocument
    
    i = 3 'Excelのセルの行
    j = 1 'InDesignドキュメントのページ
    
    Do While ws.Cells(i, 2).Value <> ""
        app.PNGExportPreferences.PageString = CStr(j)
        doc.Export idExportFormat.idPNGFormat, ws.Cells(i, 2).Text & ".png"
        i = i + 1
        j = j + 1
    Loop
End Sub

 

データ結合の元データがExcelで扱えるなら、Excel VBAでデータ結合もできます。

ajabon grinsmith
Community Expert
Community Expert
March 21, 2024

知っている範囲では、標準機能(メニュー項目、パネル項目)には思い当たりません。

スクリプトで実現するしかないかなと思います。

TH2024Author
Participating Frequently
March 22, 2024

ご返信ありがとうございます

 

スクリプトを検討してみたいと思います