openxmlword模板.docx
- 文档编号:16697158
- 上传时间:2023-07-16
- 格式:DOCX
- 页数:7
- 大小:17.26KB
openxmlword模板.docx
《openxmlword模板.docx》由会员分享,可在线阅读,更多相关《openxmlword模板.docx(7页珍藏版)》请在冰点文库上搜索。
openxmlword模板
竭诚为您提供优质文档/双击可除
openxml,word模板
篇一:
基于openxml工作的excel操作——sheet页拷贝并重写数据
通过openxml是c#程序员常用的工具,主要是针对office文档的操作,这里主要讲解一下通过openxml对现有模版sourceworkpart中的进行深度拷贝并渲染数据的方法。
对于openxml的新增sheet页有多种办法,比如workbookpart.addnewpart(),或者workbookpart.addpart(sourceworkpart);
对于第一种方法是在excel文档中添加新的sheet页的方法,网络上也有比较详细的办法,但是这种方案需要写大量的新建代码,而且导出的报表容易出现各种异常而导致错误而无法正常打开。
第二种办法虽然比较简单,而且不需要创建大量的代码,但是这只是sheet对象应用,如果通过代码去渲染数据时,会将sourceworkpart对象的sheet页内容也改写掉。
而我采用的是第三种办法,先通过openxml的spreadsheetwriter对象去创建新的sheet,再将sourceworkpart的表格内容复制过来,这样省去了创建sheet的不必要代码,也避免了因为对sourceworkpart的直接引用,而导致的数据覆盖现象。
代码部分:
this.stream=spreadsheetReader.create("settlement");//打开模版文件
this.document=spreadsheetdocument.open(this.stream,true);//创建doc对象
worksheetpartnewworksheetpart=spreadsheetwriter.insertworksheet(this.document,“封面1”);//在模版文件中创建新的sheet页对象,命名为封面1
spreadsheetReader.copysheet(this.document,"封面",newworksheetpart);//拷贝原模版中的“封面“sheet页,worksheetwriterwritersheet=newworksheetwriter(this.document,newworksheetpart);
//通过新的sheet返回worksheetwriter对象,就可以在复制后的模版上渲染数据了
1、insertworksheet方法是openxml封装好的函数,复杂的创建过程。
其中代码如下:
publicstaticworksheetpartinsertworksheet(spreadsheetdocumentdoc,stringsheetname)
{
//thanksgoestokoshinae@codeplexforthismethod
//getsheetswheresheetnameistheprovidedtext.
ienumerablesheets=doc.workbookpart.workbook.descendants().where(s=>s.name==sheetname);
//ifthespecifiedworksheetdoesnotexist,createit.
if(sheets.count()==0)
{
//Findoutthenextid
uintnewid=(uint)(doc.package.getRelationships().count()+1);
stringrid="relid"+newid;//donotsetthistorid...
if(string.isnullorempty(sheetname))sheetname=string.Format("sheet{0}",newid);
intsheetnumber=doc.workbookpart.worksheetparts.count()+1;
//createthenewworksheetpart
worksheetpartwsp=doc.workbookpart.addnewpart(rid);
//addimportantstuff:
-)
doc.workbookpart.workbook.sheets.appendchild(newsheet(){id=rid,sheetid=newid,name=sheetname});
wsp.worksheet=newworksheet();
wsp.worksheet.addnamespacedeclaration("r",
"http:
//schemas.openxmlformats.org/officedocument/20xx/relationships");
wsp.worksheet.appendchild(newsheetdimension());
wsp.worksheet.appendchild(newsheetViews()).appendchild(newsheetView(){workbookViewid=0});
wsp.worksheet.appendchild(newsheetFormatproperties(){defaultRowheight=15});wsp.worksheet.appendchild(newsheetdata());
wsp.worksheet.appendchild (newpagemargins(){left=0.7,Right=0.7,top=0.75,bottom=0.75,header=0.3,Footer=0.3});
//这部分容易被忽略
//storetherelationshipoftheworkbookandthesheet
doc.package.createRelationship(newuri("worksheets/sheet"+sheetnumber+".xml",urikind.Relative),
system.io.packaging.targetmode.internal,
"http:
//schemas.openxmlformats.org/officedocument/20xx/relationships/worksheet",rid);
doc.package.Flush();//!
!
!
//returnthenewworksheetpart
returnwsp;
}
//Returnthesheetwefoundinstead
return(worksheetpart)doc.workbookpart.getpartbyid(sheets.First().id);
}
2、spreadsheetReader.copysheet(this.document,"封面",newworksheetpart);
方法代码如下:
///
///sheet拷贝,需要先通过spreadsheetwriter.insertworksheet()函数创建,创建worksheetpart
///
///
///
///
publicstaticvoidcopysheet(spreadsheetdocumentdocument,stringsheetname,worksheetpartnewworksheetpart){
workbookpartworkbookpart=document.workbookpart;
worksheetpartsourceworksheetpart=spreadsheetReader.getworksheetpartbyname(document,sheetname);//查找目标模版sheet页
newworksheetpart.worksheet=(worksheet)sourceworksheetpart.worksheet.clonenode(true);
//通过深拷贝的方式直接拷贝目标模版的数据格式部分的xml,其他部分可以不需要。
workbookpart.workbook.save();
}
篇二:
word模板转换成xml文件
过程:
1建立新的xml文件
2遍历指定文档中的控件
3根据控件标记的首字母的不同判断控件内容
4将控件的标记及内容写入xml文件
代码:
privateconststringm_document=@"c:
\sampledata.xml";
xmlwritersettingssettings=newxmlwritersettings();
settings.indent=true;
xmlwriterwriter=null;
writer=xmlwriter.create(m_document,settings);
writer.writestartelement("content");
stringprefix=writer.lookupprefix("urn:
samples");
foreach(microsoft.office.interop.word.contentcontrolctrlindoc.contentcontrols){
if(ctrl.tag.equals("ltitle"))//writethetitle.
{
writer.writestartelement("title");
writer.writestring(ctrl.Range.text);
writer.writeendelement();
}
else
{
writer.writestartelement(ctrl.tag);
writer.writestring(ctrl.Range.text);
//writer.writeelementstring(ctrl.tag,ctrl.Range.text);
writer.writeendelement();
}
}
writer.writeendelement();
writer.Flush();
writer.close();
if(doc!
=null)
doc.close(refnullobj,refnullobj,refnullobj);
if(wordapp!
=null)
wordapp.quit(refnullobj,refnullobj,refnullobj);
生成的xml片段
转科记录
病案号:
单击此处输入文字。
姓名:
交换机
性别:
v
年龄:
单击此处输入文字。
转往科室:
单击此文字。
转科前病情、诊断及治疗经过:
单击此处输入文字。
转科目的及注意事项:
单击此处输入文字。
德辅道
转科时诊断
单击此处输入文字。
篇三:
java操作word(利用xml模板)
importjava.io.File;
importjava.io.FilenotFoundexception;
importjava.io.Fileoutputstream;
importjava.io.inputstream;
importjavax.xml.parsers.documentbuilder;
importjavax.xml.parsers.documentbuilderFactory;
importjavax.xml.transform.transformer;
importjavax.xml.transform.transformerconfigurationexception;
importjavax.xml.transform.transformerexception;
importjavax.xml.transform.transformerFactory;
importjavax.xml.transform.dom.domsource;
importjavax.xml.transform.stream.streamResult;
importorg.w3c.dom.nodelist;
importorg.w3c.dom.node;
importorg.w3c.dom.document;
importorg.w3c.dom.element;
publicclassoperatexml{
/**
*@paramargs
*/
publicstaticvoidmain(string[]args){
//todoauto-generatedmethodstub
operatexmlox=newoperatexml();
ox.operatexml();
}
publicvoidoperatexml(){
try{
documentbuilderFactoryfactory=documentbuilderFactory
.newinstance(openxml,word模板)();
documentbuilderbuilder=factory.newdocumentbuilder();
documentdocument=builder.parse(newFile("d:
/贷前核查输出模板.xml"));
elementelement=document.getdocumentelement();
//得到所有表格集合
nodelisttbllist=element.getelementsbytagname("w:
tbl");//w:
t标签组//得到第一张表
elementtbl1=(element)tbllist.item(0);
//得到第一张表中所有行
nodelistrowlist=tbl1.getelementsbytagname("w:
tr");
for(inti=1;i elementrownode=(element)rowlist.item(i);
//得到这行的所有单元格
nodelistcelllist=rownode.getelementsbytagname("w:
tc");//基于这次模版开始从每行的第二个单元格操作
for(intj=1;j if(j==1){
elementcellnode=(element)celllist.item(j);
//得到单元格底下的文本(p节点)
elementpnode=(element)cellnode
.getelementsbytagname("w:
p").item(0);//得到文本行
elementrnode=(element)pnode.getelementsbytagname("w:
r").item(0);
//如果有文本值,那么修改,没有则给p节点追加r节点if(rnode!
=null){
nodetnode=rnode.getelementsbytagname("w:
t").item(0);
tnode.settextcontent(i+"-"+j);
}else{
documentparent=pnode.getownerdocument();
elementr=null;
elementt=null;r=parent.createelement("w:
r");
t=parent.createelement("w:
t");
t.settextcontent(i+"-"+j);
pnode.appendchild(r);
r.appendchild(t);
}
}
}
}
savexml("d:
/贷前核查输出模板1.doc",document);
}catch(exceptionex){
system.out.println("有误");}}publicstaticvoidsavexml(stringfilename,documentdoc){//将document输出到文件transformerFactorytransFactory=transformerFactory.newinstance();try{transformertransformer=transFactory.newtransformer();transformer.setoutputproperty("indent","yes");
}
}domsourcesource=newdomsource();source.setnode(doc);streamResultresult=newstreamResult();result.setoutputstream(newFileoutputstream(filename));transformer.transform(source,result);}catch(transformerconfigurationexceptione){e.printstacktrace();}catch(transformerexceptione){e.printstacktrace();}catch(FilenotFoundexceptione){e.printstacktrace();}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- openxmlword 模板
![提示](https://static.bingdoc.com/images/bang_tan.gif)