首先我大概叙述一下我对这个东西的理解毕竟我也只是记录一下,确保下次自己在看的时候可以看懂,
所以写的比较详细且傻瓜首先这个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文档先生成在你的项目文件夹里,用户再下载你文件夹里的内容
成功点个赞评论下啊