npoi table样板填写并导出word
2017-08-09 15:29
218 查看
最近公司要做一个自己用的日志系统记录工作情况,最后生成一个word文档
word文档原始模板如下:
为了实现将每天的日志对应的填入表中,忙碌了一下午去网上搜素有关于npoi导出word的方法,但是网上那些东西,都和我这个有点区别,不能满足需求。
最后自己总结了一下npoi用法,希望能给各位和我一样初次使用npoi的小白一些帮助。
首先在自己的网站项目中放入一个已编辑过的模板:
将模板放入到自己网站项目的文件夹下面(我放入的路径是网站下面的document文件夹下):
最后就是代码阶段了:
前台页面放一个ImageButton(OnClick="btnExport_Click")来触发导出事件
后台代码如下:
protected void btnExport_Click(object sender, ImageClickEventArgs e)
{
string filePath = Server.MapPath("../Document/tmp.docx"); //模板文件路径
using (FileStream stream = File.OpenRead(filePath))
{
XWPFDocument doc = new XWPFDocument(stream);
XWPFTable table = doc.Tables[0];
foreach (XWPFTableRow row in table.Rows)
{
foreach (XWPFTableCell cell in row.GetTableCells())
{
ReplaceKey(cell, ((ImageButton)sender).CommandArgument.ToString());
}
}
string path = Server.MapPath("../Template/周工作任务报告.docx");
FileStream outfile = new FileStream(path, FileMode.Create);
doc.Write(outfile);
outfile.Close();
}
string strFilePath = Server.MapPath("../Template/周工作任务报告.docx");
string fileName = "周工作任务报告.docx";//客户端保存的文件名
FileStream fs = new FileStream(strFilePath, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}
private void ReplaceKey(XWPFTableCell cell, string ss) //替换模板中的关键字,实现导出
{
string today = DateTime.Now.DayOfWeek.ToString();
DateTime date = DateTime.Now.Date;
switch (today)
{
case "Tuesday": date = date.AddDays(-1); break;
case "Wednesday": date = date.AddDays(-2); break;
case "Thursday": date = date.AddDays(-3); break;
case "Friday": date = date.AddDays(-4); break;
case "Saturday": date = date.AddDays(-5); break;
case "Sunday": date = date.AddDays(-6); break;
} //这里主要是计算本周一的日期,方便在数据库中查找用户本周的日志
string[] s = new string[7];
for (int i = 0; i < 7; i++)
{
DateTime date2 = date.AddDays(i);
RzdjEntity model = new RzdjAction().GetContent(User.UCode, date2, date2.AddDays(1)); //查找并取出日志实体(RzdjEntity)
s[i] = "";
if (model != null)
s[i] = model.content;
}
int id = int.Parse(ss);
switch (cell.GetText()) //替换word模板中的内容
{
case "name": cell.RemoveParagraph(0); cell.SetText(User.Name); break;
case "depart": cell.RemoveParagraph(0); cell.SetText(User.DName); break;
case "job": cell.RemoveParagraph(0);
if (User.Name == "吴孟浩" || User.Name == "蒋力超")
cell.SetText("实习"); break;
case "date": cell.RemoveParagraph(0); cell.SetText(DateTime.Now.Date.ToString("yyyy/MM/dd")); break;
case "nextweek": cell.RemoveParagraph(0); cell.SetText(new WeeklyLogAction().GetInfo(id).NextWeek.ToString()); break;
//周一到周六的工作具体情况
case "Monday": cell.RemoveParagraph(0); cell.SetText(s[0]); break;
case "Tuesday": cell.RemoveParagraph(0); cell.SetText(s[1]); break;
case "Wednesday": cell.RemoveParagraph(0); cell.SetText(s[2]); break;
case "Thursday": cell.RemoveParagraph(0); cell.SetText(s[3]); break;
case "Friday": cell.RemoveParagraph(0); cell.SetText(s[4]); break;
case "Saturday": cell.RemoveParagraph(0); cell.SetText(s[5]); break;
case "Sunday": cell.RemoveParagraph(0); cell.SetText(""); break;
default: break;
}
}
最后效果如下:
在替换的过程中要注意:先清空单元格然后setText()
word文档原始模板如下:
为了实现将每天的日志对应的填入表中,忙碌了一下午去网上搜素有关于npoi导出word的方法,但是网上那些东西,都和我这个有点区别,不能满足需求。
最后自己总结了一下npoi用法,希望能给各位和我一样初次使用npoi的小白一些帮助。
首先在自己的网站项目中放入一个已编辑过的模板:
将模板放入到自己网站项目的文件夹下面(我放入的路径是网站下面的document文件夹下):
最后就是代码阶段了:
前台页面放一个ImageButton(OnClick="btnExport_Click")来触发导出事件
后台代码如下:
protected void btnExport_Click(object sender, ImageClickEventArgs e)
{
string filePath = Server.MapPath("../Document/tmp.docx"); //模板文件路径
using (FileStream stream = File.OpenRead(filePath))
{
XWPFDocument doc = new XWPFDocument(stream);
XWPFTable table = doc.Tables[0];
foreach (XWPFTableRow row in table.Rows)
{
foreach (XWPFTableCell cell in row.GetTableCells())
{
ReplaceKey(cell, ((ImageButton)sender).CommandArgument.ToString());
}
}
string path = Server.MapPath("../Template/周工作任务报告.docx");
FileStream outfile = new FileStream(path, FileMode.Create);
doc.Write(outfile);
outfile.Close();
}
string strFilePath = Server.MapPath("../Template/周工作任务报告.docx");
string fileName = "周工作任务报告.docx";//客户端保存的文件名
FileStream fs = new FileStream(strFilePath, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}
private void ReplaceKey(XWPFTableCell cell, string ss) //替换模板中的关键字,实现导出
{
string today = DateTime.Now.DayOfWeek.ToString();
DateTime date = DateTime.Now.Date;
switch (today)
{
case "Tuesday": date = date.AddDays(-1); break;
case "Wednesday": date = date.AddDays(-2); break;
case "Thursday": date = date.AddDays(-3); break;
case "Friday": date = date.AddDays(-4); break;
case "Saturday": date = date.AddDays(-5); break;
case "Sunday": date = date.AddDays(-6); break;
} //这里主要是计算本周一的日期,方便在数据库中查找用户本周的日志
string[] s = new string[7];
for (int i = 0; i < 7; i++)
{
DateTime date2 = date.AddDays(i);
RzdjEntity model = new RzdjAction().GetContent(User.UCode, date2, date2.AddDays(1)); //查找并取出日志实体(RzdjEntity)
s[i] = "";
if (model != null)
s[i] = model.content;
}
int id = int.Parse(ss);
switch (cell.GetText()) //替换word模板中的内容
{
case "name": cell.RemoveParagraph(0); cell.SetText(User.Name); break;
case "depart": cell.RemoveParagraph(0); cell.SetText(User.DName); break;
case "job": cell.RemoveParagraph(0);
if (User.Name == "吴孟浩" || User.Name == "蒋力超")
cell.SetText("实习"); break;
case "date": cell.RemoveParagraph(0); cell.SetText(DateTime.Now.Date.ToString("yyyy/MM/dd")); break;
case "nextweek": cell.RemoveParagraph(0); cell.SetText(new WeeklyLogAction().GetInfo(id).NextWeek.ToString()); break;
//周一到周六的工作具体情况
case "Monday": cell.RemoveParagraph(0); cell.SetText(s[0]); break;
case "Tuesday": cell.RemoveParagraph(0); cell.SetText(s[1]); break;
case "Wednesday": cell.RemoveParagraph(0); cell.SetText(s[2]); break;
case "Thursday": cell.RemoveParagraph(0); cell.SetText(s[3]); break;
case "Friday": cell.RemoveParagraph(0); cell.SetText(s[4]); break;
case "Saturday": cell.RemoveParagraph(0); cell.SetText(s[5]); break;
case "Sunday": cell.RemoveParagraph(0); cell.SetText(""); break;
default: break;
}
}
最后效果如下:
在替换的过程中要注意:先清空单元格然后setText()
相关文章推荐
- 使用NPOI将数据导出为word格式里的table
- NPOI导出word,以及对table的一些设置
- table导出为word或excel
- NPOI导出Word插入图片问题解决方案
- 直接把jsp中table内容导出到word或excel
- 使用NPOI实现word和excel的导入导出
- Table表格导出为Excel、csv、txt、sql、json、xml、Word格式
- NPOI 2.0导出word(docx格式)
- NPOI导出数据到Word
- 直接把jsp中table内容导出到word或excel
- 使用NPOI将TABLE内容导出到EXCEL
- asp.net 生成导出word表单 ,导出excel; dataTable生成xls文件,返回前台下载;asp.net启动excel错误 80070005;excel-xls columnName 不能改变; 读写excel的开源利器NPOI; 设置excel Cell的数据类型;
- DateTable利用NPOI导出Excel 公共方法
- 前台table里的值通过npoi导出excle
- 将HtmlTable内容导出到Excel,使用NPOI组件
- 使用NPOI2.1.3.1版本导出word附带表格和图片
- 使用NPOI实现word和excel的导入导出
- 将HtmlTable内容导出到Excel,使用NPOI组件 分类: ASP.NET 源代码 2012-12-17 13:37 2289人阅读 评论(3) 收藏
- NPOI 导出 Word (没有Office操作Word)
- 将HtmlTable内容导出到Excel,使用NPOI组件 分类: ASP.NET 源代码 2012-12-17 13:37 2288人阅读 评论(3) 收藏