想才用下面这个方法导出到Excel,但一直不成功,我用的是.net 2003
已经加了excel的引用,但执行到excel= new ApplicationClass(); 这里就报错,说没权限,按网上的一些解决方法做了,还是不行,也不知道是前面的引用不对还是其它地方,有用过这个方法的请指教一下,谢谢!
----------------------------------------
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(); 

解决方案 »

  1.   

    object MISSING_OBJECT = Type.Missing;
    Excel.Application excelApp = null;
                try
                {
                    excelApp = new Excel.ApplicationClass();
                    excelApp.DisplayAlerts = false;                excelApp.Workbooks.Open(xlsPath,
                                            MISSING_OBJECT,
                                            MISSING_OBJECT,
                                            MISSING_OBJECT,
                                            MISSING_OBJECT,
                                            MISSING_OBJECT,
                                            MISSING_OBJECT,
                                            MISSING_OBJECT,
                                            MISSING_OBJECT,
                                            MISSING_OBJECT,
                                            MISSING_OBJECT,
                                            MISSING_OBJECT,
                                            MISSING_OBJECT,
                                            MISSING_OBJECT,
                                            MISSING_OBJECT);
                    workBook = excelApp.Workbooks[1];                
                }
                catch
                {
                    throw;
                }
                finally
                {
                    excelApp.Quit();
                }
      

  2.   

    能说的详细一点吗,包括增加那些引用,using加那些,谢谢
      

  3.   

    dll
    加载的对么
    网上有好几种呢
      

  4.   

    我用的.net2003,office2000,添加的引用是在com中的Microsoft Excel9.0 Object Library
    然后在cs代码中using excel
      

  5.   


    //添加"Com"选项中的 Microsoft Excel 12.0 Object Library 
    //12.0对应Excel2007 ,11.0-Excel2003using MSExcel = Microsoft.Office.Interop.Excel;using System.IO;using System.Reflection;Class Program{  static void Main(string[] args(  {    string path;  //文件路径    MSExcel.Application excelApp;  //Excel应用程序    MSExcel.WorkBook excelDoc;  //Excel文档    path = @"c:\test.xlsx";    excelApp = new MSExcel.ApplicationClass();    if(File.Exists(path)    {      File.Delete(path);    }    Object nothing = Missing.Value;    excelDoc = excelApp.Workbooks.Add(nothing);    Object format = MSExcel.XlFileFormat.xlWorkbookDefault;    exceldoc.SaveAs(path,nothing,nothing,nothing,nothing,nothing,          MSExcel.XlSaveAsAccessMode.xlExclusive,nothing,nothing,nothing,nothing,nothing);    excelDoc.Close(nothing,nothing,nothing);    excelApp.Quit();  }}
      

  6.   

    太麻烦了,导出到Excel,只需要生成HTML格式,后缀改成Excel的就可以了.
      

  7.   

    在网上找个Aspose.Excel.DLL ,加入后,用那里面的方法,非常好用
      

  8.   

    改成启用模拟了,也能生成Excel文件,但又出了一个新的问题,导出以后,excel文件打不开,提示:
    "0x6dde19f4"指令引用的"0x00000000"内存。该内存不能为"read"。
    然后还会弹出:找不到文件×××。请确定路径和文件名是否正确,而且所需的库文件均可用。
    任务管理器的进程中会有一个EXCEL进程,手工也杀不掉,提示:无法完成操作,拒绝访问。
    然后只有重启电脑才可以,但一导出又会重复上面的现象。
    好郁闷啊,请指教,谢谢!
      

  9.   

    我觉得应该是在页面上加入如下代码:
    楼主看看可以不:
    <%@ Page Language="C#" AutoEventWireup="true" EnableEventValidation="false" CodeFile="GridViewToExcelFile.aspx.cs" Inherits="_Default" %>把你页面的代码文件加入:EnableEventValidation="false"