有的時候我們需要在程序中處理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 System
Collections
Generic;
using System
Text;
using System
IO;
using System
IO
Packaging;
namespace WordProcess
{
class Program
{
static void Main(string[] args)
{
string filePath =
test
docx
;
string content = null;
string contentType;
CompressionOption option;
PackageRelationshipCollection relations;
try
{
//打開docx文件
using (Package zip = System
IO
Packaging
Package
Open(fileZip
FileMode
OpenOrCreate
FileAccess
ReadWrite))
{
foreach (PackagePart part in zip
GetParts())
{
//尋找頁腳所在的文件
if (part
Uri
OriginalString ==
/word/footer
xml
)
{
StreamReader sr = new StreamReader(part
GetStream());
content = sr
ReadToEnd();
//替換內容
if (content != null)
content = content
Replace(
http://www
google
cn
http://www
cnblogs
com
);
sr
Close();
contentType = part
ContentType;
option = part
CompressionOption;
relations = part
GetRelationships();
//刪除 footer
xml
zip
DeletePart(part
Uri);
//創建一個新的 footer
xml
Uri tempUri = PackUriHelper
CreatePartUri(new Uri(
/word/footer
xml
UriKind
Relative));
PackagePart tempPart = zip
CreatePart(tempUri
contentType
option);
//將修改後的 footer
xml
using (StreamWriter sw = new StreamWriter(tempPart
GetStream()))
{
sw
Write(content);
sw
Flush();
sw
Close();
}
//創建tempart與各XML文件之間的關系
非常重要
foreach (PackageRelationship relation in relations)
{
tempPart
CreateRelationship(relation
TargetUri
relation
TargetMode
relation
RelationshipType
relation
Id);
}
zip
Close();
break;
}
}
}
}
catch (Exception ex)
{
throw new Exception(ex
Message);
}
}
}
}
以上代碼復制後可以直接運行只需在debug目錄下創建一個word()文檔並插入頁腳當然也可以更改一下代碼裡的設置 該方法同樣適用於Microsoft Office Excel 和Microsoft Office PowerPoint 利用這種方法可以實現以操作XML文件的方式對以上三種文檔進行操作比如去掉文檔中的寫保護替換或刪除部分內容等此方法占用內存少執行效率也比較高 第一次想把文章放到首頁不足之處請大家指教一定改正!
From:http://tw.wingwit.com/Article/program/net/201311/15513.html