JAPLA 研 究 会 資 料 2007/1/27 Jと Word, Excel, HTML - 全 員 集 合 の 協 調 処 理 システム -JAPLA 研 究 会 レポートの 一 覧 表 示 ツール- 西 川 利 男 1.はじめに JAPLA 研 究 会 に 発 表 した 私 のレポートもかなりの 量 になっている きちんと 整 理 し た 上 で すぐ 参 照 し 有 効 再 利 用 できるようにする 必 要 を 痛 感 している 新 年 を 機 会 に 少 し ずつ 始 めるべく そのためのツールを 作 った 発 表 したレポートは Word 文 書 で 作 成 してあるが これらをインターネット エクスプロ ーラ 上 で 発 表 年 月 日 発 表 題 目 などを 一 覧 表 として 必 要 に 応 じてその 内 容 を 表 示 するよう にしたい 実 は Word 文 書 からその 題 目 などを Excel のセルを 用 いて 一 覧 表 にするプログ ラムについてはすでに 報 告 した[1] 今 回 はこれに 手 直 しを 行 い さらに HTML 文 書 として インターネット エクスプローラ 上 で 検 索 読 み 取 れるようにしたものである 元 々 Windows というコンピュータ 環 境 はワープロ 表 計 算 などのいろいろ 異 なったアプ リケーションの 間 を 共 通 のデータで 行 き 来 できることを " 売 り" にしている その 一 つがク リップ ボードを 介 してのコピー&ペースト 機 能 である しかし もう 少 し 込 み 入 った 処 理 を となると 一 般 のユーザには 必 ずしも 容 易 ではない Microsoft 社 の Office の 名 の 下 にあるワープロ Word, 表 計 算 Excel, データベース Access はバックグラウンドでは Visual BASIC をベースにした VBA 言 語 で 統 一 的 にプログラミン グできる 幸 いわがJ 言 語 も DDE(Dynamic Data Exchange, OLE(Object Linking and Embeddingとして Windows の 下 でデータを 共 有 処 理 できる Jと Excel との 相 互 処 理 に ついては 志 村 正 人 竹 内 寿 一 郎 両 氏 により 以 前 から 行 われ 優 れた 解 説 がある 私 の 今 回 の 目 的 には レポート 文 書 の 在 る Word あるいは 最 終 の HTML のプログラムに よって 行 えればそれが 最 善 である しかしながら 私 の 現 在 の 力 量 では 残 念 ながらまだ 不 可 能 である いずれ 挑 戦 したいと 思 っている 現 状 で 私 が 可 能 な 技 術 を 総 動 員 してとなると Word ファイルを Excel から 読 み 込 んでこ れをJに 取 り 込 み 文 字 コード フォーマットの 調 整 を 行 って 最 終 的 に HTML ファイルと する というまことにヤヤコシイ 処 理 を 行 わざるをえなかった 各 種 処 理 システムの 協 調 処 理 などとうたったものの これが 本 当 の 理 由 である [1] 西 川 利 男 Word 文 書 の 管 理 のための Excel-VBA プログラム J 言 語 研 究 会 資 料 2003/11/29-1 -
2.Excel 上 の VBA プログラミングと Excel の 二 三 の 処 理 元 となるデータ( 研 究 会 レポートは Word 文 書 ファイルとして 作 られている これらを Excel 上 に 取 り 込 み 処 理 するために Excel-VBA でプログラミングを 行 った ファイル 名 を 取 り 込 み Excel のセルの 一 覧 表 として 表 示 する ファイル 検 索 ボタン この Excel のファイル 自 身 も Word ファイルと 同 じフォルダー 上 に 置 いて 行 うことにす る まず 現 在 のフォルダー 名 を 取 得 して MyPath とする その 中 でファイル 拡 張 子 が doc のファイル 名 を 次 々と 取 り 込 み FName とする これを Excel のセルに 格 納 する MyPath = ActiveWorkbook.Path & "\" FName = Dir(MyPath & "*.doc" MsgBox FName Do While FName <> "" Cells(y, x.value = FName FName = Dir( y = y + 1 Loop Word 文 書 から 文 頭 データを 読 む 文 頭 読 み 込 み ボタン Word 文 書 のファイル 名 を 指 定 して そのファイルを 開 いて 文 頭 から 数 行 すなわち 発 表 年 月 日 題 名 ( 主 タイトル サブタイトルを Excel に 読 み 込 み セルに 入 れる まず Word のオブジェクトを WordObject として 作 成 し ファイルを WordDoc として 読 み 込 む Set WordObject = CreateObject("Word.Application" WordObject.Visible = False Set WordDoc = WordObject.Documents.Open(FName 次 に 最 初 の 行 を 読 みこみ(DAA スペース 以 下 の 文 字 列, 発 表 年 月 日 (DABを 取 り 出 す DAA = WordDoc.Paragraphs(1 MM = InStr(DAA, " " 半 角 スペース If MM = 0 Then MM = InStr(DAA, " " 全 角 スペース MMM = MM + 1 DAB = Mid$(DAA, MMM この 年 月 日 文 字 列 を 右 の 列 のセルに 入 れる Cells(ActiveCell.Row, ActiveCell.Column + 1.Value = DAB Cells(ActiveCell.Row,ActiveCell.Column + 1.HorizontalAlignment=xlHAlignCenter Cells(ActiveCell.Row, ActiveCell.Column + 1.ColumnWidth = 16 さらに 次 々と Word の 行 を 読 み 込 み タイトルとしてさらに 右 の 列 のセルに 入 れる こ の 際 空 白 行 は 飛 ばし 著 者 名 になるまで 繰 り 返 す そして 最 後 に Word オブジェクトを - 2 -
閉 じる Worddoc.Close このようにして Excel 上 のデータとして 一 覧 表 が 得 られる Excel だけの 後 処 理 年 月 日 によりソートして 並 び 替 える Excel データを J から 読 むこともできるが 簡 単 のためにテキストファイルとして 出 力 す る テキストファイルでは Excel のセルの 区 切 り 文 字 は TAB, 行 の 区 切 りは CR になる Excel 上 での 一 覧 表 は 次 のようになる 3.J によるプログラミング J での 処 理 は 次 の J の 関 数 を 用 いた3 段 階 で 行 われる 関 数 jlist テキストファイルを 読 み 込 み 区 切 り 文 字 を 適 当 な 文 字 に 変 換 する 関 数 anchor Word のファイル 名 と 題 名 との 関 連 つけを 行 う 関 数 htm HTML ファイルを 作 成 する テキスト 文 字 列 に HTML 仕 様 のタグを 付 加 し 前 後 に Head 部 分 と Tail 部 分 を 付 けて HTML 文 書 としての 書 式 を 整 える 処 理 の 詳 しい 内 容 は 最 後 のプログラムを 参 照 されたい - 3 -
4.インターネット エクスプローラ 上 での 検 索 実 行 ファイル NJIndex.htm を 起 動 すればインターネット エクスプローラから 自 動 的 に 一 覧 表 が 表 示 される ここで 題 名 から 希 望 する 箇 所 をマウス クリックすれば 直 ちに Word 文 書 のレポートファイルが 開 かれる なお この HTML ファイルはそのままアップロードす れば インターネットのホームページで 閲 覧 可 能 である インターネット エクスプローラ 上 での 表 示 は 次 のようになる 参 考 書 西 沢 夢 路 Excel VBA ハンドブック ソフトバンク(1999. 西 上 原 裕 明 Word で 実 践 やさしく 役 に 立 つマクロ 事 例 集 技 術 評 論 社 (2006. 磯 野 康 孝 蔵 守 伸 一 HTML ハンドブック ナツメ 社 (1996. - 4 -
Excel-VBA プログラムリスト 'List Word-files of JAPLA revised 2006/12/15 ' revised 2006/12/30 More Comment Line 'NJ06_List.xls should be put on the same directory of Word-files Sub Directories( 'ctrl-d 'File Name Listing ActiveCell.ColumnWidth = 16 x = ActiveCell.Column y = ActiveCell.Row MyPath = ActiveWorkbook.Path & "\" MsgBox MyPath FName = Dir(MyPath & "*.doc" MsgBox FName Do While FName <> "" Cells(y, x.value = FName FName = Dir( y = y + 1 Loop End Sub Sub from_word( 'ctrl-r 'Read Header and Title from Word-file, aferwards write cells ' revised 2007/1/19 date: 2nd cell, title: 3rd cells MyPath = ActiveWorkbook.Path & "\" FName = MyPath & ActiveCell.Value MsgBox FName Set WordObject = CreateObject("Word.Application" WordObject.Visible = False Set WordDoc = WordObject.Documents.Open(FName 'Extract Date_Number from Word 1st Line, then Set to Excel 2nd Cell. DAA = WordDoc.Paragraphs(1 MM = InStr(DAA, " " If MM = 0 Then MM = InStr(DAA, " " MMM = MM + 1 DAB = Mid$(DAA, MMM - 5 -
'MsgBox DAB Cells(ActiveCell.Row, ActiveCell.Column + 1.Value = DAB Cells(ActiveCell.Row,ActiveCell.Column + 1.HorizontalAlignment=xlHAlignCenter Cells(ActiveCell.Row, ActiveCell.Column + 1.ColumnWidth = 16 'Title Lines to Excel 3rd and folowing Cells. 'revised 2006/12/30 More Comment Lines j = 2 For i = 2 To 5 Line = WordDoc.Paragraphs(i 'MsgBox (Line If " 西 " = Left$(Line, 1 Then GoTo L1 If 1 >= Len(Line Then GoTo L0 Cells(ActiveCell.Row, ActiveCell.Column + j.value = Line Cells(ActiveCell.Row, ActiveCell.Column + j.horizontalalignment = xlhalignleft Cells(ActiveCell.Row, ActiveCell.Column + j.columnwidth = 50 j = j + 1 L0: Next i L1: Worddoc.Close Cells(ActiveCell.Row + 1, ActiveCell.Column.Select End Sub - 6 -
J プログラムリスト NB. J_LIST html file processing 2006/12/17 NB. using 'files.js' (default NB. read '***.txt' NB. output '***.htm' NB. Usage Example: NB. JA =: jlist 'F:\JAPLA\NJ06_LIST.txt' NB. JB =: anch JA NB. 'F:\JAPLA\NJIndex.htm' htm JB NB. read txt_file into J string data eg. JA =: jlist 'F:\JAPLA\J06_LIST.txt' jlist =: 3 : 0 if. 0 = #y. do. y. =. 'F:\JAPLA\J06_LIST.txt' end. JL =. fread y. JL =. JL -."(1 '"' JL =. CRtoSP HTtoSP JL NB. remove HT and CR JL =. ><;. 1 LF, JL JL =. }. JL 19 {."(2 JL NB. used utility functions val=: a. & i. chr=: val ^:_1 subs=. [. & ((((e.& ((# i.@#@ (@] } HT =: chr 9 SP =: chr 32 HTtoSP=: SP subs HT f. CRtoSP=: SP subs CR f. NB. separation for web anchoring eg. JB =: anch JA anch =: 3 : 0 a =: (SP=y. i."(1 1 b =: }."(1 a {."(0 1 y. c =: a }."(0 1 y. - 7 -
b;c NB. html data Head =: ] ;._2 (0 : 0 <html> <head> <title> 西 川 利 男 -J 研 究 会 発 表 資 料 </title> </head> <body bgcolor=ffffff> <br> J 研 究 会 発 表 資 料 <p> <br> Tail =: ] ;._2 (0 : 0 </body> </html> BX =: '<a href="' BY =: '">' CZ =: '</a><p>' NB. make html file eg. 'F:\JAPLA\JIndex.htm' htm JB htm =: 3 : 0 'F:\JAPLA\JIndex.htm' htm y. : 'B C' =: y. BC =. BX,"(1 B,"(1 BY,"(1 C,"(1 CZ wid =. {: $BC HTM =. Head, BC, Tail HTM fwrites x. - 8 -