mvc 导出excel

类库:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;
using System.Data;

namespace DAL
{
    public class ExportExcel
    {
        IWorkbook _workbook = null;

        public byte[] Export(DataTable dt, Dictionary<string, string> cols = null)
        {
            string filename = string.Format("{0}.xlsx", DateTime.Now);
            if (cols == null)
            {
                cols = getCols(ref dt);
            }
            string sheetName = dt.TableName;
            _workbook = new XSSFWorkbook();
            setSheet(sheetName, ref dt, ref cols);
            return getStream();
        }

        private Dictionary<string,string> getCols(ref DataTable dt)
        {
            Dictionary<string, string> dic = new Dictionary<string, string>();
            foreach(DataColumn col in dt.Columns)
            {
                dic.Add(col.ColumnName, col.ColumnName);
            }
            return dic;
        }

        protected void setSheet(string sheetname,ref DataTable dt,ref Dictionary<string,string> cols)
        {
            ISheet sheet = null;
            sheet = _workbook.CreateSheet(sheetname);
            IRow row = sheet.CreateRow(0);
            for (int j = 0; j < dt.Columns.Count; ++j)
            {
                string colname = dt.Columns[j].ColumnName;
                try
                {
                    colname = cols[colname];
                }
                catch { }
                row.CreateCell(j).SetCellValue(colname);
            }
            for (int i = 0; i < dt.Rows.Count; ++i)
            {
                IRow r = sheet.CreateRow(i + 1);
                for (int j = 0; j < dt.Columns.Count; ++j)
                {

                    setSheetCellValue(r.CreateCell(j), dt.Rows[i][j]);
                }
            }
        }

        private void setSheet(ref DataTable dt, string title, string title2 = null)
        {


            //大标题
            IFont fontTitle = _workbook.CreateFont();
            fontTitle.FontHeightInPoints = 12;
            fontTitle.FontName = "黑体";
            var cellStyle = _workbook.CreateCellStyle();
            cellStyle.SetFont(fontTitle);
            cellStyle.Alignment = HorizontalAlignment.Center;
            cellStyle.VerticalAlignment = VerticalAlignment.Center;
            cellStyle.WrapText = true;

            //边框
            ICellStyle style = _workbook.CreateCellStyle();
            style.Alignment = HorizontalAlignment.Center;
            style.VerticalAlignment = VerticalAlignment.Center;
            style.BorderBottom = BorderStyle.Thin;
            style.BorderTop = BorderStyle.Thin;
            style.BorderRight = BorderStyle.Thin;
            style.BorderLeft = BorderStyle.Thin;


            ISheet sheet = _workbook.CreateSheet();
            IRow trow = sheet.CreateRow(0);

            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, dt.Columns.Count - 1));
            trow.CreateCell(0).SetCellValue(title);
            trow.Height *= 2;
            trow.Cells[0].CellStyle = cellStyle;


            if (title2 != null)
            {
                //副标题
                IFont fontCell = _workbook.CreateFont();
                fontCell.FontName = "宋体";
                fontCell.Boldweight = 0;

                IRow row1 = sheet.CreateRow(1);

                sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(1, 1, 0, dt.Columns.Count - 1));
                row1.CreateCell(0).SetCellValue(title2);

                row1.Cells[0].CellStyle.Alignment = HorizontalAlignment.Left;
                row1.Cells[0].CellStyle.SetFont(fontCell);

                row1.Height *= 2;
            }
            IRow row;
            int start = 1;
            if (title2 != null)
            {
                start = 3;
                row = sheet.CreateRow(2);
            }
            else
            {
                start = 2;
                row = sheet.CreateRow(1);

            }
            //列头
            for (int j = 0; j < dt.Columns.Count; ++j)
            {
                row.CreateCell(j).SetCellValue(dt.Columns[j].ColumnName);
                row.Cells[j].CellStyle = cellStyle;

            }
            //数据
            for (int i = 0; i < dt.Rows.Count; ++i)
            {
                IRow r = sheet.CreateRow(start + i);

                for (int j = 0; j < dt.Columns.Count; ++j)
                {

                    setSheetCellValue(r.CreateCell(j), dt.Rows[i][j]);

                }

            }

            //边框
            for (int c = start - 1; c <= sheet.LastRowNum; c++)
            {
                IRow re = sheet.GetRow(c);
                for (int cell = re.FirstCellNum; cell < re.LastCellNum; cell++)
                {
                    re.Cells[cell].CellStyle = style;
                }
            }

            //列宽自适应
            for (int i = 0; i <= dt.Columns.Count; i++)
            {
                sheet.AutoSizeColumn(i);
            }


        }

        protected void setSheetCellValue(ICell cell, Object tableCell)
        {
            switch (tableCell.GetType().ToString())
            {
                case "System.Boolean":
                    cell.SetCellValue(tableCell.ToString() == "True" ? "是" : "否");
                    break;
                default:
                    cell.SetCellValue(tableCell.ToString());
                    break;
            }

        }

        public byte[] getStream()
        {
            MemoryStream stream = new MemoryStream();
            try
            {
                _workbook.Write(stream);
                byte[] by = stream.ToArray();
                return by;
            }
            catch
            {
                return null;
            }
            finally
            {
                if (stream != null)
                    stream.Close();
            }
        }
    }
}

Action:

 public FileResult Export()
        {
            try
            {
                byte[] bb = new DAL.Organize.OrganizeImpl().Export();
                return File(bb, "application/ms-excel", "organize.xlsx");
            }
            catch (Exception e)
            {
                byte[] bb = System.Text.Encoding.UTF8.GetBytes(e.Message);
                return File(bb, "application/octet-stream", "err.txt");
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSP(JavaServer Pages)是一种动态网页技术,允许开发者将Java代码嵌入到HTML页面中。当Web服务器接收到对JSP页面的请求时,它将执行页面中的Java代码,并将结果嵌入到生成的HTML中发送给客户端。 MVC(Model-View-Controller)是一种设计模式,用于将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。模型负责数据和业务逻辑,视图负责展示数据,控制器负责接收用户输入并调用模型和视图去完成用户的请求。 导出Excel通常是指将Web应用中的数据导出为Microsoft Excel可识别的文件格式,比如.xlsx或.xls。在JSP中使用MVC模式导出Excel,通常需要以下步骤: 1. 创建数据模型(Model):定义需要导出的数据结构。 2. 创建视图(View):设计导出数据的布局,通常是HTML表格。 3. 创建控制器(Controller):编写处理导出逻辑的代码,包括接收用户的导出请求、数据的检索和转换、以及响应的生成和发送。 具体到导出Excel,控制器需要生成Excel文件的数据。可以使用Apache POI库来帮助处理Excel文件的创建和写入。然后,控制器会将这个文件作为HTTP响应发送给客户端,通常会设置响应头,告知浏览器这是一个附件,浏览器会提示用户保存文件。 纯手写代码的话,你需要处理以下几个方面: - Java代码的组织,确保按照MVC模式分离逻辑。 - 在视图层面,通过JSP标签生成静态HTML表格。 - 在控制器层面,使用Java代码处理HTTP请求和响应,以及调用Apache POI或其他库来生成Excel文件。 - 设置正确的HTTP响应头,使得浏览器能够识别并处理生成的文件。 以下是一个简化的示例步骤: 1. 引入Apache POI依赖到你的项目中。 2. 在控制器中,编写导出数据的逻辑,创建一个HSSFWorkbook或XSSFWorkbook对象(取决于你想要创建的是旧版的.xls还是新版的.xlsx文件)。 3. 使用Apache POI提供的API填充工作簿、工作表、行和单元格等。 4. 将工作簿对象写入到HTTP响应输出中。 5. 设置响应的内容类型为Excel文件类型,并添加头信息提示浏览器将响应作为文件下载。 这里没有提供具体的代码实现,因为编写完整的代码超出了简短回答的范围,但它可以根据上述步骤来完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值