近期项目中用到Excel导出功能,之前都是用普通的office组件导出的方法,今天尝试用下NPOI,故作此文以备日后查阅。

1.NPOI官网http://npoi.codeplex.com/,下载最新工具包。

2.选择.net版本(例如dotnet4),引用其中的dll。

3.后台代码

using System;
using System.Web;
using System.Data;
using System.Configuration;
using System.IO;
using Test_DBUtility;
using NPOI;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;public partial class Handlers_ExportExcel : System.Web.UI.Page
{protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){string act = Request["action"].ToString();DataTable dt = new DataTable();string sql = string.Empty;int[] array = new int[] { };switch (act){case "export":sql = @"select M_MEDIUM 产品图片,PN,CN_NAME 产品名称,EN_NAME 英文名称,DESC_CN 中文描述,DESC_EN 英文描述,REMARKS 备注描述,MANUFACTURER_PN 厂家编码,PROVIDER_FULL_NAME 供应商,SP_RESULT 审批结果," +"RANK 产品定级,BASE_STOCK 基础库存,COST 实际成本,CURRENT_PRICE 现价,SPECIAL_PRICE 特价 from viewsdb_en.dbo.View_ProductExcelExport";dt = SqlHelper.Query(sql).Tables[0];array = new int[] { 20, 15, 20, 20, 80, 80, 80, 20, 40, 10, 10, 10, 12, 12, 12 }; //定义列宽NpoiExcel(dt, "操作表", array);break;}}}/// <summary>/// NPOI导出EXCEL/// </summary>/// <param name="dt">数据源</param>/// <param name="title">导出文件的名称</param>/// <param name="array">列宽数组</param>public void NpoiExcel(DataTable dt, string title, int[] array){NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();NPOI.SS.UserModel.ISheet sheet = book.CreateSheet("Sheet1");NPOI.SS.UserModel.IRow headerrow = sheet.CreateRow(0);headerrow.Height = 30 * 20;ICellStyle style = book.CreateCellStyle();style.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;style.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;style.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;style.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;style.WrapText = true;style.Alignment = HorizontalAlignment.Center;style.VerticalAlignment = VerticalAlignment.Center;/*标题*/for (int i = 0; i < dt.Columns.Count; i++){ICell cell = headerrow.CreateCell(i);cell.CellStyle = style;cell.SetCellValue(dt.Columns[i].ColumnName);/*设置列宽*/if (array.Length > 0){for (int c = 0; c < array.Length; c++){sheet.SetColumnWidth(c, array[c] * 256);}}}/*内容*/for (int j = 1; j <= dt.Rows.Count; j++){NPOI.SS.UserModel.IRow contentrow = sheet.CreateRow(j);contentrow.Height = 100 * 20;for (int k = 0; k < dt.Columns.Count; k++){ICell cell = contentrow.CreateCell(k);cell.CellStyle = style;if (k == 0){string picurl = dt.Rows[j - 1][k].ToString();AddCellPicture(sheet, book, picurl, j, k);}else{cell.CellStyle = style;cell.SetCellValue(dt.Rows[j - 1][k].ToString());}}}MemoryStream ms = new MemoryStream();book.Write(ms);Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", HttpUtility.UrlEncode(title + "_" + DateTime.Now.ToString("yyyy-MM-dd"), System.Text.Encoding.UTF8)));Response.BinaryWrite(ms.ToArray());Response.End();book = null;ms.Close();ms.Dispose();}/// <summary>/// 向sheet插入图片/// </summary>/// <param name="sheet"></param>/// <param name="workbook"></param>/// <param name="fileurl"></param>/// <param name="row"></param>/// <param name="col"></param>private void AddCellPicture(ISheet sheet, HSSFWorkbook workbook, string fileurl, int row, int col){try{//由于File类只能读取本地资源,所以在配置文件中配置了物理路径的前半部分string DiscPath = ConfigurationManager.AppSettings["PictureDiscPath"];string FileName = DiscPath.Replace("\\", "/") + fileurl.Replace("http://www.bolioptics.com/", "");if (File.Exists(FileName) == true){byte[] bytes = System.IO.File.ReadAllBytes(FileName);if (!string.IsNullOrEmpty(FileName)){int pictureIdx = workbook.AddPicture(bytes, NPOI.SS.UserModel.PictureType.JPEG);HSSFPatriarch patriarch = (HSSFPatriarch)sheet.CreateDrawingPatriarch();HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, col, row, col + 1, row + 1);HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);}}}catch (Exception ex){throw ex;}}
}

转载于:https://www.cnblogs.com/Jackie-sky/p/5331220.html

NPOI导出excel(带图片)相关推荐

  1. java导出excel带图片_JAVA的poi实现模版导出excel(带图片).doc

    JAVA的poi实现模版导出excel(带图片) 下面是本人使用java的poi实现使用模板到处excel,内容包含图片,使用两种不同的方式实现其到处excel.但是使用jxl实现到处excel只能到 ...

  2. asp.net 导出excel带图片

    protected void btgua_Click(object sender, EventArgs e) { DataTable dt = ds.Tables[0]; if (dt != null ...

  3. POI 导出Excel 带图片导出 使用XSSFWorkbook

    参考链接:POI导出图片到Excel不生效 (2007以上版本)_rj_han的博客-CSDN博客 //数据源 查询库 List<FormMt> mtList = formMtMapper ...

  4. nopi 导出excel 带图片

    HSSFWorkbook hssfworkbook = new HSSFWorkbook(); var sheet1 = hssfworkbook.CreateSheet("第一个Sheet ...

  5. Winforn中通过NPOI导出Excel时通过XSSFClientAnchor和XSSFPicture添加图片

    场景 Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载: https://blog.csdn.net/B ...

  6. Hutool导出excel带前台Base64图片

    Hutool导出excel带前台Base64图片,hutool并没有封装具体方法,需要自己手动插入. @Data public class PicDto {private String chartBa ...

  7. springboot + 若依 ruoyi + easypoi excel的导入导出(带图片)

    springboot + 若依 ruoyi + easypoi excel的导入导出(带图片) 一.官方文档 gitee地址 官方文档 二.快速开始 1.导入 引入依赖 <dependency& ...

  8. C#利用NPOI导出Excel

    C#利用NPOI导出Excel 第一篇文章 View Code 1 using System; 2 using System.Collections.Generic; 3 using System.L ...

  9. POI导出EXCEL带水印 以及单元格格式设置

    客户提个需求,需要将报表导出 excel带水印 和 pdf带水印 2个版本. 做的时候连excel本身怎么带水印都不知道,更不用说用java了.后来在网上搜到了excel添加水印的2个方法. 1.艺术 ...

最新文章

  1. Qt开发环境的下载地址
  2. log4j文件的配置
  3. json过滤特殊字符
  4. 中兴通讯首席科学家谈5G现状
  5. C# 多个异步方法的异常处理
  6. Notes on how to use Webots, especially how to make a robot fly in the air
  7. 存量客户管理之提额降息
  8. 徐思201771010132《面向对象程序设计(java)》第三周学习总结
  9. pow函数需要注意的问题
  10. MPEG4与.mp4
  11. 算法分析之常用符号大O、小o、大Ω、大Θ、w符号
  12. 关于一些繁体字体显示乱码的问题
  13. Swift 复数变量定义
  14. 微信开放平台-管理中心-应用删除
  15. Ubuntu图形界面下命令行窗口打开快捷键创建
  16. 166、锐捷交换机如何配置?一步步详解,交换机配置再也不难了
  17. MySQL数据库的事务开启,提交和回滚
  18. 涂鸦Zigbee SDK开发系列教程——1.创建产品
  19. Android程序员必会!Android面试必刷的200道真题,附答案
  20. 浅谈那些针对华为裁员的观点纷争

热门文章

  1. 构建之法第一、二、十六章
  2. Android的启动模式(上)
  3. java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher
  4. javaScript js 可滑动的div块
  5. GridView类容器中的DropDownList联动
  6. 开发sharepoint工作流过程中的Ptifall(容易犯的错误)
  7. 盲视频超分辨率:南理工提出不用HR参与也能训练的自监督学习方法
  8. 扔掉目标检测器,实现真正的端到端多模态预训练!阿里提出E2E-VLP(ACL2021)...
  9. NeurIPS 2021 | CyGen:基于概率论理论的生成式建模新模式!
  10. 简单粗暴的多目标跟踪神器 – DeepSort