/// <summary>
        /// 导出Excel
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list">数据源List<T></param>
        /// <param name="fileName">页面文件 输出名称 *.xls</param>
        public void Export<T>(IList<T> list, string fileName)
        {

            //得到DataTable
            System.Data.DataTable dt = ListToTableHelper.ToDataTable(list);

            //导出Excel的临时文件
            string exportPath = Server.MapPath("~/Excel/") + DateTime.Now.Ticks + fileName;

            CreateExcel(dt, exportPath);
            FileInfo fileInfo = new FileInfo(exportPath);
            if (fileInfo.Exists)
            {
                ;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
                byte[] buffer = new byte[ChunkSize];
                Response.Clear();
                System.IO.FileStream iStream = System.IO.File.OpenRead(exportPath);
                long dataLengthToRead = iStream.Length;//获取下载的文件总大小
                Response.ContentType = "application/octet-stream";
                Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
                 && Response.IsClientConnected)
                {
                    , Convert.ToInt32(ChunkSize));//读取的大小
                    Response.OutputStream.Write(buffer, , lengthRead);
                    Response.Flush();
                    dataLengthToRead = dataLengthToRead - lengthRead;
                }
                iStream.Close();
                Response.Close();
            }

            // 删除生成的Excel 临时文件
            File.Delete(exportPath);

        }
 /// <summary>
        /// 打开模板Excel,重新写入 另存Excel 文件格式 xls 97-2003
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="excelPath"></param>
        /// <param name="tempExcelPath"></param>
        public void CreateExcel(System.Data.DataTable dt, string savePath)
        {
            savePath = savePath.Replace("/", "\\");
            Application application = new ApplicationClass();
            application.Visible = false;

            //创建 新的Excel
            Workbook workbook = application.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);

            //插入 现有的Excel
            //application.Workbooks._Open(tempExcelPath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
            Worksheet worksheet = (Worksheet)workbook.Sheets[];
            ;
            ;
            try
            {
                int count = dt.Rows.Count;

                ; i < dt.Columns.Count; i++)
                {
                    worksheet.Cells[, i + ] = dt.Columns[i].ColumnName;
                    Range range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[, i + ];
                    range.Interior.ColorIndex = ;
                    range.Font.Bold = true;
                }

                foreach (System.Data.DataRow row in dt.Rows)
                {
                    rowNum++;
                    //Console.WriteLine("当前处理记录:{0}/{1}", rowNum, count);
                    ; i <= dt.Columns.Count; i++)
                    {
                        excelColumNum = i;
                        ].ToString();
                        Range range = (Range)worksheet.Cells[rowNum, excelColumNum];
                        range.Value2 = text;
                    }
                }
                workbook.Saved = true;
                workbook.SaveAs(savePath, XlFileFormat.xlExcel8, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

                workbook.Close(true, Type.Missing, Type.Missing);
                workbook = null;
                application.Quit();
                GC.Collect();
            }
            catch
            {
                workbook.Saved = false;
                workbook.Close(true, Type.Missing, Type.Missing);
                workbook = null;
                application.Quit();
                GC.Collect();
            }

        }

调用:

 protected void btn_ExportExcel_Click(object sender, EventArgs e)
        {

            IList<SongInfo> list = new List<SongInfo>();// 数据源

            string fileName = "data.xls"; //页面文件 输出名称
            Export(list, fileName);  //调用方法

            ScriptManager.RegisterStartupScript(this, this.GetType(), "", "alert('成功!')", true); //完成后显示消息
        }

  

C# Excel导入导出的更多相关文章

  1. 利用反射实现通用的excel导入导出

    如果一个项目中存在多种信息的导入导出,为了简化代码,就需要用反射实现通用的excel导入导出 实例代码如下: 1.创建一个 Book类,并编写set和get方法 package com.bean; p ...

  2. Excel导入导出的业务进化场景及组件化的设计方案(上)

    1:前言 看过我文章的网友们都知道,通常前言都是我用来打酱油扯点闲情的. 自从写了上面一篇文章之后,领导就找我谈话了,怕我有什么想不开. 所以上一篇的(下)篇,目前先不出来了,哪天我异地二次回忆的时候 ...

  3. 关于Excel导入导出的用例设计

    目前,为方便操作,很多系统都会增加批量导入导出的功能.文件导入导出一般格式都是excel.由于用户直接在excel在填写内容,无法控制填写的格 式,加上excel解析比较困难,所以一般涉及到excel ...

  4. ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码

    实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回false 验证手机号是否正确 13,15,18 验证邮箱 验证网址 MD5加密,返 ...

  5. Excel导入导出帮助类

    /// <summary>    /// Excel导入导出帮助类    /// 记得引入 NPOI    /// 下载地址   http://npoi.codeplex.com/rele ...

  6. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

  7. Octopus——excel导入导出工具

    Octopus Octopus是一个简易的Excel导入导出工具.目前主要就两个功能: 导入:将excel中一行数据转换为指定的java对象,并通过指定的正则表达式检查合法性. 导出:按照给定的xml ...

  8. TP5.0 excel 导入导出

    引第三方的phpexcel类库放到 ThinkPHP\Library\Vendor\demo下,自己建的文件夹demo 再将Excel.class放到ThinkPHP\Library\Org\clas ...

  9. Mego(04) - NET简单实现EXCEL导入导出

    前言 相信做过信息系统的朋友都会遇到EXCEL导入导出的相关开发,做过不少EXCEL导入导出后总结起来大致有如下几种方式实现: ADO.NET的OldDb或ODBC连接EXCEL使用DataTable ...

  10. JeeSite中Excel导入导出

    在各种管理系统中,数据的导入导出是经常用到的功能,通常导入导出以Excel.CSV格式居多.如果是学习的过程中,最好是自己实现数据导入与导出的功能,然而在项目中,还是调用现成的功能比较好.近期一直使用 ...

随机推荐

  1. 自己实现简单Web服务器,支持GET POST请求

    最近项目上遇到一个需求,最后想到的解决方案是自己实现一个web服务器去处理请求,然后再将信息发送到另外一个程序.然后返回处理之后的结果呈现出来. 现在我就来分享一下如何实现的. 通过.NET 为我们提 ...

  2. 15天玩转redis —— 第六篇 有序集合类型

    今天我们说一下Redis中最后一个数据类型 “有序集合类型”,回首之前学过的几个数据结构,不知道你会不会由衷感叹,开源的世界真好,写这 些代码的好心人真的要一生平安哈,不管我们想没想的到的东西,在这个 ...

  3. 世界那么Big,组件那么Small

    推荐一个跨平台模块化App框架 -Small. Small,做最轻巧的跨平台插件化框架. 功能 完美内置 所有插件支持内置于宿主包中 高度透明 插件编码.布局编写方式与独立应用开发无异 插件代码调试与 ...

  4. Eclipse的SVN插件下载

    Links for 1.8.x Release:Eclipse update site URL: http://subclipse.tigris.org/update_1.8.xsvn插件包下载: h ...

  5. Scalaz(5)- typeclass:my typeclass scalaz style-demo

    我们在上一篇讨论中介绍了一些基本的由scalaz提供的typeclass.这些基本typeclass主要的作用是通过操作符来保证类型安全,也就是在前期编译时就由compiler来发现错误.在这篇讨论中 ...

  6. malloc和new的区别

    (1)malloc在C和C++中都可以使用,用来申请一段内存:申请的内存一定要用free释放,然后把指针置为null: new只能在C++中使用,用于动态内存分配:new的对象要delete掉: (2 ...

  7. 软件代码生成之Codesmith模板.netTiers

              .netTiers模板到2006年就诞生了, 到今天最后一次更新是12/17/2013, 支持.NET 4.5 and Visual Studio 2012 and 2013. n ...

  8. ssh架构简单解释和vo po解释

      Struts.spring.Hibernate在各层的作用 1)struts 负责 web层. ActionFormBean 接收网页中表单提交的数据,然后通过Action 进行处理,再Forwa ...

  9. rabbitmq connection/channel/consumer/queue的数量关系详细分析

    最近,MQ经常有丢包的现象,看各connection/channel/consumer/queue的组成情况,发现差别比较大. channel与消费者: [root@iZ23nn1p4mjZ bin] ...

  10. 初探百度F.I.S — 由工具到解决方案

    1. 前言 阅兵放假三天,我哪儿也没去,宅着看了一些东东:git命令行.svn命令以及下面的主角——百度FIS.对看过的git.svn的命令也做了一些总结,请参见:<git命令学习笔记>和 ...