どうですか?Office Open XML文書を修正します.

4308 ワード

全文の転載は以下の通りですhttp://msdn.microsoft.com/zh-cn/library/bb669125.aspx
このテーマは、Office Open XMLドキュメントのオープン、変更、保存の例を示します.
Office Open XMLに関する詳細は、wwww.openxmldeverloper.orgを参照してください.

この例では、ドキュメント内の最初の段落要素を検索します.例は、段落からテキストを検索し、段落内のすべてのテキスト領域を削除します.最初の段落が大文字に変換されたテキストからなる新しいテキストフィールドを作成します.その後、変更されたXMLはOpen XMLパケットにプログレッシブ化され、パッケージを閉じます.
この例はWindowsBaseプログラム集中のクラスを使用します.System.IO.Packaging名前空間のタイプを使用しています.
 
public static class LocalExtensions
{
    public static string StringConcatenate(this IEnumerable
  
    source)
    {
        StringBuilder sb = new StringBuilder();
        foreach (string s in source)
            sb.Append(s);
        return sb.ToString();
    }

    public static string StringConcatenate
   
    (this IEnumerable
    
      source, Func
     
       func) { StringBuilder sb = new StringBuilder(); foreach (T item in source) sb.Append(func(item)); return sb.ToString(); } public static string StringConcatenate(this IEnumerable
      
        source, string separator) { StringBuilder sb = new StringBuilder(); foreach (string s in source) sb.Append(s).Append(separator); return sb.ToString(); } public static string StringConcatenate
       
        (this IEnumerable
        
          source, Func
         
           func, string separator) { StringBuilder sb = new StringBuilder(); foreach (T item in source) sb.Append(func(item)).Append(separator); return sb.ToString(); } } class Program { public static string ParagraphText(XElement e) { XNamespace w = e.Name.Namespace; return e .Elements(w + "r") .Elements(w + "t") .StringConcatenate(element => (string)element); } static void Main(string[] args) { const string fileName = "SampleDoc.docx"; const string documentRelationshipType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"; const string stylesRelationshipType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"; const string wordmlNamespace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main"; XNamespace w = wordmlNamespace; using (Package wdPackage = Package.Open(fileName, FileMode.Open, FileAccess.ReadWrite)) { PackageRelationship docPackageRelationship = wdPackage.GetRelationshipsByType(documentRelationshipType).FirstOrDefault(); if (docPackageRelationship != null) { Uri documentUri = PackUriHelper.ResolvePartUri(new Uri("/", UriKind.Relative), docPackageRelationship.TargetUri); PackagePart documentPart = wdPackage.GetPart(documentUri); // Load the document XML in the part into an XDocument instance. XDocument xDoc = XDocument.Load(XmlReader.Create(documentPart.GetStream())); // Find the styles part. There will only be one. PackageRelationship styleRelation = documentPart.GetRelationshipsByType(stylesRelationshipType).FirstOrDefault(); PackagePart stylePart = null; XDocument styleDoc = null; if (styleRelation != null) { Uri styleUri = PackUriHelper.ResolvePartUri(documentUri, styleRelation.TargetUri); stylePart = wdPackage.GetPart(styleUri); // Load the style XML in the part into an XDocument instance. styleDoc = XDocument.Load(XmlReader.Create(stylePart.GetStream())); } XElement paraNode = xDoc .Root .Element(w + "body") .Descendants(w + "p") .FirstOrDefault(); string paraText = ParagraphText(paraNode); // remove all text runs paraNode.Descendants(w + "r").Remove(); paraNode.Add( new XElement(w + "r", new XElement(w + "t", paraText.ToUpper()) ) ); // Save the XML into the package using (XmlWriter xw = XmlWriter.Create(documentPart.GetStream(FileMode.Create, FileAccess.Write))) { xDoc.Save(xw); } Console.WriteLine("New first paragraph: >{0}<", paraText.ToUpper()); } } } }
         
        
       
      
     
    
   
  
この記事は著者:陳希章が2009/7/16 10:54:50に発表しました.http://www.cnblogs.com/chenxizhang/
この著作権は著者の所有になります.転載できますが、作者の同意なしにこの声明を保留しなければなりません.文章のページの明確な位置で原文の接続を提供します.そうでなければ、法律責任を追及する権利を保留します.
より多くのブログ記事、および著者のブログ引用に関する完全な声明および協力に関する政策については、以下のサイトを参照してください.
本文はブログの同期と管理システムを使って、2009/7/16 10:55:23に陳希章@ブログ園から同期してきました.原文の住所:http://www.cnblogs.com/chenxizhang/archive/2009/07/16/1524655.html は、2009/7/16 2:55:00に発表されました.