本文示例源代码或素材下载
最近的项目(MOSS项目)需要,用户需要根据word模板生成相关的word文档,具体需求是根据infopath表单中的内容和相关的模板生成一份word文档
着手做之前想想要是用word api操作的话,后台进程,多用户并发操作等等问题
看来还是用openxml来操作比较好,于是找了找资料,实现了这小小的功能
现在把代码贴出来跟大家分享下
使用openxml技术时,首先需要引用windowsbase.dll
部分常量
conststringdocumentRelationshipType="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";
conststringstrUri="http://schemas.openxmlformats.org/wordprocessingml/2006/main";
staticList<string>bookmarkText;
stringbookmarkName;
该方法是将模板中所有标签都取出,并放到一个datatable中
voidbindTable(stringfileName)
{
dt=newDataTable();
dt.Columns.Add("标签",typeof(string));
dt.Columns.Add("内容",typeof(string));
DataRowdr;
Streamstrm=null;
PackagePartdocumentPart;
Packagepackage;
using(SPSitesite=newSPSite("http://ascentn-moss:8686/"))
{
SPWebweb=site.OpenWeb();
strm=web.GetFile(fileName).OpenBinaryStream();
documentPart=null;
package=Package.Open(strm,FileMode.Open,FileAccess.ReadWrite);
//FileStreamfs=newFileStream(fileName,FileMode.OpenOrCreate);
//PackagePartdocumentPart=null;
//Packagepackage=Package.Open(fileName,FileMode.Open,FileAccess.ReadWrite);
//MessageBox.Show(strm.Length.ToString());
//Packagepackage=Package.Open(strm,FileMode.Open,FileAccess.ReadWrite);
foreach(System.IO.Packaging.PackageRelationshipdocumentRelationshipinpackage.GetRelationshipsByType(documentRelationshipType))
{
NameTablent=newNameTable();
XmlNamespaceManagernsManager=newXmlNamespaceManager(nt);
nsManager.AddNamespace("w",strUri);
UridocumentUri=PackUriHelper.ResolvePartUri(newUri("/",UriKind.Relative),documentRelationship.TargetUri);
documentPart=package.GetPart(documentUri);
XmlDocumentxdoc=newXmlDocument();
xdoc.Load(documentPart.GetStream());
XmlNodeListnodeList=xdoc.SelectNodes("//w:bookmarkStart",nsManager);
foreach(XmlNodenodeinnodeList)
{
dr=dt.NewRow();
if(node.NextSibling.Name.ToString()=="w:bookmarkEnd")
{
bookmarkText=newList<string>();
bookmarkName=node.Attributes["w:name"].Value;
bookmarkText.Add("");
dr[0]=bookmarkName;
//dataGridView
}
else
{
bookmarkName=node.Attributes["w:name"].Value;
dr[0]=bookmarkName;
stringbookmarkId=node.Attributes["w:id"].Value;
bookmarkText=newList<string>();
XmlNodenextParentNode=node.ParentNode;
XmlNodenodeIterate=node.NextSibling;
while(nodeIterate.Name.ToString()!="w:bookmarkEnd")
{
if(nodeIterate.Name.ToString()=="w:r")
bookmarkText.Add(nodeIterate.InnerText);
nodeIterate=nodeIterate.NextSibling;
if(nodeIterate==null)
{
if(nextParentNode.NextSibling.Attributes.Count!=0)
{
if((nextParentNode.NextSibling.Attributes["w:id"].Value==bookmarkId))
{
nodeIterate=nextParentNode.NextSibling;
}
}
else
{
nextParentNode=nextParentNode.NextSibling;
nodeIterate=nextParentNode.FirstChild;
bookmarkText.Add('n'+nodeIterate.InnerText);
}
}
}
//dic.Add(bookmarkName,bookmarkText);
}
dt.Rows.Add(dr);
}
}
package.Close();
}
}
版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明!