c#,提示未将对象引用到对象的实例。怎么回事?

[DllImport("User32.dll",CharSet=CharSet.Auto)]usingSystem.Runtime.InteropServices;pub... [DllImport("User32.dll", CharSet = CharSet.Auto)]

using System.Runtime.InteropServices;

public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
private void button3_Click(object sender, EventArgs e)
{

//导出到execl
try
{
//没有数据的话就不往下执行
if (dataGridView1.Rows.Count == 0)
return;
//实例化一个Excel.Application对象
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
//Excel.Application app = new Excel.ApplicationClass();
//让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写
excel.Visible = false;

//新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错
excel.Application.Workbooks.Add(true);
//生成Excel中列头名称
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;
}
//把DataGridView当前页的数据保存在Excel中
for (int i = 0; i < dataGridView1.Rows.Count ; i++)
{
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
if (dataGridView1[j, i].ValueType == typeof(string))
{
excel.Cells[i + 2, j + 1] = "'" + dataGridView1[j, i].Value.ToString();
}
else
{
excel.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();
}
}
}

//设置禁止弹出保存和覆盖的询问提示框
excel.DisplayAlerts = false;
excel.AlertBeforeOverwriting = false;

//保存工作簿
excel.Application.Workbooks.Add(true).Save();
//保存excel文件
excel.Save("D:" + "\\KKHMD.xls");

//确保Excel进程关闭
excel.Quit();
excel = null;

System.Diagnostics.Process.GetProcessesByName("excel");

IntPtr t = new IntPtr(excel.Hwnd);
int k = 0;
GetWindowThreadProcessId(t, out k);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
p.Kill();

}
第一行和第二行写反了。
排除后5行后,问题消失,不过就没法关闭excel进程了
展开
 我来答
小琳子Gk
2012-03-09 · 超过53用户采纳过TA的回答
知道小有建树答主
回答量:197
采纳率:0%
帮助的人:107万
展开全部
同意楼上的说法,你打一下断点,一步一步执行看那个值是空的,肯定是某个值没拿到,就为空了,才会出现这样的问题!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
houniaonanxi
2012-03-08 · TA获得超过121个赞
知道小有建树答主
回答量:146
采纳率:0%
帮助的人:62.7万
展开全部
最后一个结束进程的时候不加判断吗?如果没有获取到这个进程话下面就报错了。
if(p!=null)
{
p.kill();
p.dispose();
}
试一下,我没试你这个代码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1039580989094e
2012-03-10 · TA获得超过156个赞
知道小有建树答主
回答量:211
采纳率:100%
帮助的人:108万
展开全部
dataGridView1[j, i].Value 可能为null,无法转换为toString()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
styshoo1986
2012-03-08 · TA获得超过893个赞
知道小有建树答主
回答量:832
采纳率:100%
帮助的人:263万
展开全部
引用了一个空对象并对这个空对象操作。
你用vs调试的时候不是会弹出来提示的么?看看具体哪一行除了问题。再看哪个对象是null的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式