使用NPOI导出Excel文件

使用NPOI导出Excel文件使用NPOI导出Excel文件,本实例使用了ASP.NETMVC。1、使用NPOI导出Excel文件实例:导出商品列表。要求:1、通过NPOI导出导出商品列表信息;2、使用Excel函数计算商品总金额;在Controllers控制器目录中创建ExportController.cs控制器usingSystem.IO;usingNPOI;usingNPOI.POI…

大家好,又见面了,我是你们的朋友全栈君。

使用NPOI导出Excel文件,本实例使用了ASP.NET MVC。

1、使用NPOI导出Excel文件

实例:导出商品列表。

要求:1、通过NPOI导出导出商品列表信息;

2、使用Excel函数计算商品总金额;

在Controllers控制器目录中创建ExportController.cs控制器

using System.IO;
using NPOI;
using NPOI.POIFS;
using NPOI.HSSF;
using NPOI.Util;
using NPOI.HSSF.UserModel;
using NPOI.HPSF;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.HSSF.Util;

 

/// <summary>
/// 导出商品列表
/// </summary>
public FileResult ExportProduct()
{
    //创建一个新的xls文件
    HSSFWorkbook workbook = new HSSFWorkbook();

    //创建DocumentSummaryInformation(选填)
    DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
    dsi.Company = "深圳市电子商务有限公司";
    dsi.Category = "报表";
    //创建SummaryInformation(选填)
    SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
    si.Subject = "商品列表";
    si.Title = "商品列表导出";
    si.Author = "Kevin Pan";
    //把创建好的对象赋给Workbook
    workbook.DocumentSummaryInformation = dsi;
    workbook.SummaryInformation = si;

    //创建一个Sheet
    ISheet sheet = workbook.CreateSheet("Sheet1");
    sheet.DefaultRowHeight = 300;
    //创建标题
    IRow rowTitle = sheet.CreateRow(0);
    rowTitle.Height = 500;
    ICellStyle styleTitle = workbook.CreateCellStyle();
    styleTitle.Alignment = HorizontalAlignment.Center;
    styleTitle.VerticalAlignment = VerticalAlignment.Center;
    IFont fontTitle = workbook.CreateFont();
    fontTitle.FontName = "宋体";
    fontTitle.FontHeightInPoints = 18;
    styleTitle.SetFont(fontTitle);
    ICell cellTitle = rowTitle.CreateCell(0);
    cellTitle.SetCellValue("商品列表");
    cellTitle.CellStyle = styleTitle;
    sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 5));  //合并单元格
    //创建表格样式
    IFont font = workbook.CreateFont();
    font.FontName = "宋体";
    font.FontHeightInPoints = 10;
    ICellStyle style = workbook.CreateCellStyle(); ;
    style.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
    style.BottomBorderColor = HSSFColor.Black.Index;
    style.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
    style.LeftBorderColor = HSSFColor.Black.Index;
    style.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
    style.RightBorderColor = HSSFColor.Black.Index;
    style.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
    style.TopBorderColor = HSSFColor.Black.Index;
    style.Alignment = HorizontalAlignment.Center;
    style.SetFont(font);
    //创建表头
    IRow rowHead = sheet.CreateRow(1);
    rowHead.CreateCell(0).SetCellValue("序号");
    rowHead.GetCell(0).CellStyle = style;
    sheet.SetColumnWidth(0, 256 * 5);

    rowHead.CreateCell(1).SetCellValue("商品名称");
    rowHead.GetCell(1).CellStyle = style;
    sheet.SetColumnWidth(1, 256 * 25);

    rowHead.CreateCell(2).SetCellValue("商品品牌");
    rowHead.GetCell(2).CellStyle = style;
    sheet.SetColumnWidth(2, 256 * 20);

    rowHead.CreateCell(3).SetCellValue("商品价格");
    rowHead.GetCell(3).CellStyle = style;
    sheet.SetColumnWidth(3, 256 * 15);

    rowHead.CreateCell(4).SetCellValue("数量");
    rowHead.GetCell(4).CellStyle = style;
    sheet.SetColumnWidth(3, 256 * 10);

    rowHead.CreateCell(5).SetCellValue("总金额");
    rowHead.GetCell(5).CellStyle = style;
    sheet.SetColumnWidth(3, 256 * 15);

    //获取商品列表数据
    List<ProductModel> dataList = GetProductList();
    //绑定表内容
    int rowindex = 2;
    int xh = 1;
    foreach (var item in dataList)
    {
        IRow rowContent = sheet.CreateRow(rowindex);
        rowContent.CreateCell(0).SetCellValue(xh);
        rowContent.GetCell(0).CellStyle = style;

        rowContent.CreateCell(1).SetCellValue(item.ProductName);
        rowContent.GetCell(1).CellStyle = style;

        rowContent.CreateCell(2).SetCellValue(item.ProductBrand);
        rowContent.GetCell(2).CellStyle = style;

        rowContent.CreateCell(3).SetCellValue(item.ProductPrice.ToString());
        rowContent.GetCell(3).CellStyle = style;

        rowContent.CreateCell(4).SetCellValue(item.Quantity.ToString());
        rowContent.GetCell(4).CellStyle = style;
        //设置函数,计算总金额
        rowContent.CreateCell(5).SetCellFormula(String.Format("$D{0}*$E{0}", rowindex+1));
        rowContent.GetCell(5).CellStyle = style;

        rowindex++;
        xh++;
    }

    //输出 
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    workbook.Write(ms);
    ms.Seek(0, SeekOrigin.Begin);
    return File(ms, "application/vnd.ms-excel", "商品列表.xls");
}

2、基于.xls模板导出Excel文件

实例:基于.xls模板导出订单信息(如图 1)

要求:1、使用基于.xls模板导出订单信息;

2、使用Excel函数计算订单和商品的总金额;

使用NPOI导出Excel文件

图 1 基于.xls模板导出订单信息

/// <summary>
/// 导出订单信息
/// </summary>
public FileResult ExportOrder()
{ 
    //获取订单信息
    OrderModel order = GetOrderInfo();
    //获取Excel模板
    string fileName = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"/Template/order.xls";
    FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read);
    //通过模板创建一个xls文件
    HSSFWorkbook workbook = new HSSFWorkbook(file);
    //获取Sheet
    ISheet sheet = workbook.GetSheet("Sheet1");
    //导出订单信息
    sheet.GetRow(1).CreateCell(1).SetCellValue(order.OrderNo);
    sheet.GetRow(1).CreateCell(3).SetCellValue(order.OrderTime.ToString("yyyy-MM-dd HH:mm:ss"));
    sheet.GetRow(1).CreateCell(5).SetCellFormula("SUM(F6:F100)"); //设置函数,计算订单总金额
    sheet.GetRow(2).CreateCell(1).SetCellValue(order.CustomName);
    sheet.GetRow(2).CreateCell(3).SetCellValue(order.CustomAddress);
    //导出产品列表
    if (order.ProductList != null && order.ProductList.Count > 0)
    {
        //创建表头
        IRow rowHead = sheet.CreateRow(4);
        rowHead.CreateCell(0).SetCellValue("序号");
        sheet.SetColumnWidth(0, 256 * 15);

        rowHead.CreateCell(1).SetCellValue("商品名称");
        sheet.SetColumnWidth(1, 256 * 25);

        rowHead.CreateCell(2).SetCellValue("商品品牌");
        sheet.SetColumnWidth(2, 256 * 20);

        rowHead.CreateCell(3).SetCellValue("商品价格");
        sheet.SetColumnWidth(3, 256 * 15);

        rowHead.CreateCell(4).SetCellValue("数量");
        sheet.SetColumnWidth(3, 256 * 10);

        rowHead.CreateCell(5).SetCellValue("总金额");
        sheet.SetColumnWidth(3, 256 * 15);

        //绑定表内容
        int rowindex = 5;
        int xh = 1;
        foreach (var item in order.ProductList)
        {
            IRow rowContent = sheet.CreateRow(rowindex);
            rowContent.CreateCell(0).SetCellValue(xh);
            rowContent.CreateCell(1).SetCellValue(item.ProductName);
            rowContent.CreateCell(2).SetCellValue(item.ProductBrand);
            rowContent.CreateCell(3).SetCellValue(item.ProductPrice.ToString());
            rowContent.CreateCell(4).SetCellValue(item.Quantity.ToString());
            rowContent.CreateCell(5).SetCellFormula(String.Format("$D{0}*$E{0}", rowindex + 1));  //设置函数,计算总金额
            rowindex++;
            xh++;
        }
    }

    //输出 
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    workbook.Write(ms);
    ms.Seek(0, SeekOrigin.Begin);
    return File(ms, "application/vnd.ms-excel", "订单信息.xls");
}

3、其他代码

3.1 实体类

在Models模型目录中创建ProductModel.cs和OrderModel.cs实体类

/// <summary>
/// 商品信息实体类
/// </summary>
public class ProductModel
{
    /// <summary>
    /// 商品名称
    /// </summary>
    public string ProductName { get; set; }

    /// <summary>
    /// 商品品牌
    /// </summary>
    public string ProductBrand { get; set; }

    /// <summary>
    /// 商品价格
    /// </summary>
    public decimal ProductPrice { get; set; }

    /// <summary>
    /// 数量
    /// </summary>
    public int Quantity { get; set; }
}

 

/// <summary>
/// 订单信息实体类
/// </summary>
public class OrderModel
{
    /// <summary>
    /// 订单编号
    /// </summary>
    public string OrderNo { get; set; }

    /// <summary>
    /// 下单时间
    /// </summary>
    public DateTime OrderTime { get; set; }

    /// <summary>
    /// 总金额
    /// </summary>
    public decimal Amount { get; set; }

    /// <summary>
    /// 客户名称
    /// </summary>
    public string CustomName { get; set; }

    /// <summary>
    /// 客户地址
    /// </summary>
    public string CustomAddress { get; set; }

    /// <summary>
    /// 商品列表
    /// </summary>
    public List<ProductModel> ProductList { get; set; }
}

3.2 获取商品和订单数据

/// <summary>
/// 获取商品列表
/// </summary>
public List<ProductModel> GetProductList()
{
    List<ProductModel> productList = new List<ProductModel>();
    ProductModel product1 = new ProductModel(){
        ProductName = "苹果IPhone6手机",
        ProductBrand = "苹果",
        ProductPrice = 4999,
        Quantity = 4
    };
    ProductModel product2 = new ProductModel()
    {
        ProductName = "三星智能手机",
        ProductBrand = "三星",
        ProductPrice = 3800,
        Quantity = 3
    };
    ProductModel product3 = new ProductModel()
    {
        ProductName = "松下液晶电视机",
        ProductBrand = "松下",
        ProductPrice = 3800,
        Quantity = 2
    };
    productList.Add(product1);
    productList.Add(product2);
    productList.Add(product3);
    return productList;
}

/// <summary>
/// 获取订单信息
/// </summary>
public OrderModel GetOrderInfo()
{
    OrderModel order = new OrderModel() { 
        OrderNo = "P20140929001",
        OrderTime = DateTime.Now,
        CustomName = "张三",
        CustomAddress = "广东省深圳市罗湖区",
        ProductList = GetProductList()
    };
    return order;
}

3.3 视图

在Views视图目录中创建Index.cshtml

<h2>使用NPOI生成Excel文件</h2>
<a href="@Url.Action("ExportProduct","Export")">导出商品</a>
<a href="@Url.Action("ExportOrder","Export")">导出订单</a>

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148244.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 华为手机桌面时钟天气_华为手机怎么让屏幕显示天气和时钟

    华为手机桌面时钟天气_华为手机怎么让屏幕显示天气和时钟华为手机锁屏时钟软件是一款安卓手机桌面锁屏时钟工具,拥有多种锁屏时钟样式,软件使用界面精致简洁,锁屏也能够看时间,拥有多种时钟颜色可以选择,还可以添加各种提醒服务,到点即可提醒用户,使用方法简单,拥有多种显示模式,需要的伙伴,西西下载使用吧!华为手机锁屏时钟软件特色:锁屏时钟是一款功能齐全又实用的时钟显示软件,主界面是一个自带时间、日期、天气的LED数字时钟和模拟时钟,全屏显示翻页时钟,酷炫美观…

    2022年9月29日
    2
  • 一文轻松掌握python语言命名规则(规范)

    一文轻松掌握python语言命名规则(规范)和C/C++、Java等语言一样,python在命名上也有一套约定俗成的规则,符合规范的命名可以让程序的可读性大大增加,从而使得代码的逻辑性增强,易于自己和其他协作者在以后的拓展中理解代码的意义,从而提高编写代码的效率。我们在平常编写程序的时候需要注意以下几点:一、python变量名命名的硬性规则1.1.变量名大小写敏感python变量名区分大小写,也就是Student和student在…

    2022年5月24日
    34
  • 云服务器和虚拟主机有哪些区别

    云服务器和虚拟主机有哪些区别虚机主机就是利用技术把一台服务器分成多个“虚拟”的主机,这些划分出来的主机具有独立的域名,和具有完整的Internet服务器功能,划分出来的虚拟主机共享服务器的宽带和IP。虚机主机之所以使用率较高,是因为相对于购买服务器和租用专线的费用,虚机主机价格便宜,操作简单。但虚机主机没有独立的操作系统,只能通过提供的控制面板操作。虚拟主机由于是共享主机,稳定性较差,访问速度有限。云服务器又叫云主

    2022年6月25日
    28
  • redis 6379端口不通解决方法「建议收藏」

    redis 6379端口不通解决方法「建议收藏」1.reids服务器的6379端口telnet不通2. 查看reids进程和端口,都是存在的。只是ip地址是127.0.0.1而不是0.0.0.0,只是本机能使用3.查找redis的配置文件redis.conf 使用命令:find/-nameredis.conf 4.查找bind127.0.0.1所在的行数  使用命令:cat/usr/local/re…

    2022年5月9日
    155
  • pycharm中文插件下载_去插件安装是什么意思

    pycharm中文插件下载_去插件安装是什么意思我使用的PyCharm软件的版本:2016.1.4参考网站:https://www.jetbrains.com/help/pycharm/2016.1/installing-updating-and-uninstalling-repository-plugins.html给PyCharm软件添加plugins的图文操作(这里以添加Markdown插件)Step1.启动PyC

    2022年8月25日
    8
  • MDK生成bin文件的方法及bin文件大小对程序的影响

    MDK生成bin文件的方法及bin文件大小对程序的影响MDK生成bin文件的方法及bin文件大小对程序的影响   使用MDK软件一般是不生成bin文件的,而是生成的是hex文件。但是在某些时候需要生成bin文件,或者要知道bin文件的大小。因为bin文件的大小直接关乎程序能不能下载到芯片,例如STM32F103ZET6的flash大小是512KB,那么bin文件的大小就不能超过512KB,否则程序就不能下载。下面说说如何生成bin文件:这一步是…

    2022年10月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号