zoukankan      html  css  js  c++  java
  • 按模板导出Excel

    说明:开发环境 vs2012 asp.net mvc4 c# 

             注意:Excel模板有多个sheet页,导出Excel的时候,同时给多个sheet页填充数据

     1、项目结构

    3、Excel模板(注意sheet页的名称)

    4、HTML代码(导出按钮)

          

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EasyuiCombotree.aspx.cs" Inherits="MvcAppTest.EasyuiCombotree" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>按模板导出Excel数据</title>
    
        <script type="text/javascript">
    
            function ExportExcel()
            {
                window.location.href = "Home/ExportExcel3";
            }
        </script>
    </head>
    <body>
      <div>
         <input type="button" value="导出Excel" style="120px;" onclick="ExportExcel()" />
      </div>    
    </body>
    </html>

    5、Home控制器代码

    public void ExportExcel3()
            {
                string path = Server.MapPath("~/loaclData/Excel/Student.xlsx");
                List<Room> myList = new List<Room>() { 
                  new Room(){ ID=1, Name="班级1", Num=10},
                  new Room(){ ID=2, Name="班级2", Num=20},
                  new Room(){ ID=3, Name="班级3", Num=30},
                  new Room(){ ID=4, Name="班级4", Num=40},
                  new Room(){ ID=5, Name="班级5", Num=50}
                };
                var list01 = new List<object>() {    
                    new { ID=1, Name="班级1", Num=10},
                    new { ID=2, Name="班级2", Num=20},
                    new { ID=3, Name="班级3", Num=30},
                    new { ID=4, Name="班级4", Num=40},
                    new { ID=5, Name="班级5", Num=50}};
    
           
    
                List<Company> comList = new List<Company>() { 
                new Company(){ PID=1, ADDRICE="地块位置1", NAME="企业1", Price="pr1"},
                new Company(){ PID=2, ADDRICE="地块位置2", NAME="企业2",Price="pr2"},
                new Company(){ PID=3, ADDRICE="地块位置3", NAME="企业3",Price="pr3"},
                new Company(){ PID=4, ADDRICE="地块位置4", NAME="企业4",Price="pr4"},
                new Company(){ PID=5, ADDRICE="地块位置5", NAME="企业5",Price="pr5"},
                new Company(){ PID=6, ADDRICE="地块位置6", NAME="企业6",Price="pr6"}
                };
                DataTable CompanyDt = ListToDataTable(comList);
                CompanyDt.TableName = "Company";
                DataTable ClassRoom = ListToDataTable(list01);
                ClassRoom.TableName = "Room";
                List<DataU> DataUModel = new List<DataU>() { 
                new DataU(){ dtModel=CompanyDt, shName="批而未供"},
                new DataU(){ dtModel=ClassRoom, shName="Sheet1"}
                };
                DataTableExportIsExcelList(DataUModel, "/loaclData/Excel/Student.xlsx", "sheet1", "测试1");
            }
    View Code
      public class Room
        {
            public Int32 ID { get; set; }
            public string Name { get; set; }
            public Int32 Num { get; set; }
        }
    View Code
        public class Company {
            public Int32 PID { get; set; }
            public string NAME { get; set; }
            public string ADDRICE { get; set; }
            public string Price { get; set; }
        }
    View Code
      public class DataU
        {
            public DataTable dtModel { get; set; }
            public string shName { get; set; }
        }
    View Code
         /// <summary>
            /// 讲list集合转换成datatable
            /// </summary>
            /// <param name="list"></param>
            /// <returns></returns>
            public static System.Data.DataTable ListToDataTable(IList list)
            {
                System.Data.DataTable result = new System.Data.DataTable();
                if (list.Count > 0)
                {
                    PropertyInfo[] propertys = list[0].GetType().GetProperties();
                    foreach (PropertyInfo pi in propertys)
                    {
                        //获取类型
                        Type colType = pi.PropertyType;
                        //当类型为Nullable<>时
                        if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                        {
                            colType = colType.GetGenericArguments()[0];
                        }
                        result.Columns.Add(pi.Name, colType);
                    }
                    for (int i = 0; i < list.Count; i++)
                    {
                        ArrayList tempList = new ArrayList();
                        foreach (PropertyInfo pi in propertys)
                        {
                            object obj = pi.GetValue(list[i], null);
                            tempList.Add(obj);
                        }
                        object[] array = tempList.ToArray();
                        result.LoadDataRow(array, true);
                    }
                }
                return result;
            }
    View Code
      public void DataTableExportIsExcelList(List<DataU> model, string templateFileName, string sheetName, string fileNameHead)
            {
    
                MemoryStream ms = OutModelFileToStreamList(model, templateFileName, sheetName);
                byte[] bt = ms.ToArray();
    
                string fileName = fileNameHead + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls"; //客户端保存的文件名  
                //以字符流的形式下载文件  
                HttpContext.Response.ContentType = "application/vnd.ms-excel";
                //   //通知浏览器下载文件而不是打开
    
                HttpContext.Response.AddHeader("Content-Disposition",
                "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
                HttpContext.Response.Charset = "UTF-8";
                HttpContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
                HttpContext.Response.BinaryWrite(bt);
                HttpContext.Response.Flush();
                HttpContext.Response.End();
                Response.ContentType = "application/vnd.ms-excel";
            }
    View Code
  • 相关阅读:
    memset功能的具体说明
    理解离散傅立叶变换(一. 傅立叶的起源变换)
    OutputCache说明
    二进制搜索
    UEditor用法
    —页面布局实例———win7自己的小算盘
    HDU 1698 Just a Hook (段树更新间隔)
    JDBC batch批量Statement executeBatch 详细解释
    Android ListView快速定位(三)
    Android ListView快速定位(二)
  • 原文地址:https://www.cnblogs.com/net064/p/10282127.html
Copyright © 2011-2022 走看看