Npoi导出word(Peanuts)
来源:互联网 发布:邯郸seo 编辑:程序博客网 时间:2024/04/30 11:43
一个项目,要做一个从数据库读取数据,然后导出到word,因为涉及到后台数据库的读取,决定用npoi来导出word。
NPOI源码地址:http://npoi.codeplex.com/
NPOI 2.0 api文档: http://www.npoi.info/npoi2tutorial
因为npoi操作word的文章比较少,在由于版本不同,相关的函数可能不一样,这个就需要大家自己去慢慢的探索了。
例如:作者的api文档中
c.字体加粗
r1.SetBold(true);
实际我在调用时,调用的接口是 r1c1.IsBold = 12;
我使用的版本是:NPOI v2.2.0.0
需要引用的命名空间如下
using NPOI.XWPF.UserModel;
using NPOI.OpenXmlFormats.Wordprocessing;
最终效果图如下:
关键代码如下:
/// <summary> /// 新增 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnPrint_Click(object sender, EventArgs e) { //创建document对象 XWPFDocument doc = new XWPFDocument(); //创建段落对象 XWPFParagraph p1 = doc.CreateParagraph(); p1.Alignment = ParagraphAlignment.CENTER;//字体居中 //创建run对象 //本节提到的所有样式都是基于XWPFRun的, //你可以把XWPFRun理解成一小段文字的描述对象, //这也是Word文档的特征,即文本描述性文档。 //来自Tony Qu http://tonyqus.sinaapp.com/archives/609 XWPFRun runTitle = p1.CreateRun(); runTitle.IsBold = true; runTitle.SetText("军检验收单"); runTitle.FontSize = 16; runTitle.SetFontFamily("宋体", FontCharRange.None);//设置雅黑字体 XWPFParagraph p2 = doc.CreateParagraph(); XWPFRun run1 = p2.CreateRun(); run1.SetText(" 军检项目号:"); run1.FontSize = 12; run1.SetFontFamily("华文楷体", FontCharRange.None);//设置雅黑字体 #region 头部(6 rows) //基本row12,列5;头部6行,4列 XWPFTable tableTop = doc.CreateTable(6, 5); tableTop.Width = 1000 * 5; tableTop.SetColumnWidth(0, 1300);/* 设置列宽 */ tableTop.SetColumnWidth(1, 500);/* 设置列宽 */ tableTop.SetColumnWidth(2, 1000);/* 设置列宽 */ tableTop.SetColumnWidth(3, 500);/* 设置列宽 */ tableTop.SetColumnWidth(4, 1700);/* 设置列宽 */ tableTop.GetRow(0).MergeCells(1, 4);/* 合并行 */ tableTop.GetRow(0).GetCell(0).SetParagraph(SetCellText(doc, tableTop, "产品名称")); tableTop.GetRow(0).GetCell(1).SetParagraph(SetCellText(doc, tableTop, " ")); tableTop.GetRow(1).MergeCells(1, 4); tableTop.GetRow(1).GetCell(0).SetParagraph(SetCellText(doc, tableTop, "项目名称")); tableTop.GetRow(1).GetCell(1).SetParagraph(SetCellText(doc, tableTop, " ")); tableTop.GetRow(2).MergeCells(1, 4); tableTop.GetRow(2).GetCell(0).SetParagraph(SetCellText(doc, tableTop, "施工依据", ParagraphAlignment.CENTER, 45)); tableTop.GetRow(2).GetCell(1).SetParagraph(SetCellText(doc, tableTop, " ", ParagraphAlignment.CENTER, 45)); tableTop.GetRow(3).GetCell(0).SetParagraph(SetCellText(doc, tableTop, "检验方式")); tableTop.GetRow(3).GetCell(1).SetParagraph(SetCellText(doc, tableTop, "独立检验")); tableTop.GetRow(3).GetCell(2).SetParagraph(SetCellText(doc, tableTop, " ")); tableTop.GetRow(3).GetCell(3).SetParagraph(SetCellText(doc, tableTop, "联合检验")); tableTop.GetRow(3).GetCell(4).SetParagraph(SetCellText(doc, tableTop, " ")); tableTop.GetRow(4).MergeCells(3, 4); tableTop.GetRow(4).GetCell(0).SetParagraph(SetCellText(doc, tableTop, "设备名称及编号")); tableTop.GetRow(4).GetCell(1).SetParagraph(SetCellText(doc, tableTop, " ")); tableTop.GetRow(4).GetCell(2).SetParagraph(SetCellText(doc, tableTop, "设备制造厂")); tableTop.GetRow(4).GetCell(3).SetParagraph(SetCellText(doc, tableTop, " ")); //tableTop.GetRow(4).GetCell(3).SetBorderBottom(XWPFtableTop.XWPFBorderType.NONE,0,0,""); tableTop.GetRow(5).MergeCells(0, 4); CT_P para = new CT_P(); XWPFParagraph pCell = new XWPFParagraph(para, tableTop.Body); pCell.Alignment = ParagraphAlignment.LEFT;//字体居中 XWPFRun r1c1 = pCell.CreateRun(); r1c1.SetText("检验要素共9项"); r1c1.FontSize = 12; r1c1.SetFontFamily("华文楷体", FontCharRange.None);//设置雅黑字体 tableTop.GetRow(5).GetCell(0).SetParagraph(pCell); //table.GetRow(6).GetCell(0).SetParagraph(SetCellText(doc, table, "序号")); //table.GetRow(6).GetCell(1).SetParagraph(SetCellText(doc, table, "检验要素")); //table.GetRow(6).GetCell(2).SetParagraph(SetCellText(doc, table, "指标要求")); //table.GetRow(6).GetCell(3).SetParagraph(SetCellText(doc, table, "实测值")); //table.GetRow(6).GetCell(4).SetParagraph(SetCellText(doc, table, "测量工具编号及有效期")); #endregion #region 检验要素列表部分(数据库读取循环显示) /* 打印1页:小于8行数据,创建9行; * 打印2页:大于8小于26行数据,创建27行。增加18 * 打印3页:大于26小于44行数据,创建45行。增加18 */ XWPFTable tableContent = doc.CreateTable(45, 5); tableContent.Width = 1000 * 5; tableContent.SetColumnWidth(0, 300);/* 设置列宽 */ tableContent.SetColumnWidth(1, 1000);/* 设置列宽 */ tableContent.SetColumnWidth(2, 1000);/* 设置列宽 */ tableContent.SetColumnWidth(3, 1000);/* 设置列宽 */ tableContent.SetColumnWidth(4, 1700);/* 设置列宽 */ tableContent.GetRow(0).GetCell(0).SetParagraph(SetCellText(doc, tableContent, "序号")); tableContent.GetRow(0).GetCell(1).SetParagraph(SetCellText(doc, tableContent, "检验要素")); tableContent.GetRow(0).GetCell(2).SetParagraph(SetCellText(doc, tableContent, "指标要求")); tableContent.GetRow(0).GetCell(3).SetParagraph(SetCellText(doc, tableContent, "实测值")); tableContent.GetRow(0).GetCell(4).SetParagraph(SetCellText(doc, tableContent, "测量工具编号及有效期")); for (int i = 1; i < 45; i++) { tableContent.GetRow(i).GetCell(0).SetParagraph(SetCellText(doc, tableContent, i.ToString(), ParagraphAlignment.CENTER, 50)); tableContent.GetRow(i).GetCell(1).SetParagraph(SetCellText(doc, tableContent, "检验要素", ParagraphAlignment.CENTER, 50)); tableContent.GetRow(i).GetCell(2).SetParagraph(SetCellText(doc, tableContent, "指标要求", ParagraphAlignment.CENTER, 50)); tableContent.GetRow(i).GetCell(3).SetParagraph(SetCellText(doc, tableContent, "实测值", ParagraphAlignment.CENTER, 50)); tableContent.GetRow(i).GetCell(4).SetParagraph(SetCellText(doc, tableContent, "测量工具编号及有效期", ParagraphAlignment.CENTER, 50)); } #endregion #region 底部内容 XWPFTable tableBottom = doc.CreateTable(5, 4); tableBottom.Width = 1000 * 5; tableBottom.SetColumnWidth(0, 1000);/* 设置列宽 */ tableBottom.SetColumnWidth(1, 1500);/* 设置列宽 */ tableBottom.SetColumnWidth(2, 1000);/* 设置列宽 */ tableBottom.SetColumnWidth(3, 1500);/* 设置列宽 */ tableBottom.GetRow(0).MergeCells(0, 3);/* 合并行 */ tableBottom.GetRow(0).GetCell(0).SetParagraph(SetCellText(doc, tableBottom, "附件:", ParagraphAlignment.LEFT, 80)); tableBottom.GetRow(0).Height = 30; tableBottom.GetRow(1).MergeCells(0, 3);/* 合并行 */ tableBottom.GetRow(1).GetCell(0).SetParagraph(SetCellText(doc, tableBottom, "检验结论:", ParagraphAlignment.LEFT, 80)); tableBottom.GetRow(1).Height = 30; tableBottom.GetRow(2).GetCell(0).SetParagraph(SetCellText(doc, tableBottom, "施工部门")); tableBottom.GetRow(2).GetCell(1).SetParagraph(SetCellText(doc, tableBottom, " ")); tableBottom.GetRow(2).GetCell(2).SetParagraph(SetCellText(doc, tableBottom, "报验日期")); tableBottom.GetRow(2).GetCell(3).SetParagraph(SetCellText(doc, tableBottom, " ")); tableBottom.GetRow(3).GetCell(0).SetParagraph(SetCellText(doc, tableBottom, "军检次数")); tableBottom.GetRow(3).GetCell(1).SetParagraph(SetCellText(doc, tableBottom, " ")); tableBottom.GetRow(3).GetCell(2).SetParagraph(SetCellText(doc, tableBottom, "军检日期")); tableBottom.GetRow(3).GetCell(3).SetParagraph(SetCellText(doc, tableBottom, " ")); tableBottom.GetRow(4).GetCell(0).SetParagraph(SetCellText(doc, tableBottom, "检验员")); tableBottom.GetRow(4).GetCell(1).SetParagraph(SetCellText(doc, tableBottom, " ")); tableBottom.GetRow(4).GetCell(2).SetParagraph(SetCellText(doc, tableBottom, "军代表")); tableBottom.GetRow(4).GetCell(3).SetParagraph(SetCellText(doc, tableBottom, " ")); #endregion //保存文件到磁盘WinForm //string docPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "DocxWord"); //if (!Directory.Exists(docPath)) { Directory.CreateDirectory(docPath); } //string fileName = string.Format("{0}.doc", HttpUtility.UrlEncode("jjysd" + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff"), System.Text.Encoding.UTF8)); //FileStream out1 = new FileStream(Path.Combine(docPath, fileName), FileMode.Create); //doc.Write(out1); //out1.Close(); #region 保存导出WebForm //Response.Redirect(ResolveUrl(string.Format(@"~\DocxWord\{0}", fileName))); System.IO.MemoryStream ms = new System.IO.MemoryStream(); doc.Write(ms); Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.doc", HttpUtility.UrlEncode("文件名" + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff"), System.Text.Encoding.UTF8))); Response.BinaryWrite(ms.ToArray()); Response.End(); ms.Close(); ms.Dispose(); //using (MemoryStream ms = new MemoryStream()) //{ // doc.Write(ms); // Response.ClearContent(); // Response.Buffer = true; // Response.ContentType = "application/octet-stream"; // Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.doc", HttpUtility.UrlEncode("军检验收单" + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff"), System.Text.Encoding.UTF8))); // Response.BinaryWrite(ms.ToArray()); // //Response.End(); // Response.Flush(); // doc = null; // ms.Close(); // ms.Dispose(); //} #endregion }
/// <summary> /// 设置字体格式 /// </summary> /// <param name="doc"></param> /// <param name="table"></param> /// <param name="setText"></param> /// <returns></returns> public XWPFParagraph SetCellText(XWPFDocument doc, XWPFTable table, string setText) { //table中的文字格式设置 CT_P para = new CT_P(); XWPFParagraph pCell = new XWPFParagraph(para, table.Body); pCell.Alignment = ParagraphAlignment.CENTER;//字体居中 pCell.VerticalAlignment = TextAlignment.CENTER;//字体居中 XWPFRun r1c1 = pCell.CreateRun(); r1c1.SetText(setText); r1c1.FontSize = 12; r1c1.SetFontFamily("华文楷体", FontCharRange.None);//设置雅黑字体 //r1c1.SetTextPosition(20);//设置高度 return pCell; } /// <summary> /// 设置单元格格式 /// </summary> /// <param name="doc">doc对象</param> /// <param name="table">表格对象</param> /// <param name="setText">要填充的文字</param> /// <param name="align">文字对齐方式</param> /// <param name="textPos">rows行的高度</param> /// <returns></returns> public XWPFParagraph SetCellText(XWPFDocument doc, XWPFTable table, string setText, ParagraphAlignment align, int textPos) { CT_P para = new CT_P(); XWPFParagraph pCell = new XWPFParagraph(para, table.Body); //pCell.Alignment = ParagraphAlignment.LEFT;//字体 pCell.Alignment = align; XWPFRun r1c1 = pCell.CreateRun(); r1c1.SetText(setText); r1c1.FontSize = 12; r1c1.SetFontFamily("华文楷体", FontCharRange.None);//设置雅黑字体 r1c1.SetTextPosition(textPos);//设置高度 return pCell; }
设置table的宽度,以及没列的宽度代码如下:
XWPFTable tableTop = doc.CreateTable(6, 5); tableTop.Width = 1000 * 5;/* 设置table宽度,必须设置width,SetColumnWidth才有效 */ tableTop.SetColumnWidth(0, 1300);/* 设置第一列宽 */ tableTop.SetColumnWidth(1, 500);/* 设置第二列宽 */ tableTop.SetColumnWidth(2, 1000);/* 设置列宽 */ tableTop.SetColumnWidth(3, 500);/* 设置列宽 */ tableTop.SetColumnWidth(4, 1700);/* 设置列宽 */
tableTop.GetRow(0).MergeCells(1, 4);/* 合并列 */
XWPFRun r1c1 = pCell.CreateRun();
r1c1.SetText(setText);
r1c1.FontSize = 12;
r1c1.SetFontFamily("华文楷体", FontCharRange.None);//设置雅黑字体
r1c1.SetTextPosition(textPos);//设置高度
- Npoi导出word(Peanuts)
- npoi导出word-webform
- NPOI导出数据到Word
- NPOI导出Word插入图片问题解决方案
- npoi table样板填写并导出word
- NPOI 导出 Word (没有Office操作Word)
- NPOI WORD
- 使用NPOI实现word和excel的导入导出
- MVC通过NPOI.dll导出excel、word文档
- NPOI读取word 2007
- 利用npoi生成word
- 使用第三方组件NPOI和iTextSharp根据DataTable导出Excel、Word、Pdf
- C#使用NPOI进行word相关操作和导出(1)
- NPOI导出Excel
- 利用npoi导出excel
- NPOI导出Excel
- 使用NPOI导入导出
- NPOI Excel导入导出
- QT5 学习之路24---Qt 绘制系统简介
- tcp要点学习-断开连接
- UVALive 7146 muliset<> 容器用法 防御塔
- 惯性导航之欧拉角与万向节死锁(三)
- Bootstrap CSS——按钮式下拉菜单
- Npoi导出word(Peanuts)
- 数据结构实践——停车场模拟(栈和队列综合)
- [转载] 黄志敏:一条数据新闻是如何用7步生产出来的?
- ubuntu和windows双系统修改启动顺序
- sizeof面试题选
- Vim入门学习
- 马哥运维笔记----5
- Android学习记录:SQLite数据库、res中raw的文件调用
- 例题8-2 联合国大楼 UVa 1605