Dataset里面只有一个TABLE,他们是程序运行中产生的,在内存中

解决方案 »

  1.   

    两种办法:
    一用水晶报表绑定dataset
    然后直接生成excel二
     先将你的dataset中的数据绑定到一个DataGrid上,   
        然后利用如下代码即可将dataset中的数据导出excel   ...   
        
        
      HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=Excel.xls");   
      Response.ContentType   =   "application/vnd.ms-excel";   
      HttpContext.Current.Response.Charset   ="";   
      HttpContext.Current.Response.ContentEncoding   =System.Text.Encoding.Default;   
      dgTest.Page.EnableViewState   =false;   
      System.IO.StringWriter   tw   =   new   System.IO.StringWriter()   ;   
      System.Web.UI.HtmlTextWriter   hw   =   new   System.Web.UI.HtmlTextWriter(tw);   
      dgTest.Visible=true;   
      dgTest.RenderControl(hw);   
      HttpContext.Current.Response.Write(tw.ToString());   
      HttpContext.Current.Response.End();   
      

  2.   

    给你一个DataGrid的代码: 
    // 导出列表信息到Excel 
    public static void gSendGridInfoToExcel(DataGrid GridX) 

    Excel.Application excel= new Excel.ApplicationClass(); 
    Excel._Workbook xBk = excel.Workbooks.Add(true); 
    Excel._Worksheet xSt = (Excel._Worksheet)xBk.ActiveSheet; 
    Excel.Range excelCell=null; 
    try 

    //赋值对象 
    object[] objarr; 
    DataTable dtTest=new DataTable();; 
    int i,j; 
    int iRows,iCows; 
    int iVisable; 
    iVisable=0; 
    iCows=0; 
    ArrayList list=new ArrayList(); 
    //如果绑定数据源是DataTable和DataSet,取得行数 
    if (GridX.DataSource is System.Data.DataSet || GridX.DataSource is System.Data.DataTable) 

    dtTest=(DataTable)GridX.DataSource; 
    iRows=dtTest.Rows.Count; 

    else if (GridX.DataSource is System.Data.DataView) 

    DataView dvTest=(DataView)GridX.DataSource; 
    iRows=dvTest.Count; 
    dtTest=dvTest.Table; 

    //如果是集合取得行数 
    else 

    System.Collections.CollectionBase ColTest; 
    ColTest=(System.Collections.CollectionBase)GridX.DataSource; 
    iRows=ColTest.Count; 

    //如果有TableStyles则根据TableStyles取得(标题行) 
    if (GridX.TableStyles.Count>0) 

    iCows=GridX.TableStyles[0].GridColumnStyles.Count; 
    for(i=0;i<iCows;i++) 

    if(GridX.TableStyles[0].GridColumnStyles[i].Width>0) 

    iVisable++; 
    list.Add(GridX.TableStyles[0].GridColumnStyles[i].HeaderText); 
    } } 
    objarr = new object[iVisable]; 
    objarr=list.ToArray(); 
    excelCell = xSt.get_Range(excel.Cells[1,1],excel.Cells[1,iVisable]); 
    excelCell.Value2 = objarr; 
    //数据行 
    for(i=0;i<iRows;i++) 

    objarr = new object[iVisable]; 
    list.Clear(); for(j=0;j<iCows;j++) 

    if(GridX.TableStyles[0].GridColumnStyles[j].Width>0) 

    list.Add("'"+GridX[i,j].ToString().Replace("\n","")); 
    } } 
    if (list.Equals(System.DBNull.Value)) 

    break; 

    objarr=list.ToArray(); 
    excelCell = xSt.get_Range(excel.Cells[i+2,1],excel.Cells[i+2,iVisable]); 
    excelCell.Value2 = objarr; 


    else 

    iCows=dtTest.Columns.Count; 
    for(i=0;i<iCows;i++) 

    list.Add(dtTest.Columns[i].Caption); 

    objarr = new object[iCows]; 
    objarr=list.ToArray(); 
    excelCell = xSt.get_Range(excel.Cells[1,1],excel.Cells[1,iCows]); 
    excelCell.Value2 = objarr; //数据行 
    for(i=0;i<iRows;i++) 

    objarr = new object[iCows]; 
    list.Clear(); for(j=0;j<iCows;j++) 

    list.Add("'"+GridX[i,j].ToString().Replace("\n","")); 

    if (list.Equals(System.DBNull.Value)) 

    break; 

    objarr=list.ToArray(); 
    excelCell = xSt.get_Range(excel.Cells[i+2,1],excel.Cells[i+2,iCows]); 
    excelCell.Value2 = objarr; 
    } } 
    dtTest.Dispose(); excel.Visible=true; } 
    catch (System.Exception e) 

    throw e; 

    finally 

    excelCell=null; 
    xBk=null; 
    xSt=null; 
    excel=null; 
    GC.Collect(); 
    } } }