我的导出代码如下:
public bool OutPutToExcel(String fname)
{
bool Result = true;
String filename = "";
Excel._Application oExcel= new Excel.Application();
Excel.Workbooks oBooks = oExcel.Workbooks;
Excel._Workbook  oBook =oBooks.Add(Missing.Value);
Excel._Worksheet  oSheet=(Excel._Worksheet)oBook.ActiveSheet;
try
{
try
{
filename =MapPath("\\");
filename+="data_excel\\"+fname + ".xls";
for (int i = 0 ;i<= (Session["GridContent"]as DataTable).Columns.Count - 1;i++)
oSheet.Cells[1, i + 1]= (Session["GridContent"]as DataTable).Columns[i].ColumnName; int num = (Session["GridContent"]as DataTable).Rows.Count;
int num2 = 0;
for (int i = 0;i<=num-1;i++)
{
if((Session["GridContent"]as DataTable).Rows[i].RowState.ToString() =="Deleted") 
continue;
for (int j = 0 ; j<= (Session["GridContent"]as DataTable).Columns.Count-1;j++)
oSheet.Cells[num2 + 2, j + 1] = (Session["GridContent"]as DataTable).Rows[i].ItemArray[j];
num2++;
}
if (File.Exists(filename)) {
File.Delete(filename);
} }
catch
{
Result = false;
}
}
finally
{
oBook.Close(true ,filename,null);
//oBooks.Close();
oExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel); oSheet = null;
oBook = null;
oExcel = null;
System.GC.Collect(); //实现下载功能
string strFile = MapPath("\\")+"data_excel\\"+fname + ".xls";
FileStream fs = new FileStream(strFile, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition",  "attachment;  filename="  +  HttpUtility.UrlEncode(strFile)) ;
Response.BinaryWrite(bytes);
Response.End();
fs.Close();
}
return Result;
}数据可以导出。我是把数据导出到服务器的某一路径下,提供客户端下载,跳出下载对话框时,如果选择保存,则保存完后。在点到页面上的web控件(autopostback为true)时就会跳出“未指明的错误”字样的脚本错误。定位到的脚本是asp.net本身产生的__doPostBack函数。如果下载对话框点“打开”则没有任何问题。这个问题比较奇怪,哪位高人能指点一下,万分感激!

解决方案 »

  1.   

    是所有的客户端都会有这个问题还是只有某个客户端出现?
    请尝试使用regsvr32重新注册一下actxprxy.dll和shdocvw.dll
      

  2.   

    我已经注册过了,现在发现在和浏览器或系统有关,在2003或firefox没有问题。这个问题在网上也有不少人碰到,但都没有较好的解决。似乎asp.net和excel交互并不是一件容易的事,我现在采用com的方法,也不太理想。现在又跑出这么个问题,只能对微软摇头了
      

  3.   

    你可以先导出Excel然后,打开别一个窗体,运行
    FileStream fs = new FileStream(strFile, FileMode.Open);
    byte[] bytes = new byte[(int)fs.Length];
    fs.Read(bytes, 0, bytes.Length);
    fs.Close();
    Response.ContentType = "application/octet-stream";
    Response.AddHeader("Content-Disposition",  "attachment;  filename="  +  HttpUtility.UrlEncode(strFile)) ;
    Response.BinaryWrite(bytes);
    Response.End();
    fs.Close();
    --出现保存页面,再设定几秒之后关掉该页面
      

  4.   

    实在不行就让客户端自己下载 不用搞到服务器端
    这个是导datagrid数据的 
    我试着好用 你试试private void Button1_Click(object sender, System.EventArgs e)
    {
    if (this.dgrdMain.Items.Count > 0)
    {
    Response.Clear(); 
    Response.Buffer= true; 
    Response.Charset="UTF-8"; 
    Response.AppendHeader("Content-Disposition","attachment;filename=2005-12-12.xls");  
    Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
    Response.ContentType = "application/ms-excel";
     this.EnableViewState = false; 
    System.IO.StringWriter tw = new System.IO.StringWriter(); 
    System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(tw); this.dgrdMain.RenderControl(hw); Response.Write(tw.ToString()); 
    Response.End();
    }
    }
      

  5.   

    我也碰到了, 怀疑是因为frame的问题
    因为我把这个页面放在Frame中的话就会出现这个错误
    但是单独拿出来运行的话就不会出现了.而且, 导出完Excel以后, 如果是直接打开, 也不会报错, 但是如果是先保存再打开的话就同样会报错了暂时也找不到原因, 只有新开一个窗口来做Excel的生成, 就不会出错了
    但是这样的话如果保存Excel文件以后这个新开的窗口不会自动被关闭, 不爽.