当前位置:编程学习 > C#/ASP.NET >>

System.NullReferenceException: 未将对象引用设置到对象的实例。

各位大虾

   引用excel.dll
   在本机调试一切正常,到服务器报未将对象引用设置到对象的实例。

   以下是代码
   using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Excel;

/// <summary>
/// 将数据保存Excel、TXT、CSV或DBF
/// </summary>
public class ExcelSaveAs
{

    
    private Excel.ApplicationClass _x;

    /// <summary>
    /// 保存文件类型
    /// </summary>
    public enum FileType 
    {
        /// <summary>EXCEL类型</summary>
        EXCEL,
        /// <summary>TXT类型</summary>
        TXT,
        /// <summary>CSV类型</summary>
        CSV,
        /// <summary>DBF类型</summary>
        DBF
    }

    /// <summary>
    /// 主调方法
    /// </summary>
    /// <param name="dt">DataTable类型数据</param>
    /// <param name="filename">保存文件路径及文件名,包括扩展名如:"H:\\ex.xls"</param>
    /// <param name="type">文件类型:从ExcelSaveAs.FileType枚举得</param>
    public static void ToMain(System.Data.DataTable dt, string filename, ExcelSaveAs.FileType type)
    {
        ExcelSaveAs a = new ExcelSaveAs();
        
        try
        {
            a._x = new Excel.ApplicationClass();
            a._x.UserControl = false;
            //a._x.DisplayAlerts = false;
            a.SaveAs(dt.Copy(), filename,type);
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
        finally 
        {
            a._x.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject((object)a._x);
            System.GC.Collect();
        }  
    }



    private void SaveAs(System.Data.DataTable dt, string filename, ExcelSaveAs.FileType type)
    {
        //Excel.WorkbookClass wb = (Excel.WorkbookClass)this._x.Workbooks.Add(Type.Missing);
        Excel.Workbook wb = this._x.Workbooks.Add(Type.Missing);
        

        //写列标题 注列、行索引是从1开始
        for (int i = 0; i < dt.Columns.Count;i++ )
        {
            this._x.Cells[1, i + 1] = dt.Columns[i].ColumnName.ToString();
        }

        //写数据
        for (int i = 0; i <dt.Rows.Count; i++)
        {
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                this._x.Cells[i+2, j+1] = dt.Rows[i][j].ToString();
            }
           
        }

        wb.Saved = true;
        if (System.IO.File.Exists(filename)) 
        {
            System.IO.File.Delete(filename);
        }

        switch (type)
        {
            case ExcelSaveAs.FileType.EXCEL:
                //this._x.ActiveWorkbook.SaveAs(filename, Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                wb.SaveAs(filename, Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                wb.Close(Type.Missing, filename,Type.Missing);
                break;
            case  ExcelSaveAs.FileType.TXT  .....
}
}
}


各位大虾帮帮看一下错在哪儿,“case  ExcelSaveAs.FileType.TXT  .....”省略 --------------------编程问答-------------------- 设置断点F11调试 --------------------编程问答-------------------- new 
跟踪调试 --------------------编程问答-------------------- 程序应该是没有问题的
你看看服务器上的bin目录里有没有excel.dll? --------------------编程问答-------------------- 好的,感谢各们,我先试试 --------------------编程问答-------------------- 检查服务器bin下有excel.dll --------------------编程问答-------------------- 未将对象引用设置到对象的实例。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误: 

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  

堆栈跟踪: 


[NullReferenceException: 未将对象引用设置到对象的实例。]
   ExcelSaveAs.ToMain(DataTable dt, String filename, FileType type) +173
   _Default.Button2_Click(Object sender, EventArgs e) +279
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102 --------------------编程问答-------------------- 顶顶啊```````` --------------------编程问答-------------------- 是不是用注册啊 --------------------编程问答-------------------- 我也是这个问题。
在自己的机器上,开放状态按F11调试,能够正常的利用Excel出来报表,但同样在自己这台机器上,只要通过IIS来访问,就报这个错。

急死了。。 --------------------编程问答-------------------- 碰到了 真难...
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,