首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>NET专区>ASP.NET>图解asp.net如何用excel做报表的实例
图解asp.net如何用excel做报表的实例
来源: 发布时间:2008-04-22 发布人: 浏览: 人次   字体: [ ]  
    四、 在添加一个输出的aspx页面:Output.aspx,在页面上放置一个label,来显示input框架传递过来的参数,在cs文件中添加代码如下:
    using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

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

public partial class Output : System.Web.UI.Page
{
    OleDbConnection Olecn;
    OleDbCommand OleCamm;
    DataTable DT 
= new DataTable();

    
private string StrTime = "";
    
protected void Page_Load(object sender, EventArgs e)
    
{
        
//接收Input框架传递的参数
        if (!IsPostBack)
        
{
            StrTime 
= Request.QueryString["Time"];
            
if (StrTime != null)
                Label1.Text 
= "时间:" + StrTime;
        }


        
//在页面加载的时候将数据取出
        if (ConnectionDataBase())
        
{
            OleCamm 
= new OleDbCommand();
            OleCamm.Connection 
= Olecn;
            Olecn.Open();
            OleCamm.CommandText 
= "select * from pl where date = " + "'" + StrTime + "'";
            OleDbDataAdapter OleDAdp 
= new OleDbDataAdapter(OleCamm);
            OleDAdp.Fill(DT);
            Olecn.Close();
        }

        Exceltest();
    }

    
    
/// <summary>
    
/// 连接数据库
    
/// </summary>
    
/// <returns></returns>

    private bool ConnectionDataBase()
    
{
        
try
        
{
            
string DataSource = Server.MapPath("~"+ "\\App_Data\\Excel.mdb";
            Olecn 
= new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DataSource);
            Olecn.Open();
        }

        
catch (Exception e1)
        
{
            Response.Write(e1.Message);
            
return false;
        }

        
finally
        
{
            Olecn.Close();
        }

        
return true;
    }


    
/// <summary>
    
/// 对Excel的操作
    
/// </summary>

    private void Exceltest()

    
{
        
//在创建Excel Application前先将已经打开的Excel资源释放掉
        EndExcelProcesse();

        
//指定模板文件
        FileInfo mode = new FileInfo(Server.MapPath("~"+ "\\Nomarl.xls");

        
//打开复制后的文件X
        object missing = Missing.Value;
        Excel.Application myExcel 
= new Excel.Application();

        
//打开模板文件
        myExcel.Application.Workbooks.Open(mode.FullName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);

        
//选中有数据的Cells
        Excel.Workbook myBook = myExcel.Workbooks[1];
        Excel.Worksheet mySheet 
= (Excel.Worksheet)myBook.Worksheets[1];
        Excel.Range r 
= mySheet.get_Range(mySheet.Cells[11], mySheet.Cells[DT.Rows.Count + 2, DT.Columns.Count - 3]);
        r.Select();

        
//不单独显示Excel,最后在IE中显示
        myExcel.Visible = false;

        
//第一行为报表的标题
        myExcel.Cells[11= "用模板导出的报表";

        
//逐行写入数据,数组中第一行为报表的列标题
        for (int i = 0; i < DT.Columns.Count - 3; i++)
        
{
            myExcel.Cells[
21 + i] = DT.Columns[i].Caption; ;
        }

        
        
//为报表填充数据并设置显示上下标格式
        for (int i = 0; i < DT.Rows.Count; i++)
        
{
            
for (int j = 0; j < DT.Columns.Count - 4; j++)
            
{
                myExcel.Cells[
3 + i, 1 + j] = DT.Rows[i][j];
            }

            
string a = DT.Rows[i][DT.Columns.Count-4].ToString();
            
string b = DT.Rows[i][DT.Columns.Count-3].ToString();
            
string c = DT.Rows[i][DT.Columns.Count -2].ToString();
            myExcel.Cells[
3 + i, DT.Columns.Count - 3= a + b + c;

            
//控制输出样式为下标
            mySheet.get_Range(mySheet.Cells[i + 3, DT.Columns.Count - 3], mySheet.Cells[i + 3, DT.Columns.Count - 3]).get_Characters(a.Length + 1, b.Length).Font.Subscript = true;

            
//控制输出样式为上标
            mySheet.get_Range(mySheet.Cells[i + 3, DT.Columns.Count - 3], mySheet.Cells[i + 3, DT.Columns.Count - 3]).get_Characters(a.Length + b.Length + 1, c.Length).Font.Superscript = true;
            mySheet.Columns.AutoFit();
        }


        
//在当前目录下指定一个临时文件
        string FileName = Server.MapPath("~"+ "\\Temp.xls";
        
if (File.Exists(FileName))
        
{
            File.Delete(FileName);
        }

        myExcel.Save(FileName);
        mySheet.Cells.Clear() ;
        
//设置不出现保存提示框
        myBook.Saved = true;
        myExcel.Application.Workbooks.Close();

        
//将Excel文件嵌入在IE里面,也可以在aspx页面用
        
//<iframe id="myExcelHtml" src ="E:\\练习\\excell\\WebSite2\\Temp.xls" width="100%" height="100%" runat ="server"></iframe>
        
//标签来嵌入
        Response.ClearContent();
        Response.ClearHeaders();
        Response.ContentType 
= "application/vnd.ms-excel";
        Response.AddHeader(
"Content-Disposition""inline;filename='我的文件'");
        Response.WriteFile(FileName);
        Response.Flush();
        Response.Close();
    }


    
/// <summary>
    
/// 当报表数据更新时,先强制结束前一个报表的数据源
    
/// 这种方法会同时杀死掉用户的excel进程
    
/// </summary>

    protected void EndExcelProcesse()
    
{
        
try
        
{    
            Process[] myProcesses 
= Process.GetProcessesByName("excel");
            
foreach (Process instance in myProcesses)
            
{
                instance.Kill();   
//强制终止    
            }

        }

        
catch { }
        
//在网上查的用下面的方法结束Excel进程表较好,但一直没有效果
        
//try
        
//{
        
//    System.Runtime.InteropServices.Marshal.ReleaseComObject(r);
        
//    System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheet);
        
//    System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);
        
//    System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
            
        
//    myBook = null;
        
//    mySheet = null;
        
//    myExcel = null;
        
//    r = null;
        
//    GC.Collect();
        
//}
        
//catch { }
    }


    
}


共3页: 上一页 [1] 2 [3] 下一页
相 关 文 章   发布商链接
·ASP.NET利用dot模板生成Word文档代码
·ASP.NET资源文件夹的具体介绍
·asp.net实现的截取字符串函数,保证汉...
·分析asp.net页面后台执行的流程
·如何防止asp.net盗链下载问题的实现...
·实例讲解ASP.NET上传大文件的解决方...
·asp.net文件下载显示进度条的代码
·ASP.NET实现Office文档的分类管理代...
·让FileUpload控件在IE和FireFox中的...
·ASP.NET配置Word的操作权限
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·如何实现在DataList控件中的D...
·实例讲解asp.net生成高质量缩
·asp.net适用于IE或FireFox的...
·举例详解C#代码与javaScript...
·asp.net无刷新上传文件
·在Ie中保存图片时出现"800700...
·asp.net文件上传大小限制的控
·asp.net动态生成txt文本文件...
·asp.net实现将Excel文件导入...
·实现多列,带图片的DropDownLi...
·javascript实现TreeView 控件
·ASP.NET配置Word的操作权限
·让FileUpload控件在IE和FireF...
·ASP.NET实现Office文档的分类
·asp.net文件下载显示进度条的
热 门 文 章
·asp.net(C#)上传下载及文件管...
·asp.net无刷新上传文件
·Asp.Net防止刷新重复提交数据...
·asp.net实现将Excel文件导入...
·asp.net中Web.Config配置文件...
·ASP.NET取得物理路径和虚拟路...
·asp.net(c#)生成验证码代码,...
·asp.net页面回传与js调用服务...
·asp.net(C#版)实现登录验证码...
·DataGrid中DropDownList触发S...
·ASP.net 实现批量数据更新或...
·asp.net中DataBinder.Eval的...
·asp.net可输入的下拉框复合控...
·asp.net中常见的几种日历控件...
·示例小解LinkButton组件中的C...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .