/// <summary>
/// 导数据到Excel模板
/// </summary>
/// <param name="tab">要输出内容的Table</param>
/// <param name="fileName">生成后的路径带文件名</param>
/// <param name="filePath">模板路径带文件名</param>
/// <param name="lineNumber">表头占了几行</param>
/// <param name="colNumber">表头占了几列</param>
/// <param name="tableItem">Excel的第几个工作薄</param>
public static void ToExcelTemplate(DataTable tab, string fileName, string filePath, int lineNumber,int colNumber, int tableItem)
{
//需要添加 Microsoft.Office.Interop.Excel引用
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); if (app == null)
{
HttpContext.Current.Response.Write("服务器上缺少Excel组件,需要安装Office软件。");
return;
}
app.Visible = false;
app.UserControl = true;
Microsoft.Office.Interop.Excel.Workbooks workbooks = app.Workbooks;
Microsoft.Office.Interop.Excel._Workbook workbook = workbooks.Add(HttpContext.Current.Server.MapPath(filePath)); //加载模板
Microsoft.Office.Interop.Excel.Sheets sheets = workbook.Sheets;
Microsoft.Office.Interop.Excel._Worksheet worksheet = (Microsoft.Office.Interop.Excel._Worksheet)sheets.get_Item(tableItem); //第几个工作薄。
if (worksheet == null)
return; //工作薄中没有工作表.
//1、获取数据。
//DataSet dt = myDB.Select(sql, null); //--------------------------------------------------根据实际需要修改--------------!!!!!
int rowCount = tab.Rows.Count;//总行数
int col = tab.Columns.Count;//总列数
if (rowCount < 1)
return; //没有数据,不需要导出。
//2、写入数据,Excel索引从1开始。
for (int i = 1; i <= rowCount; i++)
{
int row_ = lineNumber + i; //Excel模板上表头和标题行占了2行,根据实际模板需要修改;
int dt_row = i - 1; //dataTable的行是从0开始的。
colNumber = colNumber + 1;
//循环每一列
for (int b = 0; b < col; b++)
{
worksheet.Cells[row_, b + colNumber] = tab.Rows[i - 1][b];
}
}
//调整Excel的样式。
//Microsoft.Office.Interop.Excel.Range rg = worksheet.Cells.get_Range("A3", worksheet.Cells[rowCount + 2, 8]);
//rg.Borders.LineStyle = 1; //单元格加边框。
worksheet.Columns.AutoFit(); //自动调整列宽。
//3、保存生成的Excel文件。
//Missing 在System.Reflection命名空间下。
string savaPath = fileName;
//如果已经有了就删除原来的
if (File.Exists(HttpContext.Current.Server.MapPath(savaPath)))
{
File.Delete(HttpContext.Current.Server.MapPath(savaPath));
}
workbook.SaveAs(HttpContext.Current.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); //4、按顺序释放资源。
NAR(worksheet);
NAR(sheets);
NAR(workbook);
NAR(workbooks);
//自动下载
app.Quit();
NAR(app);
}
private static void NAR(object o)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
}
catch
{ }
finally
{
o = null;
}
}

  


  要导几个包:

using System.Data;
using System.Reflection;
using Excel = Microsoft.Office.Interop.Excel;
using System.IO;

  

一个很好的用C#导出数据到Excel模板的方法的更多相关文章

  1. C#导出数据到Excel通用的方法类

    导出数据到Excel通用的方法类,请应对需求自行修改. 资源下载列表 using System.Data; using System.IO; namespace IM.Common.Tools { p ...

  2. c# 导出数据到Excel模板

    最近在做一个发邮件的功能,客户要求需要导出一个Excel附件,并给了附件的格式, eg: Last Name 姓 First Name 名 Chinese Characters汉字书写(仅大陆人填写) ...

  3. C#导出数据至excel模板

    开源分享最近一个客户要做一个将数据直接输出到指定格式的Excel模板中,略施小计,搞定 其中包含了对Excel的增行和删行,打印预览,表头,表体,表尾的控制 using System; using S ...

  4. C# 导出数据到Excel模板中(转)

    今天做报表的时候遇到了多表头的问题,而且相应的报表的格式都一样.所以就采用了报表模板的方式来进行. 第一步:在开发的当前项目中引入:Microsoft.Office.Interop.Excel:Sys ...

  5. C#导出数据的EXCEL模板设计

    一:将如下图中,查询出来的数据导出到EXCEL中 二:Excel的状态 三:设计的背后工作 四:最后一步,隐藏

  6. (原创)将Datatable数据按照Excel模板格式导出

    最近遇到一个问题,就是导出数据的时候需要自定义的表头,如图 如果自己用代码写表头的话,可能会有点复杂,而且代码量很多,所以我就想了一个办法,直接在Excel里面把表头定义好,然后把数据写入Excel模 ...

  7. 从DataTable高效率导出数据到Excel

    首先从数据库读取数据到DataTable,这我就不提了,大家都明白.下面直接介绍如何从DataTable高效率导出数据到Excel中的方法,代码如下: using Microsoft.Office.I ...

  8. 一个方便且通用的导出数据到 Excel 的类库

    一个方便且通用的导出数据到 Excel 的类库 起源: 之前在做一个项目时,客户提出了许多的导出数据的需求: 导出用户信息 导出业务实体信息 各种查询都要能导出 导出的数据要和界面上看到的一致 可以分 ...

  9. python 导出数据到excel 中,一个好用的导出数据到excel模块,XlsxWriter

    最近公司有项目需要导出数据到excel,首先想到了,tablib,xlwt,xlrd,xlwings,win32com[还可以操作word],openpyxl,等模块但是 实际操作中tablib 写入 ...

随机推荐

  1. cf459A Pashmak and Garden

    A. Pashmak and Garden time limit per test 1 second memory limit per test 256 megabytes input standar ...

  2. C与C++动态分配二维数组

    C: C中使用函数malloc和free两个函数. //动态分配M*N维 int **a=(int **)malloc(sizeof(int*)*M); ;i<M;i++) a[i]=(int ...

  3. poj 1088 滑雪_记忆化搜索

    题意:略 直接用记忆化搜索就行了 #include<cstdio> #include<iostream> using namespace std; int n,m; int m ...

  4. Windows.Server.2003.R2 简体中文企业版 x86 x64(转)

    两张盘,第二张是 R2安装盘. Windows.Server.2003.R2.With.Sp2 中文企业版[MSDN官方版本][32bit] Windows 2003.R2.With.Sp2 简体中文 ...

  5. Android学习总结——获取被启动的Activity传回的数据

    当前Activity:包含一个Button和一个TextView,用于启动另一个Activity和显示传回的数据,这里重写了onActivityResult()方法. public class Mai ...

  6. http头部信息研究

    1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type. 2. Accept-Charset: 浏览器申明自 ...

  7. 使用VS2003 发送Email

    使用VS2003发送Email与之后VS2005版本及以上VS版本不一样,记录一下, 需要引用using System.Web.Mail; public void SendEmail() { try ...

  8. Oracle文章中常用数据表的描述

    desc stud; 名称   空值       类型           ---- -------- ------------ ID   NOT NULL NUMBER(38)   NAME     ...

  9. php输出json中文显示编码-解决办法

    $str = "中华人民共和国";$ar = array( "a" => "a0", "b" => &quo ...

  10. c++ :OOP之静态类型与动态类型

    所谓静态类型即类型指针或引用的字面类型:而动态类型即类型指针或引用的实际类型. 这一对概念一般发生在基类和派生类之间. 如: class Base { ..... } class Derived : ...