序言:我们在做企业项目或者一些管理系统的时候往往会用到导出到excel报表这项功能,下面我介绍的是用windows自带的excel来打印

首先必须引入:Interop.Excel.dll、Interop.Microsoft.Office.Core.dll这两个分别是microsoft对应excel的驱动

如何加如:在bin文件夹---右键添加引用

选择对应的office版本加入上面两个dll;

打印:

在后台打印操作如下:

假设得到了数据集DataSet ds=new DataSet();

 #region copy template to target dir
string sourceFile = "";
sourceFile = templateFilePath + @"\excel.xls"; string targetFile = Server.MapPath(".") + @"\template\" + System.DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xls";
try
{
System.IO.File.Copy(sourceFile, targetFile);
}
catch { }
#endregion

这一行代码是将模板复制到新的文件夹并按时间来命名,牵扯到文件操作,需要引用system.io

        Excel.Application xApp = null;//创建excel应用程序
Excel.Workbook xBook = null;//工作簿
Excel.Worksheet xSheet = null;//工作簿中创建工作表
bool PrintNote = false;
try
{
xApp = new Excel.ApplicationClass();
xBook = xApp.Workbooks.Open(targetFile,
Type.Missing, Type.Missing, Type.Missing, Type.Missing
, Type.Missing, Type.Missing, Type.Missing, Type.Missing
, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
xSheet = (Excel.Worksheet)xBook.Sheets[1];//有三个工作簿选择第一个,也可选择其他
int startrow = 5;//从第几行开始打印
int col = 0;
int i = 0;
  for (i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
col = startrow + i;//数据行
//下面就要对xsheet填入数据了
有两种方式:方式一
xSheet.get_Range("A" + col , Type.Missing).Value2 = ds.Tables[0].Rows[i]["NAME"].ToString().Trim();
xSheet.get_Range("A" + col , Type.Missing).Value2 = ds.Tables[0].Rows[i]["sex"].ToString().Trim();
xSheet.get_Range("A" + col , Type.Missing).Value2 = ds.Tables[0].Rows[i]["age"].ToString().Trim();
方式二:参数为行、列
xSheet.cells[col,1]=ds.Tables[0].Rows[i]["NAME"].ToString().Trim();
xSheet.cells[col,1]=ds.Tables[0].Rows[i]["NAME"].ToString().Trim();
xSheet.cells[col,1]=ds.Tables[0].Rows[i]["NAME"].ToString().Trim();
}
数据打印完成后加边框或其他操作 
                xSheet.get_Range("A" + (3).ToString(), "K" + (col).ToString()).Borders.LineStyle = 1;//加边框
                xSheet.get_Range("A" + (3).ToString(), "A" + (col).ToString()).ShrinkToFit = true;//内容适应文本框大小
xBook.Save();//用于保存xSheet的数据

在需要合并单元格时序特别注意,必须要在没有填入数据前进行和并,否则会提示:覆盖前内容等提示;

合并方法 xSheet.get_Range("A" + (j + 3).ToString(), "A" + (j + 4).ToString()).MergeCells = true;

xSheet.get_Range(xSheet.cells[col,1], xSheet.cells[col,1]).MergeCells = true;

在操作完excel之后一定要记得关闭应用不然下次操作会提示excel占用。操作方法:

 if (xSheet != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xSheet);
xSheet = null;
}
if (xBook != null)
{
try
{
xBook.Close(false, System.Type.Missing, System.Type.Missing);
}
catch { }
System.Runtime.InteropServices.Marshal.ReleaseComObject(xBook);
xBook = null;
}
if (xApp != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xApp);
xApp = null;
}
GC.Collect();//强制代码垃圾回收 DownLoadFile(targetFile, IYear.ToString() + ".xls");//下载文档 return true;

下载文档的方法:

  protected void DownloadFile(string filename, string downname)
{
FileStream f = new FileStream(filename, FileMode.Open);
byte[] buffer = new byte[f.Length];
f.Read(buffer, 0, buffer.Length);
f.Close();
filename = filename.Replace(@"/", @"\");
string saveFileName = "";
int intStart = filename.LastIndexOf("\\") + 1;
saveFileName = filename.Substring(intStart, filename.Length - intStart);
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
try
{
if (filename.ToLower().IndexOf("doc") >= 0)
{
Response.ContentType = "application/ms-word";
}
else
{
if (filename.ToLower().IndexOf("xls") >= 0)
{
Response.ContentType = "application/ms-excel";
}
else
{
Response.ContentType = "application/octet-stream";
}
}
}
catch
{
Response.ContentType = "application/octet-stream";
}
Response.AppendHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(downname));
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.BinaryWrite(buffer);
Response.GetHashCode();
Response.End();
}

文章打印成功

三:读取excel'中的数据到dataTable中

#region 

        public DataTable ReadExcelFile(string Filename, string SheetName, int _startIndex)
{ DataTable dt = null; OleDbConnection Con = null; if (Filename.ToLower().IndexOf(".xlsx") >= 0)
{
Con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Filename + ";Persist Security Info=False;Extended Properties='Excel 12.0 Xml;HDR=NO;IMEX=1'"); }
else
{
Con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Filename + ";Persist Security Info=False;Extended Properties='Excel 8.0;HDR=NO;IMEX=1'"); }
Con.Open(); OleDbCommand Cmd = new OleDbCommand("Select * From [" + SheetName + "$]", Con);
OleDbDataReader Reader = Cmd.ExecuteReader();
dt = GetDataTableFromDataReader(Reader, _startIndex);
Con.Close(); return dt; } /// <summary>
/// Return a DataTable From OleDbDataReader
/// </summary>
/// <param name="reader">OleDbDataReader</param>
/// <param name="_startIndex">起始行</param>
/// <returns></returns>
private DataTable GetDataTableFromDataReader(OleDbDataReader reader, int _startIndex)
{
DataTable schema = reader.GetSchemaTable();
DataColumn[] columns = new DataColumn[schema.Rows.Count];
DataColumn column;
//Build the schema
for (int i = 0; i < schema.Rows.Count; i++)
{
column = new DataColumn(); column.AllowDBNull = (bool)schema.Rows[i]["AllowDBNull"];
column.AutoIncrement = (bool)schema.Rows[i]["IsAutoIncrement"];
column.ColumnName = (string)schema.Rows[i]["ColumnName"];
column.DataType = Type.GetType(schema.Rows[i]["DataType"].ToString());
if (column.DataType == Type.GetType("System.String"))
{ column.MaxLength = (int)schema.Rows[i]["ColumnSize"]; }
column.ReadOnly = (bool)schema.Rows[i]["IsReadOnly"];
column.Unique = (bool)schema.Rows[i]["IsUnique"];
columns[i] = column;
}
DataTable data = new DataTable();
data.Columns.AddRange(columns);
//Get the data itself.
int j = 0;
while (reader.Read())
{
if (j >= _startIndex)
{
if (j == _startIndex)
{
for (int i = 0; i < schema.Rows.Count; i++)
{
try
{
data.Columns[i].ColumnName = reader[i].ToString();
}
catch
{
data.Columns[i].ColumnName = " ";
}
} }
else
{
DataRow row = data.NewRow();
for (int i = 0; i < schema.Rows.Count; i++)
{ row[i] = reader[i]; }
data.Rows.Add(row);
}
}
j = j + 1;
}
return data;
}
#endregion }

ASP.NET打印EXCEl报表技术总结的更多相关文章

  1. 10、借助POI实现Java生成并打印excel报表(1)

    10.1.了解 Apache POI 实际开发中,用到最多的是把数据库中数据导出生成报表,尤其是在生产管理或者财务系统中用的非常普遍.生成报表格式一般是EXCEL或者PDF .利用Apache  PO ...

  2. POI打印Excel报表

    1.将POI组件中的jar包放入项目中路径下的WEB-INF/lib目录中 2.在javabean中创建一个poi的java文件,中间出了创建getXXX(),setXXX()方法外,加入readRe ...

  3. 11、借助POI实现Java生成并打印excel报表(2)

    11.POI打印功能 11.1.常用模块形式: HSSFPrintSetup printSetup = sheet.getPrintSetup(); printSetup.setVResolution ...

  4. ASP.NET MVC 4.0 中使用NPOI 2.2.0 按模板生成Excel报表

    使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/ ...

  5. 在.NET中使用EPPlus生成Excel报表 .

    --摘抄自:http://blog.csdn.net/zhoufoxcn/article/details/14112473 在开发.NET应用中可能会遇到需要生成带图表(Chart)的Excel报表的 ...

  6. Excel 报表导入导出

    使用 Excel 进行报表的导入导出,首先下载相关的 jar 和 excel util. Excel Util 下载地址 引入依赖: <!-- poi office --> <dep ...

  7. Java中导入导出Excel -- POI技术

    一.介绍: 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实 ...

  8. Asp.net导出Excel续章(自定义合并单元格,非Office组件)

    结合上次写的导出Excel方法,这次上头要求我将列头进行一下合并 以前的效果: 改进后的效果: 在上篇文章中写到了Excel的导出方法,这次为了避免在生产环境中使用Office组件,服务器各种权限配置 ...

  9. asp.net 操作Excel大全

    asp.net 操作Excel大全 转:http://www.cnblogs.com/zhangchenliang/archive/2011/07/21/2112430.html 我们在做excel资 ...

随机推荐

  1. MVC实用架构设计:总体设计

    http://developer.51cto.com/art/201309/410166.htm

  2. BestCoder Round #14 B 称号 Harry And Dig Machine 【TSP】

    称号:Harry And Dig Machine 哈哈  最终涨边粉色了,不easy呀.顺便写一道题解吧 题意:给一个m*n的矩阵,然后当中最多由10个有值,求总左上角把全部的值都拿上回到左上角的最小 ...

  3. 【快速选择算法与nth_element函数】【续UVA11300 】

    在白书中提到了一种O(n)级别的寻找中位数算法 就是我们今天要介绍的主角 快速选择算法 类似快排 选择一个比较元素 进行递归处理寻找第k大元素 假设最后比较元素到了i 以下描述是我写快排的常用字符 所 ...

  4. 更改yum网易 阿里云的yum源。

    一,鉴于用国外的Yum源,速度比较慢,所以想到将国外的yum源,改为国内的Yum源,著名的有网易 阿里云源.如何更改呢? 二,更改yum源为网易的. 首先备份/etc/yum.repos.d/Cent ...

  5. ubuntu下ffmpeg的安装,实现支持3gpp等转换

    最近上线的项目,语音格式转码需要调试3gpp,所以需要再spx,3gpp,3gp等格式之间转换,特记录基于ubuntu环境下的环境ffmpeg部署细则 安装测试环境:ubuntu 14.04 64bi ...

  6. Emmet 语法探析

    Emmet 语法探析 Emmet(Zen Coding)是一个能大幅度提高前端开发效率的一个工具. 大多数编辑器都支持Snippet,即存储和重用一些代码块.但是前提是:你必须先定义 这些代码块. E ...

  7. MVC 全局异常过滤器HandleErrorAttribute

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  8. github Permission denied (publickey)解决办法

    想要玩玩git,参考了网友懒惰之计的一篇Blog<github:如何获取项目源代码 >,按部就班完成了所有的步骤的, 可在测试的时候,遇到了问题,总是报错”github Permissio ...

  9. javascript 算法

    前段时间学习算法方面的知识看了一下用C语言写的一些简单的算法自己用js模拟实现一遍现在整理出来和大家分享一下. 河内塔 斐波那契数列 巴斯卡三角形 三色棋 河内之塔(Towers of Hanoi)是 ...

  10. [Math]Reverse Integer

    Total Accepted: 111287 Total Submissions: 474471 Difficulty: Easy Reverse digits of an integer. Exam ...