zoukankan      html  css  js  c++  java
  • ASP.NET导出Excel详解

      今天来为大家分享的内容是asp.net导出excel,之前做项目的时候遇到了这一点,就在这里拿来写写,分享给需要的人们。

    其实,导出excel的方式有很多中,有直接输出html标记的(这种方式实现起来方便,不过导出的数据不太好看),还有直接将数据写入现有excel文件的(这种方式也好实现,不过不能够设置表格的样式(合并表头)),下面我介绍的是使用office程序集导出excel的文件。

    ExportExcel
     1 /
     2 *ASP.NET导出excel详细介绍
     3 *需要引入程序集Microsoft.Office.Interop.Excel.dll
     4 */
     5 using excel = Microsoft.Office.Interop.Excel;
     6 using System.IO;
     7 
     8 namespace demo
     9 {
    10     public class ExportExcel
    11     {
    12         public void SaveExcel(string path)//保存路径
    13         {
    14             if(File.Exists(path))
    15             {
    16                 File.Delete(path);//如果存在这个文件就删掉
    17             }
    18             excel.Application excelApp=new excel.Application();//excel应用程序实例
    19             excelApp.Application.DisplayAlerts = false;//不弹出警告框
    20             excelApp.Application.Workbooks.Add(true);//工作表集合
    21             excel.Workbook workbook= excelApp.Workbooks[1];//当前操作的工作表
    22             excel.Worksheet worksheet=workbook.ActiveSheet as excel.Worksheet;//当前操作的表格
    23             excelApp.Visible = false;//不弹出保存框
    24             //设置字体样式
    25             excel.Range range = worksheet.get_Range("A1", "E1");//获取设置单元格的范围
    26             range.Font.Bold = true;
    27             range.Font.Size = 18;
    28             range.HorizontalAlignment = excel.XlVAlign.xlVAlignCenter;
    29             range.Borders.LineStyle = excel.XlBorderWeight.xlHairline;
    30             //合并单元格操作
    31             excel.Range range0 = worksheet.get_Range("A1", "B1");
    32             range0.Merge(false);//合并操作
    33             worksheet.Cells[0, 1] = "姓名";//设置显示标题
    34             excel.Range range0 = worksheet.get_Range("C1", "F1");
    35             range0.Merge(false);
    36             worksheet.Cells[0, 2] = "备注";
    37             DataTable dt = GetData();//将从数据库取出来的数据存放到DataTable
    38             int row=1;//控制单元格的行数
    39             for(int i=0;i<dt.Rows.Count;i++)
    40             {
    41                 worksheet.Cells[row, 1] = dt.Rows[i][0].ToString();
    42                 worksheet.Cells[row,2]=dt.Rows[i][1].ToString();
    43                 row++;
    44             }
    45             object missing = System.Reflection.Missing.Value;
    46             //文件保存到指定路径
    47             workbook.SaveAs(path, missing, missing, missing, missing, missing, excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing);
    48             workbook.Close(false, path, true);
    49             excelApp.Quit();
    50             //释放资源
    51             System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
    52             System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
    53             System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
    54             worksheet = null;
    55             workbook = null;
    56             excelApp = null;
    57             GC.Collect();
    58         }
    59         //将excel下载到本地
    60         public void DownloadExcel()
    61         {
    62             string filepath = Server.MapPath("~/Excel/SaveExcel/person.xls");
    63             string fileName = Path.GetFileName(filepath);
    64             FileInfo fileInfo = new FileInfo(filepath);
    65             Response.Clear();
    66             Response.ClearContent();
    67             Response.ClearHeaders();
    68             Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
    69             Response.AddHeader("Content-Length", fileInfo.Length.ToString());
    70             Response.AddHeader("Content-Transfer-Encoding", "binary");
    71             Response.ContentType = "application/octet-stream";
    72             Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
    73             Response.WriteFile(fileInfo.FullName);
    74             Response.Flush();
    75             Response.End();
    76         }
    77     } 
    78 }

        看完是否有一定的收获呢?这里还要说明一点,使用的时候别忘了引用Microsoft.Office.Interop.Excel.dll程序集,装了office的朋友就可以直接引用,如果没装的话可以从网上下载一个。今天就写到这里了,希望能给你们提供帮助。谢谢!

    特别声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    HashMap源码解析
    深入理解Java字符串
    Netty粘包、半包
    Netty源码分析-Future和Promise
    Lock简介
    一、Netty中的EventLoop
    对象实例化内存布局与访问定位
    运行时数据区概述及线程
    TCP三次握手和四次挥手
    Redis线程IO模型-Redis 单线程为什么还能这么快?
  • 原文地址:https://www.cnblogs.com/nianshou/p/2540475.html
Copyright © 2011-2022 走看看