利用NPOI生成word文档(c#)

时间:2022-11-06 10:02:50

WordTest.aspx.cs

using System;
using System.IO;
using System.Text;
using System.Web;
using System.Web.UI;
using NPOI.OpenXmlFormats.Wordprocessing;
using NPOI.XWPF.UserModel; namespace WebDemo
{
public partial class WordTest : Page
{
protected void Page_Load(object sender, EventArgs e)
{
} /// <summary>
/// 新增
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnPrint_Click(object sender, EventArgs e)
{
//创建document对象
var doc = new XWPFDocument(); //创建段落对象1
var p1 = doc.CreateParagraph();
p1.Alignment = ParagraphAlignment.CENTER; //字体居中
//创建run对象
//本节提到的所有样式都是基于XWPFRun的,
//你可以把XWPFRun理解成一小段文字的描述对象,
//这也是Word文档的特征,即文本描述性文档。
//来自Tony Qu http://tonyqus.sinaapp.com/archives/609
var runTitle = p1.CreateRun();
runTitle.IsBold = true;
runTitle.SetText("军检验收单");
runTitle.FontSize = ;
runTitle.SetFontFamily("宋体", FontCharRange.None); //设置雅黑字体 //创建段落对象2
var p2 = doc.CreateParagraph();
var run1 = p2.CreateRun();
run1.SetText(" 军检项目号:");
run1.FontSize = ;
run1.SetFontFamily("华文楷体", FontCharRange.None); //设置雅黑字体 #region 头部(6 rows) //基本row12,列5;头部6行,4列
var tableTop = doc.CreateTable(, );
tableTop.Width = *;
tableTop.SetColumnWidth(, ); /* 设置列宽 */
tableTop.SetColumnWidth(, ); /* 设置列宽 */
tableTop.SetColumnWidth(, ); /* 设置列宽 */
tableTop.SetColumnWidth(, ); /* 设置列宽 */
tableTop.SetColumnWidth(, ); /* 设置列宽 */ tableTop.GetRow().MergeCells(, ); /* 合并行 */
tableTop.GetRow().GetCell().SetParagraph(SetCellText(doc, tableTop, "产品名称"));
tableTop.GetRow().GetCell().SetParagraph(SetCellText(doc, tableTop, " ")); tableTop.GetRow().MergeCells(, );
tableTop.GetRow().GetCell().SetParagraph(SetCellText(doc, tableTop, "项目名称"));
tableTop.GetRow().GetCell().SetParagraph(SetCellText(doc, tableTop, " ")); tableTop.GetRow().MergeCells(, );
tableTop.GetRow()
.GetCell()
.SetParagraph(SetCellText(doc, tableTop, "施工依据", ParagraphAlignment.CENTER, ));
tableTop.GetRow()
.GetCell()
.SetParagraph(SetCellText(doc, tableTop, " ", ParagraphAlignment.CENTER, )); tableTop.GetRow().GetCell().SetParagraph(SetCellText(doc, tableTop, "检验方式"));
tableTop.GetRow().GetCell().SetParagraph(SetCellText(doc, tableTop, "独立检验"));
tableTop.GetRow().GetCell().SetParagraph(SetCellText(doc, tableTop, " "));
tableTop.GetRow().GetCell().SetParagraph(SetCellText(doc, tableTop, "联合检验"));
tableTop.GetRow().GetCell().SetParagraph(SetCellText(doc, tableTop, " ")); tableTop.GetRow().MergeCells(, );
tableTop.GetRow().GetCell().SetParagraph(SetCellText(doc, tableTop, "设备名称及编号"));
tableTop.GetRow().GetCell().SetParagraph(SetCellText(doc, tableTop, " "));
tableTop.GetRow().GetCell().SetParagraph(SetCellText(doc, tableTop, "设备制造厂"));
tableTop.GetRow().GetCell().SetParagraph(SetCellText(doc, tableTop, " "));
//tableTop.GetRow(4).GetCell(3).SetBorderBottom(XWPFtableTop.XWPFBorderType.NONE,0,0,""); tableTop.GetRow().MergeCells(, );
var para = new CT_P();
var pCell = new XWPFParagraph(para, tableTop.Body);
pCell.Alignment = ParagraphAlignment.LEFT; //字体居中 var r1c1 = pCell.CreateRun();
r1c1.SetText("检验要素共9项");
r1c1.FontSize = ;
r1c1.SetFontFamily("华文楷体", FontCharRange.None); //设置雅黑字体
tableTop.GetRow().GetCell().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
*/
var tableContent = doc.CreateTable(, );
tableContent.Width = *;
tableContent.SetColumnWidth(, ); /* 设置列宽 */
tableContent.SetColumnWidth(, ); /* 设置列宽 */
tableContent.SetColumnWidth(, ); /* 设置列宽 */
tableContent.SetColumnWidth(, ); /* 设置列宽 */
tableContent.SetColumnWidth(, ); /* 设置列宽 */ tableContent.GetRow().GetCell().SetParagraph(SetCellText(doc, tableContent, "序号"));
tableContent.GetRow().GetCell().SetParagraph(SetCellText(doc, tableContent, "检验要素"));
tableContent.GetRow().GetCell().SetParagraph(SetCellText(doc, tableContent, "指标要求"));
tableContent.GetRow().GetCell().SetParagraph(SetCellText(doc, tableContent, "实测值"));
tableContent.GetRow().GetCell().SetParagraph(SetCellText(doc, tableContent, "测量工具编号及有效期")); for (var i = ; i < ; i++)
{
tableContent.GetRow(i)
.GetCell()
.SetParagraph(SetCellText(doc, tableContent, i.ToString(), ParagraphAlignment.CENTER, ));
tableContent.GetRow(i)
.GetCell()
.SetParagraph(SetCellText(doc, tableContent, "检验要素", ParagraphAlignment.CENTER, ));
tableContent.GetRow(i)
.GetCell()
.SetParagraph(SetCellText(doc, tableContent, "指标要求", ParagraphAlignment.CENTER, ));
tableContent.GetRow(i)
.GetCell()
.SetParagraph(SetCellText(doc, tableContent, "实测值", ParagraphAlignment.CENTER, ));
tableContent.GetRow(i)
.GetCell()
.SetParagraph(SetCellText(doc, tableContent, "测量工具编号及有效期", ParagraphAlignment.CENTER, ));
} #endregion #region 底部内容 var tableBottom = doc.CreateTable(, );
tableBottom.Width = *; tableBottom.SetColumnWidth(, ); /* 设置列宽 */
tableBottom.SetColumnWidth(, ); /* 设置列宽 */
tableBottom.SetColumnWidth(, ); /* 设置列宽 */
tableBottom.SetColumnWidth(, ); /* 设置列宽 */ tableBottom.GetRow().MergeCells(, ); /* 合并行 */
tableBottom.GetRow()
.GetCell()
.SetParagraph(SetCellText(doc, tableBottom, "附件:", ParagraphAlignment.LEFT, ));
tableBottom.GetRow().Height = ; tableBottom.GetRow().MergeCells(, ); /* 合并行 */
tableBottom.GetRow()
.GetCell()
.SetParagraph(SetCellText(doc, tableBottom, "检验结论:", ParagraphAlignment.LEFT, ));
tableBottom.GetRow().Height = ; tableBottom.GetRow().GetCell().SetParagraph(SetCellText(doc, tableBottom, "施工部门"));
tableBottom.GetRow().GetCell().SetParagraph(SetCellText(doc, tableBottom, " "));
tableBottom.GetRow().GetCell().SetParagraph(SetCellText(doc, tableBottom, "报验日期"));
tableBottom.GetRow().GetCell().SetParagraph(SetCellText(doc, tableBottom, " ")); tableBottom.GetRow().GetCell().SetParagraph(SetCellText(doc, tableBottom, "军检次数"));
tableBottom.GetRow().GetCell().SetParagraph(SetCellText(doc, tableBottom, " "));
tableBottom.GetRow().GetCell().SetParagraph(SetCellText(doc, tableBottom, "军检日期"));
tableBottom.GetRow().GetCell().SetParagraph(SetCellText(doc, tableBottom, " ")); tableBottom.GetRow().GetCell().SetParagraph(SetCellText(doc, tableBottom, "检验员"));
tableBottom.GetRow().GetCell().SetParagraph(SetCellText(doc, tableBottom, " "));
tableBottom.GetRow().GetCell().SetParagraph(SetCellText(doc, tableBottom, "军代表"));
tableBottom.GetRow().GetCell().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))); var ms = new MemoryStream();
doc.Write(ms);
Response.AddHeader("Content-Disposition",
string.Format("attachment; filename={0}.doc",
HttpUtility.UrlEncode("文件名" + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff"),
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中的文字格式设置
var para = new CT_P();
var pCell = new XWPFParagraph(para, table.Body);
pCell.Alignment = ParagraphAlignment.CENTER; //字体居中
pCell.VerticalAlignment = TextAlignment.CENTER; //字体居中 var r1c1 = pCell.CreateRun();
r1c1.SetText(setText);
r1c1.FontSize = ;
r1c1.SetFontFamily("华文楷体", FontCharRange.None); //设置雅黑字体 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)
{
var para = new CT_P();
var pCell = new XWPFParagraph(para, table.Body);
//pCell.Alignment = ParagraphAlignment.LEFT;//字体
pCell.Alignment = align; var r1c1 = pCell.CreateRun();
r1c1.SetText(setText);
r1c1.FontSize = ;
r1c1.SetFontFamily("华文楷体", FontCharRange.None); //设置雅黑字体
r1c1.SetTextPosition(textPos); //设置高度 return pCell;
}
}
}

运行效果

上面的是webform版本的  用mvc搞了一下午遇到了一些问题 这次更新时间在2018/9/28

添加下列代码

  {
FileStream os = new FileStream(Server.MapPath("/Content/Word/" + jibenxinxis.xingming + ".doc"), FileMode.OpenOrCreate);
doc.Write(os); return File(new FileStream(Server.MapPath("/Content/Word") + "\\" + jibenxinxis.xingming + ".doc", FileMode.Open), "text/plain", Server.UrlEncode(jibenxinxis.xingming + ".doc"));
}

必须是get  不可以是ajax

这样才可以return file  最好用a标签访问控制器

利用NPOI生成word文档(c#)的更多相关文章

  1. 利用NPOI导出Word文档帮助类

    /// <summary> /// NPOI操作Word /// </summary> public class NpoiWordHelper { /// <summar ...

  2. 有哪位大侠操作过NPOI生成word文档,如何设置页眉页脚距离顶部和底部距离?

    #region 1.创建文档(页眉.页脚) XWPFDocument doc = new XWPFDocument(); //页面设置 A4:w=11906 h=16838 doc.Document. ...

  3. 利用NPOI生成DOCX文档

    首先安装NPOI控件: Install-Package NPOI 代码: using NPOI.OpenXmlFormats.Wordprocessing; using NPOI.XWPF.UserM ...

  4. 黄聪:利用OpenXml生成Word2007文档(转)

    原文:http://blog.csdn.net/francislaw/article/details/7568317 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 一Op ...

  5. 利用OpenXml生成Word2007文档

    一.OpenXml简介 利用C#生成Word文档并非一定要利用OpenXml技术,至少可以使用微软提供的Office相关组件来编程,不过对于Office2007(确切的说是Word.Excel和Pow ...

  6. JAVAWEB使用FreeMarker利用ftl把含有图片的word模板生成word文档,然后打包成压缩包进行下载

    这是写的另一个导出word方法:https://www.cnblogs.com/pxblog/p/13072711.html 引入jar包,freemarker.jar.apache-ant-zip- ...

  7. 使用Spire&period;Doc组件利用模板导出Word文档

    以前一直是用Office的组件实现Word文档导出,但是让客户在服务器安装Office,涉及到版权:而且Office安装,包括权限配置也是比较麻烦. 现在流行使用第三方组件来实现对Office的操作, ...

  8. POI生成word文档完整案例及讲解

    一,网上的API讲解 其实POI的生成Word文档的规则就是先把获取到的数据转成xml格式的数据,然后通过xpath解析表单式的应用取值,判断等等,然后在把取到的值放到word文档中,最后在输出来. ...

  9. PoiDemo【Android将表单数据生成Word文档的方案之二(基于Poi4&period;0&period;0)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用Poi实现android中根据模板文件生成Word文档的功能.这里的模板文件是doc文件.如果模板文件是docx文件的话,请阅读 ...

随机推荐

  1. Trianglify - 生成五彩缤纷的 SVG 背景图案

    Trianglify 是一个能够生成五颜六色的三角形图案的 JavaScript 库,可以用来作为 SVG 图像和 CSS 背景.它的灵感来自于 Btmills 的 Geopattern,并使用 d3 ...

  2. C&num; TcpClient TcpListener 简单练习01

    下面是读<Visual C#.Net 网络编程>整理的练习代码. 客户端发送命令给服务端,从服务器端获取所有人员的成绩或者指定人员的成绩. 命令格式为 GET 0|1 [Name].0为获 ...

  3. Oracle —— 表结构相关的SQL

    1.表基本信息(Table) select * from user_tables t, user_tab_comments c where c.table_name = t.table_name an ...

  4. JQ怎么跳出 each循环

    return false;——跳出所有循环:相当于 javascript 中的 break 效果. return true;——跳出当前循环,进入下一个循环:相当于 javascript 中的 con ...

  5. springboot:快速构建一个springboot项目

    前言: springboot作为springcloud的基础,springboot的热度一直很高,所以就有了这个springboot系列,花些时间来了解和学习为自己做技术储备,以备不时之需[手动滑稽] ...

  6. spring-boot子模块打包去掉BOOT-INF文件夹

    1.spring-boot maven打包,一般pom.xml文件里会加 <plugin> <groupId>org.springframework.boot</grou ...

  7. SpringMVC加载配置Properties文件的几种方式

    最近开发的项目使用了SpringMVC的框架,用下来感觉SpringMVC的代码实现的非常优雅,功能也非常强大, 网上介绍Controller参数绑定.URL映射的文章都很多了,写这篇博客主要总结一下 ...

  8. JustOj 1936&colon; 小明A&plus;B

    题目描述 小明今年3岁了, 现在他已经能够认识100以内的非负整数, 并且能够进行100以内的非负整数的加法计算. 对于大于等于100的整数, 小明仅保留该数的最后两位进行计算, 如果计算结果大于等于 ...

  9. 【转】 编写C&num;调用的C&plus;&plus;DLL

    最近一段时间,经常遇到这些问题,前一阵子研究了一下,没有记下来,没想到最近研究又有些不记得了,今天把它写下来以备忘. 一般我们提供给其他语言调用的DLL,都是用C或者C++编写,然后封装.我这边也是采 ...

  10. 《转》python学习(3)

    转自http://www.cnblogs.com/BeginMan/archive/2013/06/03/3114974.html 1.print语句调用str()函数显示,交互式解释器调用repr( ...