スポンサーリンク

バッチで,Word文書の内容を読み取ろう (WSH/JScriptでWordファイルを操作する方法)


WSHからWord文書(.docファイル)の内容を読み取る。

  • 段落ごとの読み取り
  • 見出しごとの読み取り(特定のスタイルの段落のみを抽出)
    • →見出しだけを抽出すれば,Word文書の「アウトライン」をテキスト形式で生成できる。

段落ごとの読み取り

指定したWord文書内の全文字列を,段落ごとに出力するバッチ。

var doc_file_path = "D:\\temp\\a.doc";

function log(s){ WScript.Echo( s ); }


// Wordを起動する
var word = WScript.CreateObject("Word.Application");
word.Visible = true;

// 指定したWordファイルを開く
var doc = word.Documents.Open( doc_file_path );

// 全ての段落についてループ
var num_paras = doc.Paragraphs.Count;
for( var i = 1; i <= num_paras; i ++ )
{
	// この段落内の文字列を取得
	var txt_in_para = doc.Paragraphs( i ).Range.Text;
	
	// この段落に関する情報を表示
	log( "[para " + i + "] " + txt_in_para );
}

// ファイルを閉じる
doc.Close();

// ワードを終了する
word.Quit();

Wordのマクロで段落を操作する
http://stabucky.com/wp/archives/1037

見出しごとの読み取り(特定のスタイルの段落のみを抽出)


指定したWord文書内の全「見出し」(章など)を出力するバッチ。

簡易アウトライン抽出。

var doc_file_path = "D:\\temp\\a.doc";

function log(s){ WScript.Echo( s ); }


// Wordを起動する
var word = WScript.CreateObject("Word.Application");
word.Visible = true;

// 指定したWordファイルを開く
var doc = word.Documents.Open( doc_file_path );

// 全ての段落についてループ
var num_paras = doc.Paragraphs.Count;
for( var i = 1; i <= num_paras; i ++ )
{
	// この段落
	var para = doc.Paragraphs( i );
	
	// この段落のスタイル名
	var style_name = "" + para.Style;
	
	// スタイル名に「見出し」という語が含まれているか
	if( style_name.match("見出し") )
	{
		// この段落のrangeオブジェクト
		var range = para.range;
		
		// この見出しの段落番号を取得(「1章」などの文字列)
		var list_string = range.ListFormat.ListString;
	
		// この見出しの文字列を取得(章番号などを除いた部分)
		var txt_in_para = range.Text
		txt_in_para = txt_in_para.replace( /\r\n/g, "" ); // 改行を除去しておく
		
		// この見出しの存在するページ番号を取得
		var wdActiveEndPageNumber = 3;
		range.Select();
		var page_num = word.Selection.Information( wdActiveEndPageNumber );
		
		// 「[3ページ][1章] はじめに」のように表示
		log( 
			"["
			+ page_num
			+ "ページ][" 
			+ list_string + 
			"] " 
			+ txt_in_para 
		);
	}
}

// ファイルを閉じる
doc.Close();

// ワードを終了する
word.Quit();

ワードのマクロで段落番号(文字も含む)取得ってできますか
http://okwave.jp/qa/q3085439.html

  • Selection.Paragraphs(1).Range.ListFormat.ListString


文章の見出しの項番と見出し名を表示させたい
http://www.moug.net/faq/viewtopic.php...

  • para.Range.ListFormat.ListString


ページ番号を調べる
http://questionbox.jp.msn.com/qa23712...

  • Selection.Information(wdActiveEndPageNumber)


Word オートメーションを使用して文書の各セクションのページ数をカウントする方法
http://support.microsoft.com/kb/29386...

  • oSec.Range.Information(3) - 1 'wdActiveEndPageNumber=3

補足

WSHからWordを自動操作する際には,Word VBAの情報も大いに役立つ。

Word VBA の入門用リンク集 (ワードマクロの,サンプルコードやリファレンス)
http://language-and-engineering.hatenablog.jp/entry/20100314/p1