原文:http://www.cnblogs.com/afutureBoss/p/4074397.html?utm_source=tuicool&utm_medium=referral

最近项目需要用到导出word,巨硬的office组件,大多数人都不喜欢用(我就其中之一)。所有在网上尝试了几个插件。能够导出word的,除了NPOI之外,还有docX(免费),pageoffice(收费),aspose(也是收费的,虽然我有license,但是公司的另一个项目组用了破解版的,导致我也不敢用。毕竟license也是网上down下来的。)收费的,我想大家伙儿和我一样都不会去考虑,所有我只是尝试了一下docX,docX的代码量相对于NPOI来说少很多,但是这货中文的资料太少了(鄙视一下CSDN,妈蛋,是个用户写个代码就往上传,还他丫的下载一个10个积分……),捣腾了半天,最终能够生成word,但是要是往里面加图片,确实不知道怎弄。(如果你有幸看了这篇文字,并且还会,还望不吝)。

NPOI这个东西好是好,但是有个问题,如果不说,可能很多人都不会注意。它的版本总是让人感到错愕。一个不一样的版本,写法就会产生很多变化,下面代码中,注释掉的部分,就是因为引用的版本发生变化,改写了部分代码。

protected void Button1_Click(object sender, EventArgs e)
{
XWPFDocument doc = new XWPFDocument(); //创建新的word文档
XWPFParagraph p0 = doc.CreateParagraph(); //向新文档中添加段落
p0.Alignment = ParagraphAlignment.LEFT;
//p0.SetAlignment(ParagraphAlignment.LEFT); //段落对其方式为居中
XWPFRun r0 = p0.CreateRun();
r0.FontFamily = "宋体";
//r0.SetFontFamily("宋体");
r0.FontSize = ;
//r0.SetFontSize(20);
r0.SetBold(true);
r0.SetText("未登录过学生的账号密码");//向该段落中添加文字
XWPFParagraph p1 = doc.CreateParagraph();
p1.Alignment = ParagraphAlignment.LEFT;
//p1.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r1 = p1.CreateRun();
r1.FontFamily = "宋体";
//r1.SetFontFamily("宋体");
r1.FontSize = ;
//r1.SetFontSize(15);
r1.SetBold(true);
r1.SetText("(备注:已登录过的学生密码不显示)");
XWPFParagraph p2 = doc.CreateParagraph();
p2.Alignment = ParagraphAlignment.LEFT;
//p2.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r2 = p2.CreateRun();
//r2.SetFontFamily("宋体");
r2.FontFamily = "宋体";
//r2.SetFontSize(10);
r2.FontSize = ;
r2.SetBold(true);
r2.SetText("学校:XX一中");
XWPFParagraph p3 = doc.CreateParagraph();
p3.Alignment = ParagraphAlignment.LEFT;
//p3.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r3 = p2.CreateRun();
//r3.SetFontFamily("宋体");
r3.FontFamily = "宋体";
//r3.SetFontSize(10);
r3.FontSize = ;
r3.SetBold(true);
r3.SetText("班级:(7)");
XWPFParagraph p4 = doc.CreateParagraph();
p4.Alignment = ParagraphAlignment.LEFT;
//p4.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r4 = p4.CreateRun();
r4.FontFamily = "宋体";
//r4.SetFontFamily("宋体");
r4.FontSize = ;
//r4.SetFontSize(10);
r4.SetBold(true);
r4.SetText("班主任:ddd");
XWPFParagraph p5 = doc.CreateParagraph();
p5.Alignment = ParagraphAlignment.LEFT;
//p5.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r5 = p5.CreateRun();
r5.FontFamily = "宋体";
//r5.SetFontFamily("宋体");
r5.FontSize = ;
//r5.SetFontSize(10);
r5.SetBold(true);
r5.SetText("可以在此处添加备注:");
XWPFTable table = doc.CreateTable(, );
table.Width = ;//设置表格宽度
XWPFParagraph pIO = table.GetRow().GetCell().AddParagraph();
XWPFRun rIO = pIO.CreateRun();
rIO.FontFamily = "微软雅黑";
//rIO.SetFontFamily("微软雅黑");
rIO.FontSize = ;
//rIO.SetFontSize(12);
rIO.SetBold(true);
rIO.SetText("表格第一行第一列");
XWPFParagraph pINo = table.GetRow().GetCell().AddParagraph();
XWPFRun rINo = pINo.CreateRun();
//rINo.SetFontFamily("微软雅黑");
rINo.FontFamily = "微软雅黑";
//rINo.SetFontSize(12);
rINo.FontSize = ;
rINo.SetBold(true);
rINo.SetText("表格第一行第二列");
XWPFParagraph pIMm = table.GetRow().GetCell().AddParagraph();
XWPFRun rIMm = pIMm.CreateRun();
//rIMm.SetFontFamily("微软雅黑");
rIMm.FontFamily = "微软雅黑";
//rIMm.SetFontSize(12);
rIMm.FontSize = ;
rIMm.SetBold(true);
rIMm.SetText("表格第一行第三列");
XWPFParagraph pIName = table.GetRow().GetCell().AddParagraph();
XWPFRun rIName = pIName.CreateRun();
//rIName.SetFontFamily("微软雅黑");
rIName.FontFamily = "微软雅黑";
//rIName.SetFontSize(12);
rIName.FontSize = ;
rIName.SetBold(true);
rIName.SetText("表格第一行第4列");

      /*这段代码是插入图片的*/
XWPFParagraph gp = doc.CreateParagraph();
XWPFRun gr = gp.CreateRun();
var widthEmus = (int)(400.0 * );
var heightEmus = (int)(300.0 * );
using (FileStream picData = new FileStream("f:\\1.jpg", FileMode.Open, FileAccess.Read))
{
gr.AddPicture(picData, (int)PictureType.PNG, "11.png", widthEmus, heightEmus);
}
      /*这段代码是插入图片的*/

FileStream sw = File.Create("cutput.docx"); //写流 
doc.Write(sw); //...
sw.Close(); //在服务端生成文件
FileInfo file = new FileInfo("cutput.docx");//文件保存路径及名称 //注意: 文件保存的父文件夹需添加Everyone用户,并给予其完全控制权限
Response.Clear();
Response.ClearHeaders(); //清除报文头
Response.Buffer = false; //不适用页面缓存
Response.ContentType = "application/octet-stream"; //定义传入类型:二进制
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("1.docx", System.Text.Encoding.UTF8));//导出的word文档的名字
Response.AppendHeader("Content-Length", file.Length.ToString());
Response.WriteFile(file.FullName);
Response.Flush(); //以上将生成的word文件发送至用户浏览器
File.Delete("cutput.docx"); //清除服务端生成的word文件 }

使用NPOI2.1.3.1版本导出word附带表格和图片的更多相关文章

  1. C#通过模板导出Word(文字,表格,图片)

    C#通过模板导出Word(文字,表格,图片)   C#导出Word,Excel的方法有很多,这次因为公司的业务需求,需要导出内容丰富(文字,表格,图片)的报告,以前的方法不好使,所以寻找新的导出方法, ...

  2. .net使用AsposeWord导出word table表格

    本文为原创,转载请注明出处 1.前言 .net平台下导出word文件还可以使用Microsoft.Office.Interop和NPOI,但是这两者都有缺点,微软的Office.Interop组件需要 ...

  3. word模板导出的几种方式:第二种:C#通过模板导出Word(文字,表格,图片) 占位符替换

    原文出处:https://www.cnblogs.com/ilefei/p/3508463.html 一:模板的创建   (注意文件后缀只能是.docx或.doct) 在需要位置 插入-文档部件-域, ...

  4. 【转】Word之表格、图片的题注(抬头)自动编号

    问:word中的表格怎么自动插入题注(即表头的编号自动编号)? 答: 1首先搞清楚自动编号的意思.自动插入题注的意思是,在你在word中新建或者复制一个word表格的时候,表头的编号就自动生成了,而不 ...

  5. 前台导出Word文档思路步骤总结(freemarker)

    1. 需求是导出word带表格,表格列数不变,行数由数据库的值决定: 2. 导出最开始想的是直接前端导出,使用了jquery-wordexport插件,导出后,表格边框全没了,无法使用: 3. 采用了 ...

  6. Asp.net通过模板(.dot/Html)导出Word,同时导出图片

    一.Office组件导出Word(服务器配置麻烦) 需要引用Office的DLL,在下文的附件中,不同的Offic版本用的不一样,虽然高级版本可以兼容低级的,不过,还是统一版本最好 贴上核心代码(转载 ...

  7. Java导出Word利用freemarker(含图片)

    制作Word模版 建议使用高版本的office做,尽量不要用WPS做,生成xml会出现乱码 编码要统一,推荐UTF-8 建好模板,将模板另存为xml格式,建议原来模板不要删,xml的如果后期打不开,还 ...

  8. NPOI导出word,以及对table的一些设置

    参考网址:http://www.aiuxian.com/article/p-1970779.html NPOI版本:2.1.3.1 最终效果图: 代码: /// <summary> /// ...

  9. C# 导出word文档及批量导出word文档(1)

         这里用到了两个dll,一个是aspose.word.dll,另外一个是ICSharpCode.SharpZipLib.dll,ICSharpCode.SharpZipLib.dll是用于批量 ...

随机推荐

  1. AE IRasterCursor 改变栅格图层像素值

    1 public void ChangePixelValue(double xMax, double xMin, double yMax, double yMin,double[,] PixelCha ...

  2. 细说IIS异常日志 — 你必须知道的功能

    最近在跟QAD用Webservice搞接口做数据维护,搞的哥那个叫头大,遇到很多问题,系统的log4net根本就无法记录.话说QAD调我某一个接口,可能包含几百个字段,而且QAD是个产品,所以我这边提 ...

  3. Linux 权限设置

    一.文件和目录权限 在Linux系统中,用户可以对每一个文件或目录都具有访问权限,这些访问权限决定了谁能访问,以及如何访问这些文件和目录. 1.文件权限简介 在Linux系统中,每一位用户都有对文件或 ...

  4. 一次Oracle 11g+FluentNHibernate AutoMapping组合尝试

    本文的上下文环境 操作系统:Win7 x64 Ultimate开发工具:Visual Studio 2013 一.前言 在以前开发的大多数场景下,使用的开发语言是C#,使用的数据库是Sql Serve ...

  5. ios调用本地拨打电话,发送短信

    电话.短信是手机的基础功能,iOS中提供了接口,让我们调用.这篇文章简单的介绍一下iOS的打电话.发短信在程序中怎么调用. 1.打电话   [[UIApplication sharedApplicat ...

  6. session的常用方法。

    void setAttribute(String attribute, Object value) 设置Session属性.value参数可以为任何Java Object.通常为Java Bean.v ...

  7. Unable to install breakpoint in

    Unable to install breakpoint inXXXX due to missing line number attributes.modify compiler options to ...

  8. mongoDB学习笔记:了解与安装

    初次使用mongoDB是在2013年,项目组为了新产品的研发,使用了mongoDB,作为项目组的一名测试员,也就跟着学起来了. 1.了解mongoDB Mongo DB ,是目前在IT行业非常流行的一 ...

  9. php学习笔记

    header("Content-Type:text/html;charset=utf-8");//设置中文请求中文 $host = "localhost";// ...

  10. 移动端touch事件影响click事件以及在touchmove添加preventDefault导致页面无法滚动的解决方法

    这两天自己在写一个手机网页,用到了触屏滑动的特效,就是往右滑动的时候左侧隐藏的菜单从左边划出来. 做完之后在手机原生浏览器中运行正常,但在QQ和微信中打开,发现touchmove只会触发一次,而且to ...