3

Word 文書から XMLSchemaReference を削除したいと考えています。VBA コードを実行する場合、これは簡単です。

ActiveDocument.XMLSchemaReferences("ActionsPane3").Delete

VSTO で ThisDocument クラスを使用する場合、これも C# で簡単です。

Globals.ThisDocument.XMLSchemaReferences["ActionsPane3"].Delete();

ただし、(通常の Windows アプリケーションで) WordProcessingDocument のインスタンスを使用する場合、同じアクションを実行する方法がわかりません。C# コードをどのように記述すればよいでしょうか?

4

1 に答える 1

1

このような問題の場合、Open XML SDK 生産性向上ツールをダウンロードして、変更前と変更後のドキュメントを比較するのが最善の方法です。VSTO を使用してアクションスパンを追加し、ツールでパッケージを調べると、次のことに気付きました。

ここに画像の説明を入力

次に、あなたが与えたコードでアクションスパンを削除します:

Globals.ThisDocument.XMLSchemaReferences["ActionsPane3"].Delete();
this.Save();

ツール内のパッケージを見ると、次のようになっています (素晴らしいフリーハンドの書き込みに注目してください)。

ここに画像の説明を入力

削除する必要があるものを特定したので、open xml sdk を使用して作業を開始できます (using DocumentFormat.OpenXml.Packagingファイルを開いusing DocumentFormat.OpenXml.Wordprocessingて変更するため)。ツリー構造を使用してコードを構築できるように、ツールでドキュメントを開いたままにしておくと便利です。最初に、ドキュメントを開いて保存するためのコードを記述します。

byte[] byteArray = File.ReadAllBytes(@"C:\WorkSpace\test\WordTest.docx");

using (var stream = new MemoryStream())
{
   stream.Write(byteArray, 0, byteArray.Length);
   using (WordprocessingDocument doc = WordprocessingDocument.Open(stream, true))
   {
       //Logic here
   }

   using (FileStream fs = new FileStream(@"C:\WorkSpace\test\WordTest_modified.docx", 
          FileMode.Create))
   {
      stream.WriteTo(fs);
   }
}

を削除するAttachedSchemaには、次のコードが必要です。

doc.MainDocumentPart.DocumentSettingsPart
                    .Settings
                    .GetFirstChild<AttachedSchema>()
                    .Remove();

ご覧のとおり、ツリー構造を横に置いてこれを書くと非常に便利です。を削除するには、次のSchemaReferenceコードが必要です。

doc.MainDocumentPart.CustomXmlParts.First()
                    .CustomXmlPropertiesPart
                    .DataStoreItem
                    .SchemaReferences
                    .FirstChild
                    .Remove();

VSTO アプリケーションで削除した場合と同じです。

編集:/docProps/custom.xml次の行を実行してすべてのアクション ペインを削除すると、次のようになります。

doc.CustomFilePropertiesPart.Properties.RemoveAllChildren();

テスト ドキュメントを使用しているため (サイズに大きな変化はありません)、それが期待される動作であるかどうかを実際にテストすることはできませんが、アクション ペインが表示されなくなったので、探しているものである可能性があります (プロパティにはローカルの vsto ファイルへの参照)。マイクロソフトがこの種のことをもう少しうまく文書化してくれることを願っています.

于 2016-03-09T09:53:40.303 に答える