現在Word文書をwiki書式に変換するマクロを作成しています。
SelectionからParagraphをループさせてStyleを判定することはできているのですが、途中に表が含まれる場合にはTableを取得してRowによるループに切り替えたいと思っています。
現在のParagraphが表に入ったかどうかを判定するにはどうしたらよいでしょうか。
もしかして「そういうマクロがここで公開されてるよ」という回答であってもうれしいです。
WordVBAは利用経験あまりないので、
まとめているサイトを探して軽く動かしてみただけなのですが・・・。
If Selection.Information(wdWithInTable) = True Then MsgBox "列: " _ & Selection.Information(wdMaximumNumberOfColumns) _ & vbCr & "行: " _ & Selection.Information(wdMaximumNumberOfRows) End If
selectしているものがtableかどうかを判別して、
tableなら列数と行数を取得し、ループを内部で行って適宜整形。
※余談になりますが、xml形式(あるいはhtml形式)で保存して、
それをパースしたほうが、目的を早く達成できるのではないでしょうか?
ExcelVBAなら良いのですが、WordVBAは相談相手少ないですよね・・・。
WordVBAは利用経験あまりないので、
まとめているサイトを探して軽く動かしてみただけなのですが・・・。
If Selection.Information(wdWithInTable) = True Then MsgBox "列: " _ & Selection.Information(wdMaximumNumberOfColumns) _ & vbCr & "行: " _ & Selection.Information(wdMaximumNumberOfRows) End If
selectしているものがtableかどうかを判別して、
tableなら列数と行数を取得し、ループを内部で行って適宜整形。
※余談になりますが、xml形式(あるいはhtml形式)で保存して、
それをパースしたほうが、目的を早く達成できるのではないでしょうか?
ExcelVBAなら良いのですが、WordVBAは相談相手少ないですよね・・・。
ありがとうございます。無事判定できました。
本当にワードマクロは情報が少ないですよね。
XMLにも余計な要素が山のようにありそうで考慮しなかったんですけど、見てみました。やっぱり大量に無駄な要素があって読み解きたくないXMLでした(笑)
あと外で加工すると別ツールになっちゃいますけど、ワードマクロだと使える人が多いかなー、と思ってます。「選択した範囲だけ」みたいなこともできますし。
現在マージしたセルに苦闘中。
安定して動くようになったら公開します。使ってくれる人はいるかなぁ。
「Range.Cells.Count」で表か判断できると思います。
※実際にテストした結果ですので、マニュアルと合っているかは保証できませんが…
もし表でなければエラーになり、表の場合は1か0を取得します。
1は表の中、0は表の行末?
I = ActiveDocument.Paragraphs(n).Range.Cells.Count
入力されている文字を取得
文字 = ActiveDocument.Paragraphs(n).Range.Text
表を行と列でループで処理する場合はTablesオブジェクトで対応すると思います。
ActiveDocument.Tables.Count ActiveDocument.Tables(n).cell(行,列).Range.Text
ありがとうございます。無事判定できました。
本当にワードマクロは情報が少ないですよね。
XMLにも余計な要素が山のようにありそうで考慮しなかったんですけど、見てみました。やっぱり大量に無駄な要素があって読み解きたくないXMLでした(笑)
あと外で加工すると別ツールになっちゃいますけど、ワードマクロだと使える人が多いかなー、と思ってます。「選択した範囲だけ」みたいなこともできますし。
現在マージしたセルに苦闘中。
安定して動くようになったら公開します。使ってくれる人はいるかなぁ。