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 .....”省略
--------------------编程问答-------------------- 多半是服务器环境的问题
服务器中framwork 是否有excel.dll文件 --------------------编程问答-------------------- 有没有把excel.dll传到服务上的bin里哦? --------------------编程问答-------------------- 把excel.dll放在bin目录下,传到服务器上去 --------------------编程问答-------------------- 刚检查bin下,存在execel.dll
不知道是不是版本的问题 --------------------编程问答-------------------- 你用本地的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
--------------------编程问答-------------------- 程序没问题,那你看看是不是bin那个文件夹的权限够不够? --------------------编程问答-------------------- 肯定可以解决的方法:是权限的问题:把整个文件夹只读属性去掉,设置everyone 完全控制.
补充:.NET技术 , ASP.NET