Excel是Microsoft公司的Office套件中的一种软件,他主要用来处理电子表格。Excel以界面友好、处理数据迅速等优点获得广大办公人员的欢迎。所以很多文档就以Excel的形式保存了下来。对于程序设计人员,在程序设计中,我们往往要访问Excel文件来获得数据。但由于Excel文件不是标准数据库,所以用程序语言来访问他就比较困难。 ASP.NET是Microsoft公司极力推荐的一个产品,作为.NET FrameWork框架中的一个重要组成部分,他主要用于Web设计。全新的设计理念、强大功能使得ASP.NET正在受到越来越多的程序设计人员的欢迎。也正是ASP.NET的强大的功能才使得访问Excel文档成为了一件相对简单的事情。下面就通过一个例子来具体说明ASP.NET是如何访问的Excel文档的。 一. 程序设计及运行环境 (1).Windows 2000 Professional (2)..Net Framework SDK Beta 2 (3).Microsoft Access Data Component 2.6(MADC2.6) 二. 具体的设计思路 (1).获得要访问的Excel文件名称 (2).读出Excel文件的内容 (3).用DataGrid格式显示出来 下面就一些关键的步骤来具体说明。 三. 程序设计的关键步骤 (1).为了方便,我们就把Excel文件假定在C盘的根目录,名称为test.xls。 (2).为了读取Excel文件,我们必须了解一个名称空间(NameSpace)--System.Data.Oledb。System.Data.Oledb中有三个对象分别是OleDbConnection,OleDbCommand,OledbDataAdapter。我们就是通过他们来访问Excel文件的。 i> OleDbConnection对象主要是提供连接方式。 ii> OleDbCommand对象提供对目标的具体操作方法。 iii>OledbDataAdapter对象是对对象进行不同操作后的返回数据集。 为了读取C盘的test.xls只要以下语句就可以完成:Dim myOleDbConnection As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=c:\test.xls;" & _ "Extended Properties=""Excel 8.0;""") Dim myOleDbCommand As OleDbCommand = New OleDbCommand("SELECT * FROM [Sheet1$]",myOleDbConnection) '如果你想读出Sheet2的内容 ,把Sheet1$改成Sheet2$即可 Dim myData As OledbDataAdapter= New OledbDataAdapter(myOleDbCommand) (3).读出Excel文件内容后,就要把他用DataGrid显示出来。为了显示,还要用另外一个名称空间--System.Data。他里面有个对象DataSet,他可以和DataGrid进行数据帮定,从而以DataGrid形式显示数据。而此时读出的数据集并不是以对象DataSet来表现的,这就需要进行转换,好在OledbDataAdapter对象提供了一个方法--Fill,可以完成转换。具体程序如下:Dim myDataset As New DataSet() myData.Fill(myDataset) '完成从OledbDataAdapter对象到DataSet的转换 DataGrid1.DataSource = myDataset.Tables(0).DefaultView DataGrid1.DataBind() '完成数据帮定,显示数据 四. 具体的源代码:<%@ Page Language="VB" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.Oledb" %> <script language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Dim myDataset As New DataSet() Dim myOleDbConnection As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=c:\2.xls;" & _ "Extended Properties=""Excel 8.0;""") Dim myOleDbCommand As OleDbCommand = New OleDbCommand("SELECT * FROM [Sheet1$]",myOleDbConnection) Dim myData As OledbDataAdapter= New OledbDataAdapter(myOleDbCommand)myData.Fill(myDataset)DataGrid1.DataSource = myDataset.Tables(0).DefaultView DataGrid1.DataBind() End Sub </script><html> <head></head> <body> <asp:Label id="L1" runat="server">读取C盘根目录下的test.xls文件,并以DataGrid的形式显示出来</asp:label> <asp:DataGrid id=DataGrid1 runat="server"/> </body> </html> 五. 总结 至此一个读取Excel文件的ASP.NET程序就全部完成了,如果你的机器达到以上提到的运行环境,那就建立一个指向此ASP.NET程序的Web虚拟目录,随便拷贝一个Excel文件到C盘的根目录,在浏览器运行一下程序,你就可以看到Excel文件内容了。
if (ds.Tables["tablevalue"].Rows.Count!=0) { ds.Clear(); ds.Tables["tablevalue"].Columns.Clear(); } strsql="select model as 机型 ,jh as 机号 ,convert(varchar(20),kxdate,111) as 开箱日期 ,convert(varchar(20),xldate,111) as 修理日期,zz as 症状,yy as 修理原因,fsd as 备注 from t_saleh " + " where year(xldate)='"+ stryear +"' and month(xldate)='"+strmon +"' order by model asc "; com=new SqlDataAdapter(strsql,con); com.Fill(ds,"tablevalue"); int rowcount,columncount; rowcount=(int)ds.Tables["tablevalue"].Rows.Count; columncount=(int)ds.Tables["tablevalue"].Columns.Count; //开始填充 int ii,jj; ExcelApp.Cells[1,1]="*******电子有限公司"; ExcelApp.Cells[2,1]=stryear + "年" + strmon +"月度售前产品维修登记表"; ExcelApp.Cells[3,1]="机型"; ExcelApp.Cells[3,2]="机号"; ExcelApp.Cells[3,3]="开箱日期"; ExcelApp.Cells[3,4]="修理日期"; ExcelApp.Cells[3,5]="症状"; ExcelApp.Cells[3,6]="原因/修理"; ExcelApp.Cells[3,7]="备注"; for ( ii=0;ii<rowcount;ii++) { for ( jj=0;jj<columncount;jj++) { ExcelApp.Cells[ii+4,jj+1]=ds.Tables["tablevalue"].Rows[ii][jj].ToString().Trim(); } } ExcelWorkBook.SaveCopyAs(pathsave); ExcelWorkSheet=null; ExcelWorkBook.Close(false,null,null); ExcelApp.Quit(); System.GC.Collect();以上程序要引用 EXcel office2000 win2000 prof下运行通过.
http://www.yesky.com/20020313/1601534.shtml
楼上的兄台,我是要webfrom,呵呵,你给的是winform的文章,不过还是谢谢你。
刚刚解决 很简单,是我看过最简单的解决方法,你试试看 private void Button1_Click(object sender, System.EventArgs e) { //this.BindDataGrid(); Response.AddHeader("Content-Disposition", "attachment; filename=ExcelFile"); Response.Charset = "UTF-8"; Response.ContentType = "application/vnd.ms-excel"; //Remove the charset from the Content-Type header. Response.Charset = ""; //Turn off the view state. EnableViewState= false; System.IO.StringWriter tw = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw); //Get the HTML for the control. DG.RenderControl(hw); //Write the HTML back to the browser. Response.Write(tw.ToString()); //End the response. Response.End(); }
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\test.xls;" & _
"Extended Properties=""Excel 8.0;""")
Dim myOleDbCommand As OleDbCommand = New OleDbCommand("SELECT *
FROM [Sheet1$]",myOleDbConnection) '如果你想读出Sheet2的内容
,把Sheet1$改成Sheet2$即可
Dim myData As OledbDataAdapter= New
OledbDataAdapter(myOleDbCommand) (3).读出Excel文件内容后,就要把他用DataGrid显示出来。为了显示,还要用另外一个名称空间--System.Data。他里面有个对象DataSet,他可以和DataGrid进行数据帮定,从而以DataGrid形式显示数据。而此时读出的数据集并不是以对象DataSet来表现的,这就需要进行转换,好在OledbDataAdapter对象提供了一个方法--Fill,可以完成转换。具体程序如下:Dim myDataset As New DataSet()
myData.Fill(myDataset)
'完成从OledbDataAdapter对象到DataSet的转换
DataGrid1.DataSource = myDataset.Tables(0).DefaultView
DataGrid1.DataBind() '完成数据帮定,显示数据 四. 具体的源代码:<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.Oledb" %>
<script language="VB" runat="server">
Sub Page_Load(sender As Object, e As EventArgs)
Dim myDataset As New DataSet()
Dim myOleDbConnection As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\2.xls;" & _
"Extended Properties=""Excel 8.0;""")
Dim myOleDbCommand As OleDbCommand = New OleDbCommand("SELECT * FROM [Sheet1$]",myOleDbConnection)
Dim myData As OledbDataAdapter= New OledbDataAdapter(myOleDbCommand)myData.Fill(myDataset)DataGrid1.DataSource = myDataset.Tables(0).DefaultView
DataGrid1.DataBind()
End Sub
</script><html>
<head></head>
<body>
<asp:Label id="L1" runat="server">读取C盘根目录下的test.xls文件,并以DataGrid的形式显示出来</asp:label>
<asp:DataGrid id=DataGrid1 runat="server"/>
</body>
</html> 五. 总结 至此一个读取Excel文件的ASP.NET程序就全部完成了,如果你的机器达到以上提到的运行环境,那就建立一个指向此ASP.NET程序的Web虚拟目录,随便拷贝一个Excel文件到C盘的根目录,在浏览器运行一下程序,你就可以看到Excel文件内容了。
但我照样做时总在保存数据时出错。
stryear=int.Parse(this.TextBox7.Text.Substring(0,4));
strmon=int.Parse(this.TextBox7.Text.Substring(5,2));
Excel.Application ExcelApp=new Excel.ApplicationClass();
Excel.Workbook ExcelWorkBook=ExcelApp.Application.Workbooks.Add(true);
Excel.Worksheet ExcelWorkSheet=(Excel.Worksheet)ExcelWorkBook.Worksheets[1];
if (ds.Tables["tablevalue"].Rows.Count!=0)
{ ds.Clear(); ds.Tables["tablevalue"].Columns.Clear(); }
strsql="select model as 机型 ,jh as 机号 ,convert(varchar(20),kxdate,111) as 开箱日期 ,convert(varchar(20),xldate,111) as 修理日期,zz as 症状,yy as 修理原因,fsd as 备注 from t_saleh "
+ " where year(xldate)='"+ stryear +"' and month(xldate)='"+strmon +"' order by model asc ";
com=new SqlDataAdapter(strsql,con);
com.Fill(ds,"tablevalue");
int rowcount,columncount;
rowcount=(int)ds.Tables["tablevalue"].Rows.Count;
columncount=(int)ds.Tables["tablevalue"].Columns.Count;
//开始填充
int ii,jj;
ExcelApp.Cells[1,1]="*******电子有限公司";
ExcelApp.Cells[2,1]=stryear + "年" + strmon +"月度售前产品维修登记表";
ExcelApp.Cells[3,1]="机型";
ExcelApp.Cells[3,2]="机号";
ExcelApp.Cells[3,3]="开箱日期";
ExcelApp.Cells[3,4]="修理日期";
ExcelApp.Cells[3,5]="症状";
ExcelApp.Cells[3,6]="原因/修理";
ExcelApp.Cells[3,7]="备注";
for ( ii=0;ii<rowcount;ii++)
{
for ( jj=0;jj<columncount;jj++)
{ ExcelApp.Cells[ii+4,jj+1]=ds.Tables["tablevalue"].Rows[ii][jj].ToString().Trim(); }
}
ExcelWorkBook.SaveCopyAs(pathsave); ExcelWorkSheet=null;
ExcelWorkBook.Close(false,null,null);
ExcelApp.Quit();
System.GC.Collect();以上程序要引用
EXcel
office2000
win2000 prof下运行通过.
很简单,是我看过最简单的解决方法,你试试看
private void Button1_Click(object sender, System.EventArgs e)
{
//this.BindDataGrid();
Response.AddHeader("Content-Disposition", "attachment; filename=ExcelFile");
Response.Charset = "UTF-8";
Response.ContentType = "application/vnd.ms-excel";
//Remove the charset from the Content-Type header.
Response.Charset = "";
//Turn off the view state.
EnableViewState= false;
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
//Get the HTML for the control.
DG.RenderControl(hw);
//Write the HTML back to the browser.
Response.Write(tw.ToString());
//End the response.
Response.End();
}
1。调用 Excel OLE ,这个方法需要目标机上安装有 Excel 程序,并且,速度,并发性都不理想2。使用 Office Web Component 部件,这个方法适用于 web 程序,支持并发,但效率仍然不高。3。使用 Crystal Report 的 Export 方法,可以生成本地(native)文件,速度,并发性都十分理想,但 CR 9 以前的版本对 Excel 格式的输出存在一些问题,输出结果与设计目标不十分一致4。迄今为止最优秀的解决方案是 SoftArtisans 公司出品的 ExcelWriter 部件,可生成 Native Excel 文件,不需要安装 Excel 程序,速度快,支持并发用户,适用于 winform 和 webform ,但价格非常昂贵。推荐使用 Crystal Report 的 .NET 免费版本
行 125: private void export2excel3_Click(object sender, System.EventArgs e)
行 126: {
行 127: Excel.Application excel = new Excel.Application ( ) ;
行 128: excel.Application.Workbooks.Add ( true ) ;
行 129: excel.Visible = true ;