2

Office InteropとC#3.5を使用して開発している単語自動化プログラムに奇妙なケースがあります

プログラムの1つのタスクは、ワードドキュメント内のリンクされた画像を別の場所にコピーし、それらの画像のリンクされたソースを新しい場所に書き換えることです。

さて、あるドキュメントで、リンクされたファイルを(Word 2010を使用して)チェックすると、次のような場所を指す画像が表示さimages\image_file.jpgれます。つまり、画像は、ドキュメントがあるフォルダーのサブフォルダーにあります。それは完全に正しいです。

リンクされた画像編集画面

しかし、私のプログラムがその画像にLinkFormat.SourceFullNameぶつかると、同じ画像のがローカルネットワーク上のパスを与えてくれます。たとえば、私が期待している実際の\\net-storage\customer\001 - customername\data\images\documents\image_file.jpg画像リンクとはまったく相関関係がありません。

ここで何が問題になっていますか?プログラムで正しい画像ソースを取得するにはどうすればよいですか?

sw_lasseに編集:(他のドキュメントでは)相対パスの画像を削除して単語のフィールドを更新した後、画像が見つからないため、これは相対パスであると確信しています。したがって、これは間違いなく相対的なパスです。

また、2つのパス(ネットワークと相対)には相互の相関関係がありません。ネットワーク上のイメージは完全に異なるフォルダー階層を使用するためdocument、相対パスには存在しないサブフォルダーが存在するのはそのためです。

4

1 に答える 1

0

私はあなたがVSTOC#コードを書いていることを知っています、そしてこれはVBAです、しかしこれはあなたが見ている奇妙な振る舞いを説明していると思います。

使用できません:

myPicPath = Options.DefaultFilePath(wdPicturesPath)

...ユーザーが別のフォルダから画像を挿入した場合、デフォルトのファイルパスはダイアログボックスからの実際の設定ではなく、そのフォルダを返すためです。代わりに、次を使用できます。

With Dialogs(wdDialogToolsOptionsFileLocations)
    .Path = "PICTURE-PATH"
    .Update
    myPicPath = .Setting

    If Not Right$(myPicPath, 1) = "\" Then
        myPicPath = myPicPath + "\"
    End If

    MsgBox myPicPath 
End With

同様に、以下は使用できません。

myDocPath = Options.DefaultFilePath (wdDocumentsPath)

デフォルトのドキュメントパスを取得します。これは、デフォルトのドキュメントパスではなく、現在のFileOpenパスを返すためです。

代わりに、以下を使用してください。

Dim myDocPath As String
myDocPath = Dialogs(wdDialogToolsOptionsFileLocations).Setting

'Add a "\" at the end of the path, unless the setting is already followed by a "\" -
'which it will be if the setting is set to a root folder 
If Not Right$(myDocPath, 1) = "\" Then
    myDocPath = myDocPath + "\"
End If

MsgBox myDocPath

最近、私はVBAをC#に変換するのがかなり得意です。機能しないコードを提供した場合は、このVBAを適切に変換します。

参照:Wordのデフォルトのドキュメントパスまたは画像パス設定を取得する方法

于 2012-11-24T03:35:55.207 に答える