下面这是个用流来导出excel的方法。
public void SaveAs(DataGridView dgv)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "Excel files (*.xls)|*.xls";
            sfd.FilterIndex = 0;
            sfd.RestoreDirectory = true;
            sfd.CreatePrompt = true;
            sfd.Title = "Export Excel File To";
            sfd.ShowDialog();
            Stream myStream;
            myStream = sfd.OpenFile();
            StreamWriter sw = new StreamWriter(myStream,System.Text.Encoding.GetEncoding(-0));            string str = "";
           
                //写标题
                for (int i = 0; i < dgv.ColumnCount; i++)
                {
                    if (i > 0)
                    {
                        str += "\t";
                    }                    str += dgv.Columns[i].HeaderText;
                    sw.WriteLine(str);
                }                //写内容
                for (int j = 0; j < dgv.Rows.Count; j++)
                {
                    string tempStr = "";
                    for (int k = 0; k < dgv.Columns.Count; k++)
                    {
                        if (k > 0)
                        {
                            tempStr += "\t";
                        }
                        if (dgv.Rows[j].Cells[k] != null)
                        {
                            tempStr += dgv.Rows[j].Cells[k].Value.ToString();
问题:这一句抛出异常。异常信息:未将对象引用设置到对象的实例。    其实在这里的判断不为空是在下加上去的,但是没解决问题。   根据追踪的信息:  应该是当读DGV中的有数据的行时,是正常的。但是一旦读到头,则发生异常。也不知道是怎么回事?问题二:在这里再多说一句用流导出Excel和用Excel组件相比,那个比较好点呢?

                        }
                        else
                        {
                            continue;
                        }
                    }
                    sw.WriteLine(tempStr);                }
                sw.Close();
                myStream.Close();
                      //catch (Exception e)
            //{
            //    MessageBox.Show(e.ToString());
            //}
            //finally
            //{
            //    sw.Close();
            //    myStream.Close();
            //}
        }

解决方案 »

  1.   

    dgv.Rows[j].Cells[k].Value.ToString();
    这里的值是不是空值,你看了没有,调试一下!!看看
      

  2.   

    dgv[j, k].Valuehttp://topic.csdn.net/u/20090820/11/4fdeec59-f790-4afd-8ee9-519021ce72c3.html?seed=1058181878&r=59211103
      

  3.   

    用流直接生成的Excel不是标准的EXCEL文件
    用EXCE控件生成EXCEL,要安装ms office
    容易控制导出的Excel的样式
      

  4.   

    C#(57877619)技术讨论群,该群主要讨论ASP.Net,C#,JS,F#,Ajax. 期待你的加入......
      

  5.   


    何为“ms office”?
      

  6.   


    我晕一个先   微软的office你不知道。