c# word 根据模版导出word文档

问题描述

小弟再做个word文档导出,要求可以根据模版导出多条数据放在一个word中,但是替换标签时出现了字符串过长的问题有没有别的替换方式呢stringtemplateFile="E:\dsc\wwwroot\download\导出模版.doc";stringfileNameWord="E:\dsc\wwwroot\download\temp\20140804110822.doc";DataTabledt=getDataTable();boolret=false;Microsoft.Office.Interop.Word.Applicationapp=newMicrosoft.Office.Interop.Word.Application();Microsoft.Office.Interop.Word.Documentdoc=newMicrosoft.Office.Interop.Word.Document();objectObj_FileName=fileNameWord;objectVisible=false;objectReadOnly=false;objectmissing=System.Reflection.Missing.Value;try{File.Copy(templateFile,fileNameWord,true);doc=app.Documents.Open(refObj_FileName,refmissing,refReadOnly,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refVisible,refmissing,refmissing,refmissing,refmissing);doc.Activate();doc.Tables[1].Select();//复制第一个表格,如果有多条粘贴到尾部app.Selection.Copy();//如果导入多条要把原来的模版粘贴下来for(inti=0;i<dt.Rows.Count;i++){objectreplaceArea=Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;for(intj=0;j<dt.Columns.Count;j++){objectreplaceKey="$"+dt.Columns[j].ToString()+"$";objectreplaceValue=dt.Rows[i][j].ToString();doc.Tables[i+1].Range.Find.Execute(refreplaceKey,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refreplaceValue,refreplaceArea,refmissing,refmissing,refmissing,refmissing);}if(i+1!=dt.Rows.Count)//这里是导入多条把刚才的模版粘贴到尾部{objectmymissing=System.Reflection.Missing.Value;objectmyunit=Microsoft.Office.Interop.Word.WdUnits.wdStory;app.Selection.EndKey(refmyunit,refmymissing);objectpBreak=(int)Microsoft.Office.Interop.Word.WdBreakType.wdPageBreak;app.Selection.TypeParagraph();app.Selection.Paste();}}doc.Save();ret=true;}catch(Exception){}finally{objecto=false;doc.Close(refo,refmissing,refmissing);app.Quit(refo,refmissing,refmissing);}returnret;

解决方案

解决方案二:
在模板word里定义书签,然后要导出的时候,从模板copy一份,打开,在书签里插入内容,就OK了而不要把之前里面已经存在的内容复制来复制去的
解决方案三:
引用1楼Z65443344的回复:

在模板word里定义书签,然后要导出的时候,从模板copy一份,打开,在书签里插入内容,就OK了而不要把之前里面已经存在的内容复制来复制去的

嗯这个我这里要导出多条数据而不是单条数据,多条数据要求多个表格,书签的方法导出单条的好用
解决方案四:
可以设置多个书签
解决方案五:
namespaceExmaple{publicpartialclassGvExprot2:System.Web.UI.Page{protectedvoidPage_Load(objectsender,EventArgse){//getData();}//publicvoidgetData()//{//////创建连接对象cn,准备好连接//SqlConnectioncn=newSqlConnection("DataSource=.;InitialCatalog=Person;IntegratedSecurity=True");//////创建连接对象sqlcommand命令对象,准备好命令 //SqlCommandcmd=newSqlCommand("SELECT*FROM[TStudent]",cn);////创建适配器对象da,其作用是真正的向数据库提交查询或更新//SqlDataAdapterda=newSqlDataAdapter(cmd);//////创建数据集对象ds,实质是建立内存与数据库的一个映射//DataSetds=newDataSet();//////创建数据集对象ds,实质是建立内存与数据库的一个映射//da.Fill(ds,"[TStudent]");////this.gvPersonList.DataSource=ds.Tables[0].DefaultView;//////给数据源赋值 //this.gvPersonList.DataSource=ds;////绑定数据//this.gvPersonList.DataBind();//}///<summary>///导出数据函数///</summary>///<paramname="FileType">导出文件MIME类型</param>///<paramname="FileName">导出文件的名称</param>privatevoidExprot(StringFileType,StringFileName){//恢复分页gvPersonList.AllowPaging=false;//为GridView重新绑定数据源gvPersonList.DataBind();//getData();Response.Clear();Response.BufferOutput=true;//设定输出字符集Response.Charset="GB2312";Response.ContentEncoding=System.Text.Encoding.UTF8;Response.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(FileName,System.Text.Encoding.UTF8));//设置输出流HttpMiME类型(导出文件格式)Response.ContentType=FileType;//关闭ViewStatePage.EnableViewState=false;System.Globalization.CultureInfocultureInfo=newSystem.Globalization.CultureInfo("ZH-CN",true);System.IO.StringWriterstringWriter=newSystem.IO.StringWriter(cultureInfo);HtmlTextWritertextWriter=newHtmlTextWriter(stringWriter);gvPersonList.RenderControl(textWriter);//把HTML写回游览器Response.Write(stringWriter.ToString());Response.End();Response.Flush();//恢复分页gvPersonList.AllowPaging=true;//为GridView重新绑定数据源gvPersonList.DataBind();//getData();}//导出ExcelprotectedvoidbtnToExcel_Click(objectsender,EventArgse){Exprot("application/ms-excel","Employee.xls");}//导出WordprotectedvoidbtnToWord_Click(objectsender,EventArgse){//这里将导出的方法抽取了出来使用Exprot("application/ms-word","Employee.doc");}//确认在运行时为指定的ASP.NET服务器控件呈现在HtmlForm控件中。//(检验Asp.Net服务器空间是否呈现在HTMLForm控件中)publicoverridevoidVerifyRenderingInServerForm(Controlcontrol){#region/*对程序说明,在asp.net1.1中由于对控件呈现不是很严格,*所以无需overridevoidVerifyRenderingInServerForm(Controlcontrol)这个方法*但在asp.net2.0中,控件的校验严格了,RenderControl代码只有走正常流程在render方法*中它自己调用才能成功,在你自己写的事件方法中调用就会出现这个错误。这个错误信息有点误导,*你明明写在服务器控件Form内,它照样会这样提醒你,*实际上是asp.net2.0设置了内部变量控制RenderControl不允许在Render方法之外被轻易调用。*如果不overrideVerifyRenderingInServerForm就会报错。*我们overridevoidVerifyRenderingInServerForm(Controlcontrol)这个方法,*里面不写任何代码即可*///base.VerifyRenderingInServerForm(control);#endregion}///<summary>///分页///</summary>protectedvoidgvPersonList_PageIndexChanging(objectsender,GridViewPageEventArgse){gvPersonList.PageIndex=e.NewPageIndex;//BindGridView();}}}
解决方案六:
引用3楼Z65443344的回复:

可以设置多个书签

嗯我的模版是这样的如果这个数据是多条的话程序需要copy模版中的表格粘贴到文档的尾部,这个是copy过的替换书签的方法好像,书签不能重名
解决方案七:
将多个word文档导出到一个word文档privateWord.ApplicationG_wa;//定义Word应用程序privateobjectG_missing=//定义G_missing字段并添加引用System.Reflection.Missing.Value;privateOpenFileDialogG_OpenFileDialog;//定义打开文件对话框privateSaveFileDialogG_SaveFileDialog;//定义保存文件对话框privateList<string>G_Str_Files=newList<string>();//定义字符串集合privatevoidbtn_split_Click(objectsender,EventArgse){btn_Merge.Enabled=false;//停用合并按钮ThreadPool.QueueUserWorkItem(//开始线程池(pp)=>//使用lambda表达式{G_wa=newMicrosoft.Office.Interop.Word.Application();//创建应用程序对象Word.DocumentP_MainDocument=//新建合并文档对象G_wa.Documents.Add(refG_missing,refG_missing,refG_missing,refG_missing);foreach(stringP_StrinG_Str_Files)//遍历文档的集合{objectP_strs=P_Str;//创建object对象Word.DocumentP_Document=G_wa.Documents.Open(//打开Word文档refP_strs,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refo);Word.RangeP_Range_temp=//得到文档全部范围P_Document.Range(refG_missing,refG_missing);P_Range_temp.Select();//选择文档全部范围P_Range_temp.Copy();//复制文档全部范围Word.RangeP_Range_temp2=//得到文档的范围P_MainDocument.Range(refG_missing,refG_missing);objectP_end=Word.WdCollapseDirection.wdCollapseEnd;//创建object对象P_Range_temp2.Collapse(refP_end);//折叠文档范围P_Range_temp2.Select();//选择档的最后位置P_Range_temp2.Paste();//粘贴文档内容((Word._Document)P_Document).Close(refG_missing,refG_missing,//关闭文档refG_missing);}objectP_SavePath=G_SaveFileDialog.FileName;//创建object对象P_MainDocument.SaveAs(//保存合并后的文档refP_SavePath,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing);((Word._Application)G_wa.Application).Quit(//退出应用程序refG_missing,refG_missing,refG_missing);this.Invoke(//调用窗体线程(MethodInvoker)(()=>//使用lambda表达式{Clipboard.Clear();//清空剪切板MessageBox.Show(//提示已经创建Word"成功合并Word文档!","提示!");btn_Merge.Enabled=true;//启用合并按钮}));});}

时间: 2024-09-12 23:01:30

c# word 根据模版导出word文档的相关文章

POI通过模版导出word,无法添加换行符

问题描述 POI通过模版导出word,无法添加换行符 我是通过预先定义一个word模版的方式,在里面定义一些特殊字符,然后在导出word时先读取这个模版文档,然后根据传入的map对象将模版中的特殊字符换乘要换的内容,但是如果要换的内容里面加入换行的话 ,无论加入什么换行符都无效,"nr""""全都试过了,没有用,求大神指点.坐等答复.代码如下:`// 读取word模板 FileInputStream fis = new FileInputStream(ne

Word Web App新增PDF文档阅读功能

微软现在在打造云端服务的进度上可谓不遗余力,本周Word Web App网页版应用刚刚又加入了浏览PDF格式文档的功能.这为那些不愿掏钱购买完整版Office 2013套装的用户提供了更大的便利. 在Office Web Apps网页应用博客的文章中,微软表示这一新特性的加入是专为那些使用SkyDrive.Outlook.com和Office 365的用户准备的."邮件附件中的PDF或是存储于SkyDrive中的PDF文档都可以在浏览器中更为快速方便地查看,而不用管设备类型或者设备中是否安装有P

Word 2013原生支持PDF文档编辑

尽管微软对PDF颇有微词,甚至认为它是文档的坟墓,但是Office 2013却并没 有放弃对PDF文档的兼容,甚至相比之前版本其兼容性更加强大了.Office 2010 可以将文档保存为PDF,但这是单向操作,你不能直接在Office中打开PDF文档进 行编辑,但是在Office 2013中,你能够这么做了! 在Word 2013中,你可 以直接将PDF文档转换为Word并编辑内容.方法也十分简单,首先,在Word 2013 中打开PDF文档: 点 击"开启编辑"(Enable Edi

Word和WPS通用的文档排版

Word和WPS通用的文档排版技巧 无论用Word还是WPS排版文档时难免会使用文本对齐.段落设置的功能,本文总结了Word和WPS通用的文本排版技巧,希望对大家排版的工作有所帮助. 1.单元格数字小数点对齐 选中要处理小数点对齐的数字,如果是表格内的某行.某列一组数字的需要对齐,可选中单元格,接着在"格式"菜单下选择"制表位"命令打开"制表位"对话框. 在"制表位位置"下输入制表位数值,在"对齐方式"中选

word怎么给你的文档添加稿纸式样?

  word怎么给你的文档添加稿纸式样?           添加方法 1.在word选项页面里有一个"页面布局"选项,下图标红处: 2.单击打开界面如下: 3.在界面里有个"稿纸"区域,如下标红处: 4.单击点开它,设置界面如下: 5.设置说明如下图:

在Word 2007中打开多文档方法小结

在Word 2007中打开多文档方法小结 大家知道,如果想打开多个Word2007文档,可以将所有需要打开的文档选择上,然后单击鼠标右键,选择"打开",这样文件就被一一打开了,但是打开多个窗口,不但占用系统资源,而且也不利于操作编辑.其实,按照笔者的步骤去做,上述问题将会迎刃而解. 首先,打开一个空白文档,然后将需要打开的文档全部选中,单击"复制",在Word2007空白文档中任意位置单击"粘贴",这样之后,每个文档都会被 粘贴到这个Word20

Word制作方格稿纸的文档的方法

Word制作方格稿纸的文档的方法   1.单击"布局"选项卡的"段落"选项组,点击"稿纸设置". 2.设置格式为"方格式稿纸",单击"确定"按钮.

Office怎么给word、Excel和PPT文档加密

  Office怎么给word.Excel和PPT文档加密          ● 用Office软件自身来加密文档 用Office软件自身就可以给文档加密.以Word为例,打开要加密的文档,从"文件"菜单中选择"信息→保护文档→用密码进行加密",输入密码之后,文档就被保护起来了.Excel和PPT中文档加密方法类似. 用Office设置文档密码还有一种方法,那就是选择"文件→另存为"命令,在另存窗口的"保存"按钮旁,选择&qu

Word里超简单的文档加密方法步骤

  [分析处理] 在使用Word的过程中,对一些涉及到商业秘密等重要信息的文件采用加密处理是非常好的习惯.具体到对文档进行加密处理,主要有以下两种方法: 方法一,使用Word的[工具]菜单进行设置.操作步骤如下: 1.使用Word打开需要加密的文档. 2.在Word中选择[工具]菜单下的[选项]菜单项,打开[选项]对话框. 3.打开[保存]选项卡,在文件的共享选项区域的[打开权限密码]和[修改权限密码]文本框中输入密码. 4.单击[确定]按钮. 5.使用菜单命令或者工具栏按钮保存文件,同时就完成