using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Web.Security;
using OWC;
using System.Data.OleDb;
using System.IO;namespace MikeCat
{
/// <summary>
/// MikeCat_Excel 的摘要说明。
/// *******************************
/// 原作:孟宪会
/// 修改人:迈克老猫
/// *******************************
/// </summary>
public class MikeCat_Excel : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.TextBox xlfile;
protected System.Web.UI.WebControls.Button ExportDataBase2Excel;
protected System.Web.UI.WebControls.Button ExportDataGrid2Excel;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected HtmlGenericControl mf=new HtmlGenericControl();
OleDbConnection conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current. Server.MapPath("NorthWind.mdb"));
OleDbCommand cmd;
protected readonly string sql="select top 66 productName,unitprice from products"; private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Label1.Text = "请输入要保存得文件名字:";
ExportDataGrid2Excel.Text = "由DataGrid生成Excel文件";
ExportDataBase2Excel.Text = "数据库直接生成Excel文件";
DataGrid1.Columns[0].HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
DataGrid1.Columns[0].HeaderText = "产品名称";
DataGrid1.Columns[1].HeaderText = "单价";
DataGrid1.Columns[0].HeaderStyle.Font.Bold = true;
DataGrid1.Style.Add("font-size", "9pt");
mf.InnerText = "欢迎光临老猫的理想--将DataGrid输出到Excel文件";
this.BindDataGrid();
}
private void BindDataGrid()
{
conn.Open();
cmd=new OleDbCommand(sql,conn);
OleDbDataReader reader = cmd.ExecuteReader();
this.DataGrid1.DataSource = reader;
this.DataGrid1.DataBind();
reader.Close();
conn.Close();
}
private void WriteDataBase2Excel()
{
SpreadsheetClass xlsheet=new SpreadsheetClass();
conn.Open();
cmd=new OleDbCommand(sql,conn);
OleDbDataReader reader=cmd.ExecuteReader();
int numbercols=reader.FieldCount;
int row=2;
int i=0;
//输出标题
for(i=0;i<numbercols;i++)
{
xlsheet.ActiveSheet.Cells[1, i + 1] = reader.GetName(i).ToString();
} // 输出字段内容
while(reader.Read())
{
for(i=0;i<numbercols;i++)
{
xlsheet.ActiveSheet.Cells[row, i + 1] = reader.GetValue(i).ToString();
}
row = row + 1;

}
reader.Close();
conn.Close();
try
{
xlsheet.ActiveSheet.Export(Server.MapPath(".") + "\\mfExcel\\" + this.xlfile.Text+".xls",OWC.SheetExportActionEnum.ssExportActionNone);
}
catch(System.Runtime.InteropServices.COMException e )
{
Response.Write("错误:" + e.Message);
} } private void WriteDataGrid2Excel()
{
SpreadsheetClass xlsheet=new SpreadsheetClass();
int i=0,j=0;
//输出标题
foreach(DataGridColumn oItem in DataGrid1.Columns)
{
xlsheet.ActiveSheet.Cells[1, i + 1] = oItem.HeaderText;
//xlsheet.ActiveSheet.Range(xlsheet.ActiveSheet.Cells(1, 1),xlsheet.ActiveSheet.Cells(1, i + 1)).Font.Bold = True;
//设置格式
((Range)xlsheet.get_Range(xlsheet.Cells[1,1],xlsheet.Cells[1,i+1])).Font.set_Bold(true);
object o="red";
((Range)xlsheet.get_Range(xlsheet.Cells[1,1], xlsheet.Cells[1,i+1])).Font.set_Color(ref o);
i = i + 1;
} int numbercols = DataGrid1.Items[0].Cells.Count;
//输出字段内容
for(j=0;j<DataGrid1.Items.Count;j++)
{
for(i=0;i<numbercols;i++)
{
object o="blue";
((Range)xlsheet.get_Range(xlsheet.Cells[2, 2], xlsheet.Cells[j + 2, i + 1])).Font.set_Color(ref o);
//xlsheet.Range("A2:B14").WrapText = True
xlsheet.get_Range(xlsheet.Cells[2, 1], xlsheet.Cells[j + 2, i + 1]).AutoFitColumns();
xlsheet.ActiveSheet.Cells[j + 2, i + 1] = DataGrid1.Items[j].Cells[i].Text.Replace("&nbsp;", " ");
}
}
try
{
xlsheet.ActiveSheet.Export(Server.MapPath(".") + "\\mfExcel\\" + this.xlfile.Text+".xls",OWC.SheetExportActionEnum.ssExportActionNone);
}
catch(System.Runtime.InteropServices.COMException e)
{
Response.Write("错误:" + e.Message);
} }
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.ExportDataBase2Excel.Click += new System.EventHandler(this.ExportDataBase2Excel_Click);
this.ExportDataGrid2Excel.Click += new System.EventHandler(this.ExportDataGrid2Excel_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void ExportDataGrid2Excel_Click(object sender, System.EventArgs e)
{
if(this.xlfile.Text.Trim()!="")
{
this.WriteDataGrid2Excel();
}
} private void ExportDataBase2Excel_Click(object sender, System.EventArgs e)
{
if(this.xlfile.Text.Trim()!="")
{
this.WriteDataBase2Excel();
}
}
}
}

解决方案 »

  1.   

    <%@ Page language="c#" Codebehind="MikeCat_Excel.aspx.cs" AutoEventWireup="false" Inherits="MikeCat.MikeCat_Excel" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <title id="mf"></title>
    <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
    <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body MS_POSITIONING="GridLayout" style="FONT-SIZE:9pt">
    <form id="Form1" method="post" runat="server">
    <asp:Label id="Label1" runat="server"></asp:Label>
    <asp:TextBox ID="xlfile" Runat="server"></asp:TextBox>
    <br>
    <br>
    <asp:Button ID="ExportDataBase2Excel" Runat="server" />
    <asp:Button ID="ExportDataGrid2Excel" Runat="server" />
    <br>
    <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False" BorderColor="#3366CC"
    BorderStyle="None" BorderWidth="1px" BackColor="White" CellPadding="4">
    <FooterStyle ForeColor="#003399" BackColor="#99CCCC"></FooterStyle>
    <SelectedItemStyle Font-Bold="True" ForeColor="#CCFF99" BackColor="#009999"></SelectedItemStyle>
    <ItemStyle ForeColor="#003399" BackColor="White"></ItemStyle>
    <HeaderStyle Font-Bold="True" ForeColor="#CCCCFF" BackColor="#003399"></HeaderStyle>
    <Columns>
    <asp:BoundColumn DataField="productname"></asp:BoundColumn>
    <asp:BoundColumn DataField="unitprice"></asp:BoundColumn>
    </Columns>
    <PagerStyle HorizontalAlign="Left" ForeColor="#003399" BackColor="#99CCCC" Mode="NumericPages"></PagerStyle>
    </asp:DataGrid>
    </form>
    </body>
    </HTML>