「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:2489
現在:6


Wordのフィールドコードが移行出来ない

ページOpenOffice.org FAQの登録ページ
投稿者匿名
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2009-09-02 08:44:02 (水)
OSWindows XP
依存するページIssue #55806
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

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


以下はフィールドコードに戻す vbs

Dim 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 (火))

フッター部分も正しく動作しました。

大変助かりました。
ありがとうございます。

お名前:
題名:


添付ファイル: fileToText2.vbs 1381件 [詳細]