Aspose.Words使用word模板中的书签/域插入信息并导出

首先我大概叙述一下我对这个东西的理解毕竟我也只是记录一下,确保下次自己在看的时候可以看懂,
所以写的比较详细且傻瓜首先这个word文档不是凭空生成的,是你事先就把文档创建好的,里边的内容,
格式都是实现创建好的只留下一些需要插入数据的地方,当然这些需要插入数据的地方也不是空着的,
是用的书签,接下来看图
tip:图片点击可以放大看原图


 


 这就是我预先做好的一个简单的文档,这段教程中只需要看前两行,第三行是我用来添加多行数据的,暂且不看

你以为第二行是空的,那就错了,我们点击插入,点书签,可以看到这个框

 

 

 可以看到里面已经有了好几个书签,分别对应我上边写的的id,姓名那些,你可以选中一个书签点击定位,光标就可以跳到该书签的位置,注意,一个位置只放一个书签。

这时候我的六个空白格里是有了六个书签的,这时候把该模板放到你的项目文件夹里,接下来就开始操作项目

右键你的项目-管理NuGet程序包,搜索Aspose.Words点击下载安装,提示不用管,下载就行了
接着引入命名空间,我用的C#:
using Aspose.Words;
然后看代码:
看不懂的话可以私信问我

      //前台下载按钮对应的方法名
        protected void SaveDoc(object sender,EventArgs e)
        {
            //这里是预先定义好的模板的路径
            string docpath = HttpContext.Current.Server.MapPath("/信息表模板.doc");
            //操作该路径下的文件即模板
            Document doc = new Document(docpath);
            DocumentBuilder builder = new DocumentBuilder(doc);
            BookMarkReplace(doc, builder, "userid", userid.Value.Trim()) ;
            BookMarkReplace(doc, builder, "username", username.Value.Trim());
            BookMarkReplace(doc, builder, "usersex", usersex.Value.Trim());
            BookMarkReplace(doc, builder, "userage", userage.Value.Trim());
            BookMarkReplace(doc, builder, "userheight", userheight.Value.Trim());
            BookMarkReplace(doc, builder, "userkg", userkg.Value.Trim());//创建保存路径文件建名字
            string mydir = Server.MapPath("/DocFile/");
            //创建保存文件的默认名字
            string name = username.Value;
            doc.Save(mydir + name + "信息表.doc");
            //跳转到文档,即用户可下载文档
            Response.Redirect("/DocFile/" + name + "信息表.doc");
        }

        /// <summary>
        /// 封装BookMArkReplace
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="builder"></param>
        /// <param name="bookmark">书签名称</param>
        /// <param name="value">替换内容</param>
        public static void BookMarkReplace(Document doc,DocumentBuilder builder,string bookmark,string value)
        {
            //bm是文档中书签的内容
            var bm = doc.Range.Bookmarks[bookmark];
            //不为空说明有内容,则不做操作,一般为空,除非出错
            if (bm == null)
            {
                return;
            }
            //将书签中的内容清空
            bm.Text = "";
            //将数据插入到书签中
            builder.MoveToBookmark(bookmark);
            bm.Text =value;
        }


BookMarkReplace是封装好替换书签的方法,因为有很多书签需要替换,所以封装一个方法可以省去很多事,
这也是面向对象的三大特性之一
然后我们简单设计一下前端页面,为了更直观看到输出的文档,我们把前端也写成表格的样子,文字自己输入
关键代码如下:

 <style type="text/css">
        .texts{
            border:0px;
        }
        td{
            border:1px solid blue;
            text-align:center;
        }
        tr{
            height:50px;
            
        }
        table{
            width:500px;
            border:3px solid red;
        }
        
    </style>
    
    <div style="height:100px;width:1055px;border:3px solid green;padding-left:40%;padding-top:30px">
        <asp:LinkButton runat="server" class="btn btn-success" OnClick="SaveDoc">下载word</asp:LinkButton>
    </div>


    <div>
        <table>
            <tbody>
                <tr>
                    <td>编号:</td>
                    <td>姓名:</td>
                    <td>性别:</td> 
                    <td>年龄:</td>
                    <td>身高:</td>
                    <td>体重:</td>
                </tr>
                <tr>
                    <td><input type="text" class="texts" placeholder="输入编号" id="userid" runat="server"/></td>
                    <td><input type="text" class="texts" placeholder="输入姓名" id="username" runat="server"/></td>
                    <td><input type="text" class="texts" placeholder="输入性别" id="usersex" runat="server"/></td>
                    <td><input type="text" class="texts" placeholder="输入年龄" id="userage" runat="server"/></td>
                    <td><input type="text" class="texts" placeholder="输入身高" id="userheight" runat="server"/></td>
                    <td><input type="text" class="texts" placeholder="输入体重" id="userkg" runat="server"/></td>
                </tr>
            </tbody>
        </table>
    </div>

效果如下:

 


输入内容后点击下载word,就会执行你写的方法,将你输入的每一个数据都替换你模板里的书签

接下来自己尝试一些输入内容下载文档看看能不能成功替换

演示一下效果吧

第一步:

 

 

 第二步:

 

 第三步打开下载好的文件:

 

 上边的红色字还有下边的aspose水印都是aspose包自带的,可以从网上找一些纯净的包自己导入

对了,每一次点击下载都会在你的项目文件夹里生成一个word表,顺序是
word文档先生成在你的项目文件夹里,用户再下载你文件夹里的内容
成功点个赞评论下啊


原创帖子,转载请注明:https://www.cnblogs.com/ccgn/articles/16038104.html

posted @ 2022-04-18 10:28  给自己个晚安  阅读(2857)  评论(3编辑  收藏  举报