熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

.Net中處理Word 2007文檔的一種方法

2013-11-13 12:15:19  來源: .NET編程 

  有的時候我們需要在程序中處理Word文檔比如刪除或替換掉文檔中的某些字符串實現這個功能有很多方法我這裡介紹一種方法個人認為其效率要優於其它方法但本方法目前只適用於office 中的ExcelWord PowerPoint 下面引用一些msdn上關於office 的介紹 Microsoft Office system為Microsoft Office Excel Microsoft Office Word 和Microsoft Office PowerPoint 采用了基於XML的文件格式新的格式增強了文件與數據的管理能力數據恢復能力以及與業務線系統的互操作能力它們是對早期版本的二進制文件的擴展任何支持XML的應用程序都可以訪問新文件格式當中的數據並與之協同工作這些應用程序並不需要成為Microsoft Office system或Microsoft產品的一部分用戶也可以使用標准的轉換來提取或重新組織數據另外有關安全性的擔憂也大大的降低因為信息是存儲在XML當中的它從本質上來講都是純文本的因此數據可以沒有任何障礙地通過企業防火牆進行傳遞

  注意

  不要將Office Open XML格式與Microsoft Windows XML Paper Specification格式相混淆Office Open XML格式使用Open Packaging ConventionsXML Paper Specification (XPS)也使用它但是這兩種格式在許多重要的方面是不同的XPS是一個頁面內的固定的文檔格式它是在Microsoft Windows Vista操作系統當中所引入的而Office Open XML格式是面向Office Word Office Excel 和Office PowerPoint 的完全可編輯的文件格式雖然它們在XML和ZIP壓縮的使用方面有很多相似的地方但是它們在文件格式的設計和使用目的上還是有著很大的不同

  為了打開一個Word XML文件

  創建一個臨時目錄來存儲文件和它的部件
  創建一個Word 文檔包括文本圖片以及其它元素保存為一個docx文件
  在文件名的末端添加一個zip擴展名
  雙擊文件這時將會在ZIP應用程序當中打開該文件您可以查看組成文件的每個部件(可以不用winrar壓縮工具打開以windows默認的zip格式打開)
   將這些部件提取到剛才創建的臨時目錄當中

  這時就可以看到組成docx文件的所有XML格式的文件這裡需要大家詳細閱讀一下我上面給的鏈接的內容現在我主要介紹一下在net中處理word()文檔的一種方法需要說明的是在net frameword 中並沒有提供相關的類來處理zip格式的文件net framework 中提供了一個類Package所屬的命名空間為SystemIOPackaging因此在本例中要實現對word文檔的處理必須安裝net frameword 或者 在引用中要添加對WindowsBasedll的引用這個DLL文件在windows 系統裡位於C:\Program Files\Reference Assemblies\Microsoft\Framework\v\目錄下
我做的這個例子是替換Word頁腳中的鏈接將http://wwwgooglecn/ 替換為http://wwwcnblogscom/其它的處理可以用類似的方法來操作下面是代碼:

 using System;
 using SystemCollectionsGeneric;
 using SystemText;
 using SystemIO;
 using SystemIOPackaging;
 
 namespace WordProcess
 {
     class Program
    {
        static void Main(string[] args)
        {
            string filePath = testdocx;
            string content = null;

            string contentType;
            CompressionOption option;
            PackageRelationshipCollection relations;

            try
            {
               
                //打開docx文件
                using (Package zip = SystemIOPackagingPackageOpen(fileZip FileModeOpenOrCreate FileAccessReadWrite))
                {

                    foreach (PackagePart part in zipGetParts())
                    {
                        //尋找頁腳所在的文件
                        if (partUriOriginalString == /word/footerxml)
                        {
                            StreamReader sr = new StreamReader(partGetStream());
                            content = srReadToEnd();
                            //替換內容
                            if (content != null)
                                content = contentReplace(http://wwwgooglecn http://wwwcnblogscom);
                            srClose();

                            contentType = partContentType;
                            option = partCompressionOption;
                            relations = partGetRelationships();

                            //刪除 footerxml
                            zipDeletePart(partUri);

                            //創建一個新的 footerxml
                            Uri tempUri = PackUriHelperCreatePartUri(new Uri(/word/footerxml UriKindRelative));
                            PackagePart tempPart = zipCreatePart(tempUri contentType option);

                            //將修改後的 footerxml
                            using (StreamWriter sw = new StreamWriter(tempPartGetStream()))
                            {
                                swWrite(content);
                                swFlush();
                                swClose();
                            }

                            //創建tempart與各XML文件之間的關系非常重要
                            foreach (PackageRelationship relation in relations)
                            {
                                tempPartCreateRelationship(relationTargetUri relationTargetMode relationRelationshipType relationId);
                            }

                            zipClose();

                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(exMessage);
            }
        }
    }
}

  以上代碼復制後可以直接運行只需在debug目錄下創建一個word()文檔並插入頁腳當然也可以更改一下代碼裡的設置 該方法同樣適用於Microsoft Office Excel 和Microsoft Office PowerPoint 利用這種方法可以實現以操作XML文件的方式對以上三種文檔進行操作比如去掉文檔中的寫保護替換或刪除部分內容等此方法占用內存少執行效率也比較高 第一次想把文章放到首頁不足之處請大家指教一定改正!


From:http://tw.wingwit.com/Article/program/net/201311/15513.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.