zoukankan      html  css  js  c++  java
  • .net 数据导出

      安装npoi,下面是具体的C#代码:

      

    public static XSSFWorkbook BuildWorkbook(DataTable dt)
            {
                var book = new XSSFWorkbook();
                ISheet sheet = book.CreateSheet("Sheet1");
                IRow first_drow = sheet.CreateRow(0);
                 
                string import_title = ConfigurationManager.AppSettings["import_title"];
                if (!import_title.IsEmpty())
                {
                    string[] temps = import_title.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    for (int i = 0; i < temps.Length; i++)
                    {
                        ICell cell = first_drow.CreateCell(i, CellType.String);
                        cell.SetCellValue(temps[i]);
                    }
                }
                //Data Rows
                int index = 0;
                for (int i = 1; i <= dt.Rows.Count; i++)
                {
                    IRow drow = sheet.CreateRow(i);
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        ICell cell = drow.CreateCell(j, CellType.String);
                        cell.SetCellValue(dt.Rows[index][j].ToString());
                    }
                    index++;
                }
                //自动列宽
                for (int i = 0; i <= dt.Columns.Count; i++)
                    sheet.AutoSizeColumn(i, true);
    
                return book;
            }
            
     
            public static void ExportExcel(string idcard_no, string name, string fileName = "ExamInfoExcel")
            {
                //生成Excel
                IWorkbook book = BuildWorkbook(ExcelData(idcard_no, name));
    
                //web 下载
                if (fileName == "")
                    fileName = string.Format("{0:yyyyMMddHHmmssffff}", DateTime.Now);
                fileName = fileName.Trim();
                string ext = Path.GetExtension(fileName);
    
                if (ext.ToLower() == ".xls" || ext.ToLower() == ".xlsx")
                    fileName = fileName.Replace(ext, string.Empty);
    
                HttpResponse httpResponse = HttpContext.Current.Response;
                httpResponse.Clear();
                httpResponse.Buffer = true;
                httpResponse.Charset = Encoding.UTF8.BodyName;
                //Remarks:xls是03版excel所用格式,xlsx是07版所用格式,这里默认导出07版的,如果电脑上是03版打不开这个文件,把后缀名xlsx改成xls即可。
                httpResponse.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
                httpResponse.ContentEncoding = Encoding.UTF8;
                httpResponse.ContentType = "application/vnd.ms-excel; charset=UTF-8";
                book.Write(httpResponse.OutputStream);
                httpResponse.End();
            }
            public static DataTable ExcelData(string idcard_no, string name)
            {
                string where = " 1=1 ";
                if (!string.IsNullOrEmpty(idcard_no))
                {
                    idcard_no = idcard_no.TrimStart().TrimEnd();
                    where += " and idcard_no like '%" + idcard_no + "%'";
                }
                if (!string.IsNullOrEmpty(name))
                {
                    idcard_no = idcard_no.TrimStart().TrimEnd();
                    name = name.TrimStart().TrimEnd();
                    where += " and name like '%" + name + "%'";
                }
                string import_files = ConfigurationManager.AppSettings["import_files"];
                string sql = string.Format(@"SELECT {0} FROM ExamInfo where {1} ORDER BY id", import_files, where);
                using (var connection = ConnectionFactory.CreateSqlConnection())
                {
                    DataTable dt = new DataTable();
                    dt.Load(connection.ExecuteReader(sql));
                    return dt;
                }
            }

      控制器层调用如下:

      

            public void ExcelImport(string idcard_no, string name)
            {
                Application.ExportExcel(idcard_no, name, "ExamInfoExcel");
            }

      JQ页面调用如下:

      

           $("#import").click(function () {
                    var href = "/Home/ExcelImport";
                    var idcard_no = $("#IDNumber").val();
                    var name = $("#username").val();
                    href += "?idcard_no=" + idcard_no + "&name=" + name;
                    $("#import_a").attr("href", href);
                    $("#download").click();
                });

      html:

    <button class="layui-btn" id="import">导出数据</button>
    <a href="/Home/ExcelImport" id="import_a" style="display:none;" ><span id="download">隐藏的导出下载地址</span></a>

      页面之所以在按钮的基础上加了一个隐藏的a标签,原因在于通过window.open打开的地址容易被浏览器拦截,而通过模拟触发a标签进行点击的则不会。

      关于配置,需要导出的列以及excel的表头我控制在了webconfig里:

        !--导出配置-->
        <add key="import_title" value="序号,姓名"/>
        <add key="import_files" value="id,name"/>

      以上,是一个较为完整的导出数据到excel示例。

  • 相关阅读:
    git(常用命令)思维导图...
    有关gitlab的神秘操作.....version&&domain设置...
    Gitlab不小心关闭了sign-in,无法登录web的坑。。。
    聊聊CMSIS-RTOS是什么东东
    c#接口interface学习
    没有内置小鹤双拼的rime输入法就是差劲
    stm32中的型号对比——为什么很少用STM32F2,F3?
    stm32软件编程的框架及注意事项——rtos篇
    modbus-poll和modbus-slave工具的学习使用——modbus协议功能码3的解析(及欧姆龙温控器调试笔记)
    keil中error: #70: incomplete type is not allowed—解决方法
  • 原文地址:https://www.cnblogs.com/sunshine-wy/p/11113015.html
Copyright © 2011-2022 走看看