/// <summary>
/// 导出Excel
/// </summary>
public void ExportExcel()
{
#region 添加引用
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();//需要添加 Microsoft.Office.Interop.Excel引用
if (app == null) return;//app == null ,则代表服务器上“服务器上缺少Excel组件,需要安装Office软件”
#endregion #region 设置app属性
app.Visible = false;
app.UserControl = true;
Microsoft.Office.Interop.Excel.Workbooks workbooks = app.Workbooks;
Microsoft.Office.Interop.Excel._Workbook workbook = workbooks.Add(Server.MapPath("~/Template/Template.xls")); //加载模板
Microsoft.Office.Interop.Excel.Sheets sheets = workbook.Sheets;
Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
Microsoft.Office.Interop.Excel.Range range = null; worksheet = (Microsoft.Office.Interop.Excel._Worksheet)sheets.get_Item();//获取第一个Sheet页
if (worksheet == null)
worksheet = (Microsoft.Office.Interop.Excel._Worksheet)workbook.Worksheets.Add(System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing);
#endregion #region 根据获得的数据,进行数据的插入(到Excel模板中)
var _row = ;//从第15行开始导入列表 //合并A14到K14
range = worksheet.get_Range("A" + (_row - ), "K" + (_row - ));
range.Merge(range.MergeCells); //取得数据集,并导入Excel
DataTable table = new DataTable();
for (int i = _row; i < table.Rows.Count + _row; i++)
{
worksheet.Cells[_row, ] = "第_row行 第一列";
worksheet.Cells[_row, ] = "第_row行 第二列";
} //插入行
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Rows[_row, Missing.Value];
range.Insert(Microsoft.Office.Interop.Excel.XlInsertShiftDirection.xlShiftDown, Missing.Value);
#endregion #region 对已导出好的Excel报表进行保存到服务器,以便进行下载
if (!Directory.Exists(Server.MapPath("~/Excel/"))) Directory.CreateDirectory(Server.MapPath("~/Excel/"));
string savaPath = "~/Excel/" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
workbook.SaveAs(Server.MapPath(savaPath), Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);//Missing 在System.Reflection命名空间下。
#endregion #region 释放资源
// 关闭电子表格,释放资源
workbook.Close(null, null, null);
app.Workbooks.Close();
workbook = null; // 退出 Excel,释放资源
app.Quit();
app = null;
GC.Collect();
#endregion #region 下载Excel
Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");
Response.TransmitFile(savaPath);
Response.Flush();
Response.Close();
#endregion
} /// <summary>
/// 用于excel表格中列号字母转成列索引,从1对应A开始
/// </summary>
/// <param name="column">列号</param>
/// <returns>列索引</returns>
private int ColumnToIndex(string column)
{
if (!Regex.IsMatch(column.ToUpper(), @"[A-Z]+"))
{
throw new Exception("Invalid parameter");
}
int index = ;
char[] chars = column.ToUpper().ToCharArray();
for (int i = ; i < chars.Length; i++)
{
index += ((int)chars[i] - (int)'A' + ) * (int)Math.Pow(, chars.Length - i - );
}
return index;
} /// <summary>
/// 用于将excel表格中列索引转成列号字母,从A对应1开始
/// </summary>
/// <param name="index">列索引</param>
/// <returns>列号</returns>
private string IndexToColumn(int index)
{
if (index <= )
{
throw new Exception("Invalid parameter");
}
index--;
string column = string.Empty;
do
{
if (column.Length > )
{
index--;
}
column = ((char)(index % + (int)'A')).ToString() + column;
index = (int)((index - index % ) / );
} while (index > );
return column;
}

参考文档 <http://www.cnblogs.com/herbert/archive/2010/06/30/1768271.html>

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

  1. C#使用Aspose.Cells导出Excel简单实现

    首先,需要添加引用Aspose.Cells.dll,官网下载地址:http://downloads.aspose.com/cells/net 将DataTable导出Xlsx格式的文件下载(网页输出) ...

  2. 利用poi导出Excel

    import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ...

  3. [django]数据导出excel升级强化版(很强大!)

    不多说了,原理采用xlwt导出excel文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条 ...

  4. NPOI导出Excel

    using System;using System.Collections.Generic;using System.Linq;using System.Text;#region NPOIusing ...

  5. ASP.NET Core 导入导出Excel xlsx 文件

    ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...

  6. asp.net DataTable导出Excel 自定义列名

    1.添加引用NPOI.dll 2.cs文件头部添加 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.IO; 3.代码如 ...

  7. Aspose.Cells导出Excel(1)

    利用Aspose.Cells导出excel 注意的问题 1.DataTable的处理 2.进行编码,便于中文名文件下载 3.别忘了Aspose.Cells.dll(可以自己在网上搜索) public ...

  8. 前端导出Excel兼容写法

    今天整理出在Web前端导出Excel的写法,写了一个工具类,对各个浏览器进行了兼容. 首先,导出的数据来源可能有两种: 1. 页面的HTML内容(一般是table) 2. 纯数据 PS:不同的数据源, ...

  9. JS导出excel 兼容ie、chrome、firefox

    运用js实现将页面中的table导出为excel文件,页面显示如下: 导出的excel文件显示如下: 实现代码: <!DOCTYPE html> <html> <head ...

  10. Oracle导出excel

    oracle导出excel(非csv)的方法有两种,1.使用sqlplus  spool,2.使用包体 现将网上相关代码整理后贴出以备不时之需: 使用sqlplus: 使用sqlplus需要两个文件: ...

随机推荐

  1. Windows 10正式版官方原版ISO镜像下载

    [微软官方]下载地址1:官方下载工具(32-位系统版本)官方下载工具(64-位系统版本) [MSDN]下载地址2:cn_windows_10_multiple_editions_x64_dvd_684 ...

  2. apache 配置order allow deny讲解

    http://www.111cn.net/phper/apache/43025.htm

  3. Spring 3.1 Environment Profiles--转载

    原文地址:http://gordondickens.com/wordpress/2012/06/12/spring-3-1-environment-profiles/ Profiles Spring ...

  4. Scala Error: error while loading Suite, Scala signature Suite has wrong version expected: 5.0 found: 4.1 in Suite.class

    准备给scala项目引入单元测试 <dependency> <groupId>org.scalatest</groupId> <artifactId>s ...

  5. __asm__ __volatile__("": : :"memory");

    参考:http://stackoverflow.com/questions/14950614/working-of-asm-volatile-memory asmvolatile("&quo ...

  6. Linux 学习笔记 cp 和 ln

    最近在重温大学的经典课程:Linux.每天工作之余的时间,坐在家里的阳台上,简简单单的纪录一些基本的知识点,对我来说,既温暖又难得. 有朋友问我关于cp和ln建立符号链接(软链接)和硬链接的一些问题, ...

  7. iOS 10 的适配问题

    随着iOS10发布的临近,大家的App都需要适配iOS10,下面是我总结的一些关于iOS10适配方面的问题,如果有错误,欢迎指出. 1.系统判断方法失效: 在你的项目中,当需要判断系统版本的话,不要使 ...

  8. java 类从哪个jar包加载的

    <%@page contentType="text/html; charset=GBK"%><%@page import="java.security. ...

  9. TCP/IP与UDP区别

    最近面试,问到这方面的问题,这里总结一下: TCP (Transmission  Control  Protocol   传输控制协议):面向连接的,不可靠的,数据流服务.UDP (User  Dat ...

  10. javaweb学习总结二(静态导入、自动拆装箱、增强for与可变参数)

    一:静态导入语法:import static 导入类.成员变量|成员方法那么在代码中可以直接使用变量或者方法,而不需要通过类名.来调用 静态导入: import static java.lang.Sy ...