初学asp.net    请高手们指教一下啊  如何写excle表?  
 (在页面做几个输入框   然后手动输入一些数据  将这些数据保存到excel中)

解决方案 »

  1.   


    //1、由dataset生成   
    public void CreateExcel(DataSet ds,string typeid,string FileName)    
      {   
       HttpResponse resp;   
       resp = Page.Response;   
       resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");   
       resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);      
       string colHeaders= "", ls_item="";   
       int i=0;   
       
       //定义表对象与行对像,同时用DataSet对其值进行初始化   
       DataTable dt=ds.Tables[0];   
       DataRow[] myRow=dt.Select("");    
       // typeid=="1"时导出为EXCEL格式文件;typeid=="2"时导出为XML格式文件   
       if(typeid=="1")   
       {   
        //取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符   
        for(i=0;i     colHeaders+=dt.Columns[i].Caption.ToString()+"\t";   
        colHeaders +=dt.Columns[i].Caption.ToString() +"\n";      
        //向HTTP输出流中写入取得的数据信息   
        resp.Write(colHeaders);    
        //逐行处理数据     
        foreach(DataRow row in myRow)   
        {   
         //在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n   
         for(i=0;i      ls_item +=row[i].ToString() + "\t";        
         ls_item += row[i].ToString() +"\n";   
         //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据       
         resp.Write(ls_item);   
         ls_item="";   
        }   
       }   
       else   
       {   
        if(typeid=="2")   
        {    
         //从DataSet中直接导出XML数据并且写到HTTP输出流中   
         resp.Write(ds.GetXml());   
        }       
       }   
       //写缓冲区中的数据到HTTP头文件中   
       resp.End();   
       
       
      }   
    //2、由datagrid生成   
    public void ToExcel(System.Web.UI.Control ctl)     
      {   
       HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=Excel.xls");   
       HttpContext.Current.Response.Charset ="UTF-8";       
       HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default;   
       HttpContext.Current.Response.ContentType ="application/ms-excel";//image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword   
       ctl.Page.EnableViewState =false;      
       System.IO.StringWriter  tw = new System.IO.StringWriter() ;   
       System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);   
       ctl.RenderControl(hw);   
       HttpContext.Current.Response.Write(tw.ToString());   
       HttpContext.Current.Response.End();   
      }   
       
    用法:ToExcel(datagrid1);   
       
    //3、这个用dataview   
    public void OutputExcel(DataView dv,string str)   
    {   
       //   
       // TODO: 在此处添加构造函数逻辑   
       //   
                               //dv为要输出到Excel的数据,str为标题名称   
       GC.Collect();   
       Application excel;// = new Application();   
       int rowIndex=4;   
       int colIndex=1;   
       
       _Workbook xBk;   
       _Worksheet xSt;   
       
       excel= new ApplicationClass();   
         
       xBk = excel.Workbooks.Add(true);   
          
       xSt = (_Worksheet)xBk.ActiveSheet;   
       
       //   
       //取得标题   
       //   
       foreach(DataColumn col in dv.Table.Columns)   
       {   
        colIndex++;   
        excel.Cells[4,colIndex] = col.ColumnName;   
        xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[4,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐   
       }   
       
       //   
       //取得表格中的数据   
       //   
       foreach(DataRowView row in dv)   
       {   
        rowIndex ++;   
        colIndex = 1;   
        foreach(DataColumn col in dv.Table.Columns)   
        {   
         colIndex ++;   
         if(col.DataType == System.Type.GetType("System.DateTime"))   
         {   
          excel.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");   
          xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐   
         }   
         else   
          if(col.DataType == System.Type.GetType("System.String"))   
         {   
          excel.Cells[rowIndex,colIndex] = "'"+row[col.ColumnName].ToString();   
          xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐   
         }   
         else   
         {   
          excel.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();   
         }   
        }   
       }   
       //   
       //加载一个合计行   
       //   
       int rowSum = rowIndex + 1;   
       int colSum = 2;   
       excel.Cells[rowSum,2] = "合计";   
       xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,2]).HorizontalAlignment = XlHAlign.xlHAlignCenter;   
       //   
       //设置选中的部分的颜色   
       //   
       xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Select();   
       xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//设置为浅黄色,共计有56种   
       //   
       //取得整个报表的标题   
       //   
       excel.Cells[2,2] = str;   
       //   
       //设置整个报表的标题格式   
       //   
       xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Bold = true;   
       xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Size = 22;   
       //   
       //设置报表表格为最适应宽度   
       //   
       xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Select();   
       xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Columns.AutoFit();   
       //   
       //设置整个报表的标题为跨列居中   
       //   
       xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Select();   
       xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).HorizontalAlignment = XlHAlign.xlHAlignCenterAcrossSelection;   
       //   
       //绘制边框   
       //   
       xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Borders.LineStyle = 1;   
       xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,2]).Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;//设置左边线加粗   
       xSt.get_Range(excel.Cells[4,2],excel.Cells[4,colIndex]).Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//设置上边线加粗   
       xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;//设置右边线加粗   
       xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick;//设置下边线加粗   
       //   
       //显示效果   
       //   
       excel.Visible=true;   
       
       //xSt.Export(Server.MapPath(".")+"\\"+this.xlfile.Text+".xls",SheetExportActionEnum.ssExportActionNone,Microsoft.Office.Interop.OWC.SheetExportFormat.ssExportHTML);   
       xBk.SaveCopyAs(Server.MapPath(".")+"\\"+this.xlfile.Text+".xls");   
       
       ds = null;   
                xBk.Close(false, null,null);   
          
                excel.Quit();   
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk);   
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);   
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt);   
                xBk = null;   
                excel = null;   
       xSt = null;   
                GC.Collect();   
       string path = Server.MapPath(this.xlfile.Text+".xls");   
       
       System.IO.FileInfo file = new System.IO.FileInfo(path);   
       Response.Clear();   
       Response.Charset="GB2312";   
       Response.ContentEncoding=System.Text.Encoding.UTF8;   
       // 添加头信息,为"文件下载/另存为"对话框指定默认文件名   
       Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(file.Name));   
       // 添加头信息,指定文件大小,让浏览器能够显示下载进度   
       Response.AddHeader("Content-Length", file.Length.ToString());   
          
       // 指定返回的是一个不能被客户端读取的流,必须被下载   
       Response.ContentType = "application/ms-excel";   
          
       // 把文件流发送到客户端   
       Response.WriteFile(file.FullName);   
       // 停止页面的执行   
         
       Response.End();   
    }   
      

  2.   

    添加com组件,然后调用excel操作对象,一看就明白,里面什么都有。楼上写得很齐全。各种情况下生成excel表。
      

  3.   

    /// <summary>
            /// 将Web控件导出
            /// </summary>
            /// <param name="source">控件实例</param>
            /// <param name="type">类型:Excel或Word</param>
            public void ExpertControl(System.Web.UI.Control source, DocumentType type)
            {
                //设置Http的头信息,编码格式
                if (type == DocumentType.Excel)
                {
                    //Excel
                    Response.AppendHeader("Content-Disposition","attachment;filename=result.xls");
                    Response.ContentType = "application/ms-excel";
                }
                else if (type == DocumentType.Word)
                {
                    //Word
                    Response.AppendHeader("Content-Disposition","attachment;filename=result.doc");
                    Response.ContentType = "application/ms-word";
                }
                Response.Charset = "UTF-8";  
                Response.ContentEncoding = System.Text.Encoding.UTF8;             //关闭控件的视图状态
                source.Page.EnableViewState =false;              //初始化HtmlWriter
                System.IO.StringWriter writer = new System.IO.StringWriter() ;
                System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(writer);
                source.RenderControl(htmlWriter);             //输出
                Response.Write(writer.ToString());
                Response.End();
            }        //文档类型
            public enum DocumentType
            {
                Word,
                Excel
            }