2011-07-19 5 views
2

私は、数多くのコンテンツコントロールを含む単語ドキュメントを用意しています。これらはカスタムXML部分にマップされます。その場でドキュメントをビルドするために、カスタムXML部分を上書きするだけです。カスタムXMLパーツを使用してWordコンテンツコントロールを非表示にする

問題は、特定のアイテムを定義しなければ、ドキュメントのスペースがドキュメント内に表示され、その下にあるアイテムを押し下げて残りのドキュメントと矛盾して見えるということです。ここで

は、私のコードの基本的な例です:

var path = HttpContext.Current.Server.MapPath("~/Classes/Word/LawyerBio.docx"); 
using (WordprocessingDocument myDoc = WordprocessingDocument.Open(path, true)) 
{ 
     //create new XML string 
     //these values will populate the template word doc 
     string newXML = "<root>"; 

     if (!String.IsNullOrEmpty(_lawyer["Recognition"])) 
     { 
      newXML += "<recognition>"; 
      newXML += _text.Field("Recognition Title"); 
      newXML += "</recognition>"; 
     } 
     if (!String.IsNullOrEmpty(_lawyer["Board Memberships"])) 
     { 
      newXML += "<boards>"; 
      newXML += _text.Field("Board Memberships Title"); 
      newXML += "</boards>"; 
     } 
     newXML += "</root>"; 
     MainDocumentPart mainPart = myDoc.MainDocumentPart; 

     //delete old xml part 
     mainPart.DeleteParts<CustomXmlPart>(mainPart.CustomXmlParts); 

     //add new xml part 
     CustomXmlPart customXml = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml); 
     using(StreamWriter ts = new StreamWriter(customXml.GetStream())) 
     { 
      ts.Write(newXML); 
     } 
     myDoc.Close(); 
} 

は、これらのコンテンツコントロールが実際に/非表示を折りたたむようにする方法はありますか?

+0

私はこれも今実行中です。これを達成するための最良の方法についての洞察はありますか? 2013年には、コンテンツコントロールの繰り返しで機能させることを望んでいますが、直感的ではなく、ハッキングのように感じます。 – JoeBrockhaus

+0

@JoeBrockhausそれは数年経ちましたが、私はコンテンツコントロールにそれが見えないようにするオプションがあるのを覚えているようです。私はこれがコードではなくWordのレイアウトを通して設定されたと思います。うまくいけば、それは正しい道を導きます。 –

答えて

0

Wordでdocxを開く前にいくつかの前処理をしなければならないと思います。

前処理アプローチの例として、OpenDoPEは、未定義のものを除外するために使用できる「条件」を定義しています。

+0

XMLで直接編集する必要はありませんでした。 –

関連する問題