IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> .NET_MVC利用NPOI导出DataTable数据为Excel文件并下载(包括表格边框样式、表头加粗、设置列宽度、合并第一列相同行) -> 正文阅读

[PHP知识库].NET_MVC利用NPOI导出DataTable数据为Excel文件并下载(包括表格边框样式、表头加粗、设置列宽度、合并第一列相同行)

①NuGet添加NPOI?

②添加using引用

using Newtonsoft.Json;
using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using System;
using System.Data;
using System.IO;
using System.Web.Mvc;

?③MVC-Controller 代码(DataTable导出Excel及下载)

      public FileResult ExportDailyReport(string startDate)
      {
            if (string.IsNullOrEmpty(startDate))
            {
                return null;
            }
            DailyReportBLL bll = new DailyReportBLL();
            DataTable dt = bll.GetDailyReport(startDate);//取出数据,DataTable类型
            var file = DataTableExportExcel(dt, "日报表",startDate);//导出Excel文件
            return file;//下载此Excel文件
      }

        /// <summary>
        /// DataTable导出Excel
        /// </summary>
        /// <param name="dt">数据源</param>
        /// <param name="excelName">excel文件名</param>
        /// <param name="startDate">sheet页名称(默认:Sheet1)</param>
        /// <param name="isMergedRegion">合并第一列相同行(默认:合并)</param>
        /// <returns></returns>
        public FileResult DataTableExportExcel(DataTable dt, string excelName = "", string sheetName = "Sheet1", bool isMergedRegion = true)
        {
            //创建Excel文件的对象
            HSSFWorkbook book = new HSSFWorkbook();
            //表头-样式
            ICellStyle headStyle = HeadStyle(book);
            //单元格-样式
            ICellStyle bodyStyle = BodyStyle(book);
            //添加一个sheet1
            ISheet sheet1 = book.CreateSheet(sheetName);//sheet的名称
            //创建sheet1的数据
            IRow row1 = sheet1.CreateRow(0);//第一行是表头
            //给sheet1添加第一行的头部标题
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                row1.CreateCell(i).SetCellValue(dt.Columns[i].ToString());//DataTable的表头             
                row1.Cells[i].CellStyle = headStyle;//添加,表头-样式          
                sheet1.SetColumnWidth(i, 15 * 256);//设置每列宽度, 256 的整数倍???
            }
            //将数据逐步写入sheet1各个行
            int rowIndex = 1;//当前行      
            foreach (DataRow row in dt.Rows)
            {
                IRow dataRow = sheet1.CreateRow(rowIndex);
                foreach (DataColumn column in dt.Columns)
                {
                    var headCell = row1.GetCell(column.Ordinal);//表头
                    if (headCell.ToString().Contains("率"))//标题包含“率”字
                    {
                        dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString() + "%");//则数据添加%号
                    }
                    else
                    {
                        dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
                    }
                    dataRow.Cells[column.Ordinal].CellStyle = bodyStyle;//添加样式
                    //根据第一列的内容合并第一列:
                    if (isMergedRegion == true)
                    {                        
                        MergedRegion(column.Ordinal, rowIndex, dataRow.GetCell(column.Ordinal).ToString(), dt.Rows.Count, sheet1);
                    }
                }
                rowIndex++;
            }
            //将IO数据流写入到Excel文件中
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            book.Write(ms);
            ms.Seek(0, SeekOrigin.Begin);
            string filename = excelName + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xls";
            return File(ms, "application/vnd.ms-excel", filename);
        }
        //表头样式
        public ICellStyle HeadStyle(HSSFWorkbook book)
        {
            ICellStyle headStyle = BasicStyle(book);
            //表头-字体加粗
            IFont font = book.CreateFont();
            font.IsBold = true;
            headStyle.SetFont(font);

            return headStyle;
        }
        //单元格样式
        public ICellStyle BodyStyle(HSSFWorkbook book)
        {
            ICellStyle bodyStyle = BasicStyle(book);
            return bodyStyle;
        }
        //基本样式
        public ICellStyle BasicStyle(HSSFWorkbook book)
        {
            ICellStyle basicStyle = book.CreateCellStyle();
            basicStyle.BorderBottom = BorderStyle.Thin;
            basicStyle.BorderLeft = BorderStyle.Thin;
            basicStyle.BorderRight = BorderStyle.Thin;
            basicStyle.BorderTop = BorderStyle.Thin;
            basicStyle.BottomBorderColor = HSSFColor.Black.Index;
            basicStyle.LeftBorderColor = HSSFColor.Black.Index;
            basicStyle.RightBorderColor = HSSFColor.Black.Index;
            basicStyle.TopBorderColor = HSSFColor.Black.Index;
            basicStyle.Alignment = HorizontalAlignment.Center;//水平居中
            basicStyle.VerticalAlignment = VerticalAlignment.Center;//垂直居中

            return basicStyle;
        }

        string cellTemp = string.Empty;
        int firstRow = 1;//定位行
        /// <summary>
        /// 合并第一列相同行
        /// </summary>
        /// <param name="columnIndex">列index</param>
        /// <param name="rowIndex">行index</param>
        /// <param name="cell">单元格内容</param>
        /// <param name="rowCount">总行数</param>
        /// <param name="sheet1"></param>
        public void MergedRegion(int columnIndex, int rowIndex, string cell, int rowCount, ISheet sheet1)
        {
            try
            {
                //根据第一列的内容合并第一列
                if (columnIndex == 0)//第1列
                {
                    if (rowIndex == 1)//第1行,给cellTemp赋值
                    {
                        cellTemp = cell;//第1行的数据
                    }
                    else//第2行开始,将cell值与给cellTemp做比较
                    {
                        if (cellTemp != cell)//发现不同的内容的
                        {
                            if ((rowIndex - firstRow) > 1)//合并区域A2必须包含2个或更多单元格
                            {
                                sheet1.AddMergedRegion(new CellRangeAddress(firstRow, (rowIndex - 1), 0, 0));//合并
                            }
                            cellTemp = cell;//cellTemp重新赋值
                            firstRow = rowIndex;//重新定位行
                        }
                        if (rowIndex == rowCount)//最后一行
                        {
                            if ((rowIndex - firstRow) > 1)//合并区域A2必须包含2个或更多单元格
                            {
                                sheet1.AddMergedRegion(new CellRangeAddress(firstRow, rowIndex, 0, 0));//合并
                            }
                        }
                    }
                }
            }
            catch { }
        }
    }

?●注意:Action的返回类型是——FileResult,以文件形式返回

④MVC-View代码(调用导出Excel的Action)

<input type="text" id="startDate" readonly="readonly" onclick="WdatePicker({dateFmt:'yyyy-MM-dd'})" />
<input type="button" id="ExportExcel" onclick="ExportExcel()" value="导出Excel" />

<script>
    function ExportExcel() {
        var date = $("#startDate").val();
        if (date == null || $.trim(date) == "") {     
            return;
        }
        window.location.href = "/BusinessReport/ExportDailyReport?startDate=" + date;
    }
</script>

●MVC调用方式为,javascript的:window.location.href =' /Controller/Action?参数=参数值';

Html参考:?

?Excel参考:?

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-07 10:36:24  更:2021-09-07 10:37:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:12:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码