Wordのフィールドコードが移行出来ない †
ページ | OpenOffice.org FAQの登録ページ |
---|---|
投稿者 | 匿名 |
分類 | |
優先順位 | |
状態 | |
カテゴリー | |
投稿日 | 2009-09-02 08:44:02 (水) |
OS | Windows XP |
依存するページ | Issue #55806 |
バージョン |
メッセージ †
回答ページでは行末に「~」を付加する必要はありません |
Wordで以下のようなフィールドコードを含む文書をWriterに移行した場合にフィールドコードの部分がなくなってしまいます。
{ eq\o\ad(文字,□□□□□□)}※□はスペースです。
簡単に移行する方法がありましたら教えていただきたいです。 よろしくお願いします。
フィールドコードとは †
M.Kamataki (2009-09-02 11:31:56 (水))
フィールドコードとは、拡張された参照フィールドというものでしょうか。
2つ問題がありますよね。1つはWordのフィールドコードをWriterがまったく認識しない件。これはOpenOffice.orgの不具合・要望データベースであるIssueTrackerを調べるとIssueがあるかもしれません。
Wordのフィールドコードに対する、Writerの機能としては「挿入」−「フィールド」の「その他」あたりが該当すると思いますが、完全な互換性はないようですね。
もう1つは代替方法です。ご質問の内容に関しては、
http://ikutawasabi.hp.infoseek.co.jp/fd7c3-3.htm
を見ると、「文字」の間隔をスペースの幅に均等に伸ばした表示になるようです。
これは、文字を選択して「書式」−「文字」を選び、「位置」タブの文字間隔を調整することで実現できます。(本当は「均等割り付け」機能があれば良いのですが)
フィールドコードの読み込み †
M.Kamataki (2009-09-02 11:41:00 (水))
例えば以下のIssueあたりでしょうか。
Import of Word-document destroys contained fields
http://ja.openoffice.org/issues/show_bug.cgi?id=55806
ありがとうございます †
匿名 (2009-09-02 12:14:42 (水))
WordからWriterに変換した時点でフィールドコードの部分が欠落してしまうので非常に困っています。
>これは、文字を選択して「書式」−「文字」を選び、「位置」タブの文字間隔を調整することで実現できます。(本当は「均等割り付け」機能があれば良いのですが)
一応これで今のところ対応してますが、欠落した箇所を見落とす可能性があるので、Writerに変換した際にテキストでもフィールドコードの文字がそのまま表示されるでもなんでもいいので残ってくれるとありがたいんですが…
いくつかの案 †
M.Kamataki (2009-09-03 11:32:53 (木))
>欠落した箇所を見落とす可能性がある
Microsoftがリリースしている無料のWord Viewerをチェックに使う方法も考えられます。
現状はWriterの機能不足なので、上記で紹介したIssueなどが修正されるのを待つしかありません。
ありがとうございます †
匿名 (2009-09-03 12:37:28 (木))
現状ではそれしか方法がないので見比べて作業しています。
対応されることを願います。
Word 側での対処 †
ike@九州 (2009-09-05 09:30:13 (土))
Word がインストールされている PC があるようでしたら
Word 側にてフィールドコードをテキストに戻して Writer で読み込むという手法もあります。
以下は vbs にてWord VBA の操作を行いテキストに変換するものです
・メモ帳にコピペして ToText.vbs にて保存
・docファイルを ToText.vbs にドラッグ&ドロップするとフィールドコードをテキストへ変換します(eq\o\adの数式フィールドのみ対象)
・上書き保存、ファイルを閉じる、Word終了はコメントアウトしてます。コメント解除すると自動で終了します
Dim fieldLoop Dim s Dim s2 Dim sCode Dim t ' 引数の配列をargsに獲得する Set args = Wscript.Arguments ' ワードを起動する Set objWord = CreateObject("Word.Application") objWord.Visible = True ' args のファイル名たちを順番に FileName へ入れて全ファイル分ループする For Each FileName in args ' フルパスを元にファイルを開く Set objDoc = objWord.Documents.Open( FileName ) Set objSelection = objWord.Selection For Each fieldLoop In objDoc.Fields t = fieldLoop.Type s = fieldLoop.Code.FormattedText.Text sCode = UCase(Left(s, InStr(s, "("))) '数式フィールドType,定数 wdFieldFormula = 49 If t = 49 And InStr(1,sCode, "O",1) Then '"ad" 均等割り付け数式の判断 If InStr(1,sCode, "AD",1) > 0 Then s2 = "{" & sCode & Right(s, Len(s) - InStr(s, "(")) & "}" fieldLoop.select objWord.Selection.InsertAfter s2 fieldLoop.Delete End If End If Next ' 終わったら同じフルパスに対して上書き保存 'objDoc.SaveAs FileName ' ファイルを閉じる 'objDoc.Close ' 各種オブジェクトの解放 Set objDoc = Nothing Next ' ワードを終了する 'objWord.Quit Set objWord = Nothing Set args = Nothing
以下はフィールドコードに戻す vbsDim s Dim myField ' 引数の配列をargsに獲得する Set args = Wscript.Arguments ' ワードを起動する Set objWord = CreateObject("Word.Application") objWord.Visible = True ' args のファイル名たちを順番に FileName へ入れて全ファイル分ループする For Each FileName in args ' フルパスを元にファイルを開く Set objDoc = objWord.Documents.Open( FileName ) Set oText = objWord.Selection oText.Select With oText.Find .ClearFormatting .Text = "\{*\(*\)*\}" .MatchFuzzy = False .MatchWildcards = True .Execute Do While .Found = True s = oText.Range.Text If InStr(1, s, "O", 1) * InStr(1, s, "ad",1) > 0 Then s = Right(s, Len(s) - InStr(s, "(") + 1) '先頭"("の前を取り除く s = Left(s, Len(s) - 1) '最後の"}"を取り除く s = "\O \AD " & RTrim(s) oText.Range.Delete Set myField = objDoc.Fields.Add(oText.Range,49,s,False) End If .Execute Loop End With ' 終わったら同じフルパスに対して上書き保存 'objDoc.SaveAs FileName ' ファイルを閉じる 'objDoc.Close ' 各種オブジェクトの解放 Set objDoc = Nothing Next ' ワードを終了する 'objWord.Quit Set objWord = Nothing Set args = Nothing
ありがとうございます †
匿名 (2009-09-09 12:43:56 (水))
マクロありがとうございます。
あらかたテキストに変換することが出来ました。
マクロ実行後置換を3回行えば必要な文字のみ残すことが出来ました。
1.{ EQ \O\AD( →空白
2.,全角スペース{2,} →空白※ワイルドカードにチェック必要
3.)} →空白
完了にします †
M.Kamataki (2009-09-09 21:22:26 (水))
コメントありがとうございます。
追加 vbs †
ike@九州 (2009-09-10 14:05:37 (木))
合間に調べながら作成ですので遅くなりましたが、今後必要な方が居るかもしれないので…
均等割付けフィールドコードから Writer で読める通常均等割付けへ直接変換する vbs です
Dim fieldLoop Dim sText Dim sCode Dim nType Dim sMoji Dim sFontSiz Dim nCount ' 引数の配列をargsに獲得する Set args = Wscript.Arguments ' ワードを起動する Set objWord = CreateObject("Word.Application") objWord.Visible = True ' args のファイル名たちを順番に FileName へ入れて全ファイル分ループする For Each FileName in args ' フルパスを元にファイルを開く Set objDoc = objWord.Documents.Open( FileName ) For Each fieldLoop In objDoc.Fields nType = fieldLoop.Type sText = fieldLoop.Code.FormattedText.Text sCode = Left(sText, InStr(sText, "(")) '数式フィールドType,定数 wdFieldFormula = 49 If nType = 49 And InStr(1,sCode, "O",1) Then '"AD" 均等割り付け数式の判断 If InStr(1,sCode, "AD",1) > 0 Then sMoji = Mid(sText,InStr(sText,"(") + 1,Instr(sText,",") - Instr(sText,"(") - 1 ) nCount = InStr(sText,")") - InStr(sText,",") - 1 fieldLoop.select sFontSiz = objWord.Selection.Font.Size 'フィールドコード部分に文字を挿入する objWord.Selection.TypeText sMoji '挿入した文字を選択し均等割り付けを行う objWord.Selection.MoveLeft ,Len(sMoji),1 objWord.Selection.FitTextWidth = nCount * sFontSiz objWord.Selection.MoveLeft ,1 End If End If Next ' 終わったら同じフルパスに対して上書き保存 'objDoc.SaveAs FileName ' ファイルを閉じる 'objDoc.Close ' 各種オブジェクトの解放 Set objDoc = Nothing Next ' ワードを終了する 'objWord.Quit Set objWord = Nothing Set args = Nothing
均等割付けを行う部分をコメントアウトすれば、通常のテキストのみで挿入になります
ありがとうございます †
匿名 (2009-09-14 08:25:10 (月))
これならWriterへの移行が楽に行えそうです。
厚かましいのですが、フッターに表を設けていてそのなかでも同様のフィールドコードでの均等割付を使用しているのですが、それも対応するようにしていただけないでしょうか?
ファイル添付 †
ike@九州 (2009-09-14 14:32:46 (月))
OOo とは離れてしまいましたが、OOo への移行手段という事で調べました。
ヘッダー、フッターに表が存在すれば各セルのフィールドコードを調べる手順です。
コードが少し長くなったのでファイル添付します。
十分に検証確認してください(サンプル無いので確認不足)
{ヘッダー内の表1の各セル、フッター内の表1の各セル、本文}の均等割付けフィールドコードを通常の均等割付けへ変換する仕様ですが、正しく動作しない場合はサンプル添付していただかないと先へ進めません。
ありがとうございます †
匿名 (2009-09-15 17:15:34 (火))
フッター部分も正しく動作しました。
大変助かりました。
ありがとうございます。