InDesignデータからテキストを抽出する
(ドラッグ&ドロップ)

vbsファイルにinddファイルをドラッグ&ドロップすると、InDesignを起動し、ドロップされたファイルから、テキストを抽出し、ドロップされたファイルと同じ場所に保存します。


動作環境・注意

InDesign CS、CS2、CS3、CS4で動作します。

出力される文字コードはシフトJISまたはUnicodeです。ただし、CS4のUnicodeはUTF-8もしくはUTF-16になります。

インラインフレームのテキストは、別に出力されます。

ドラッグ&ドロップされるInDesignドキュメントと同じフォルダに同名(拡張子が異なる)のテキストファイルが存在すると、そのファイルは上書きされてしまいます。

1つのフレームしか書き出しできない場合は、ソースの31行目の「tx.AtEndOfLine」の部分を「tx.AtEndOfStream」に書き換えて試してみてください(OSのバージョンに依るものかもしれません)。


ダウンロード

ファイルはzip形式で圧縮してあります。CS、CS2用のダウンロードはこちら(idtxtoutd.zip)からお願いします。CS3用はこちら(idtxtoutdCS3.zip)から、CS4用はこちら(idtxtoutdCS4.zip)からお願いします。


使用方法

★CS、CS2

ダウンロードした「idtxtoutd.zip」ファイルを解凍すると以下の4つのファイルが作られます。不要なものは捨てて下さい。

ファイルはデスクトップなど適当な場所に置きます。

そのファイルにInDesignドキュメントファイルをドラッグ&ドロップします。ファイルは複数可能ですが、数に限界があります。(20〜30程度)

ドロップしたInDesignドキュメントファイルと同じ場所にテキストファイルが作成されます。ファイル名は拡張子を.inddから.txtに変更したものとなります。

★CS3

ダウンロードした「idtxtoutdCS3.zip」ファイルを解凍すると以下の2つのファイルが作られます。不要なものは捨てて下さい。

ファイルはデスクトップなど適当な場所に置きます。

以下、CS、CS2と同じです。

★CS4

ダウンロードした「idtxtoutdCS4.zip」ファイルを解凍すると以下の3つのファイルが作られます。不要なものは捨てて下さい。

ファイルはデスクトップなど適当な場所に置きます。

以下、CS、CS2と同じです。


各ファイルのソースの違い(CS、CS2)

下のソースはidtxtoutdCS_S.vbsのものです。CS2の場合は以下の部分が異なります。

10行目 Set app = CreateObject("InDesign.Application.CS") のところ
Set app = CreateObject("InDesign.Application.CS2_J")

11行目 app.UserInteractionLevel = 1699640946 のところ
app.ScriptPreferences.UserInteractionLevel = 1699640946

41行目 app.UserInteractionLevel = 1699311169 のところ
app.ScriptPreferences.UserInteractionLevel = 1699311169

また、Unicodeテキストの場合は以下の部分が異なります。

12行目 app.TextExportPreferences.CharacterSet = 1415865972 のところ
app.TextExportPreferences.CharacterSet = 1249209961

26行目 Set tf = fso.OpenTextFile(txtfilename, 8) のところ
Set tf = fso.OpenTextFile(txtfilename, 8, , -1)

30行目 Set tx = fso.OpenTextFile(tmpfilename, 1) のところ
Set tx = fso.OpenTextFile(tmpfilename, 1, , -1)


ソース

 1  Set objArgs = WScript.Arguments
 2  If objArgs.Count = 0 Then
 3      WScript.Echo "入力ファイル名がありません"
 4      WScript.Quit
 5  End If
 6  
 7  Dim filename, txtfilename, tmpfilename 'As String
 8  Dim app 'As InDesign.Application
 9  Dim doc 'As InDesign.Document
10  Set app = CreateObject("InDesign.Application.CS")
11  app.UserInteractionLevel = 1699640946 'idNeverInteract
12  app.TextExportPreferences.CharacterSet = 1415865972 'idDefaultPlatform
13  
14  Dim fso 'As FileSystemObject
15  Dim tf, tx  'As TextStream
16  Set fso = CreateObject("Scripting.FileSystemObject")
17  
18  For k = 0 To objArgs.Count - 1
19      filename = objArgs(k)
20      txtfilename = Left(filename, InStrRev(filename, ".")) & "txt"
21      tmpfilename = Left(filename, InStrRev(filename, ".")) & "tmp"
22      Set doc = app.Open(filename)
23      For i = 1 To doc.Stories.Count
24          If i = 1 Then
25              doc.Stories.Item(i).Export 1952412773, txtfilename
26              Set tf = fso.OpenTextFile(txtfilename, 8)
27          Else
28              doc.Stories.Item(i).Export 1952412773, tmpfilename
29              tf.WriteLine("")
30              Set tx = fso.OpenTextFile(tmpfilename, 1)
31              Do While tx.AtEndOfLine <> True
32                  tf.WriteLine (tx.ReadLine())
33              Loop
34              tx.Close
35          End If
36      Next 'i
37      doc.Close
38      tf.Close
39      fso.DeleteFile tmpfilename
40  Next 'k
41  app.UserInteractionLevel = 1699311169 'idInteractWithAll


おまけ

ソースの29行目 tf.WriteLine("") のところを、 tf.WriteLine("##") とするとエディカラー風の区切り付テキストになります。

[HOME]