我的excel输出不是我想要的

时间:2014-11-07 03:11:05

标签: c# excel visual-studio-2010 visual-studio file-conversion

Helle家伙,

我正在尝试创建自定义的Excel输出。但我的事情是它没有给我输出。一旦代码到达if (fline.Designator == null),它就会显示错误。 请查看我的问题并给我一个解决方案。

代码: -

 private void button1_Click(object sender, EventArgs e)
    {
        string[] strLines = System.IO.File.ReadAllLines(textBox1.Text);

        string line = string.Empty;
        string CarouselName = enter.Text;
        int iCarousel = 0;
        char seperator = '\t';

        SortedDictionary<string, ExcelData> lstExcel = new SortedDictionary<string, ExcelData>();
        ExcelData fline = null;
        for (int i = 0; i < strLines.Length; i++)
        {
            line = RemoveWhiteSpace(strLines[i]).Trim();
            if (line.Length == 0)
                continue;
            string[] cells = line.Replace("\"", "").Split(seperator);


            if (i > 0)
            {
                if (!lstExcel.ContainsKey(cells[1].Replace(" ", "_")))
                {
                    fline = new ExcelData();
                    lstExcel.Add(cells[1].Replace(" ", "_"), fline);
                    fline.Footprint = cells[2].Replace(" ", "_");
                    fline.Comment = cells[1].Replace(" ", "_");

                    iCarousel++;
                    if (iCarousel > 45)
                        iCarousel = 1;
                    fline.Location = CarouselName;
                }
                else
                {
                    fline = lstExcel[cells[1].Replace(" ", "_")];
                }
                fline.SrNo++;
                fline.Total++;
            }

            if (fline.Designator == null)// here its showing the error..
                // i don't know why its the code is incorrect. please help me out!!
                fline.Designator = new List<string>();
            fline.Designator.Add(cells[0].Replace(" ", "_"));

        }
        ExportInExcel(lstExcel, @"C:\Users\Stacy\Desktop\myExcel.xls");
        System.Windows.Forms.Application.Exit();

    }

2 个答案:

答案 0 :(得分:1)

查看for循环,fline永远不会被初始化。

最初,有一行:

ExcelData fline = null;

for循环期间,从int i=0开始,您有if (i > 0)在该条件下将值分配给fline。但是,对于i=0的情况,永远不会为fline分配值。

因此,当您在fline.Designator == null循环中检查i=0时是否for时,它会抛出异常。例外情况是告诉您fline尚未分配ExcelData的实例。换句话说,fline本身为null:它没有任何属性值。

我不确定完全您的if (i > 0)条件正在检查什么,但您的解决方案最终要么:

  • if (i > 0)更改为if (i >= 0),从而在您的常规条件下处理i=0案例,或者......
  • fline案例的某个时刻实例化i=0。最初声明变量时可以执行此操作:ExcelData fline = new ExcelData();而不是ExcelData fline = null;(在循环之前)。

答案 1 :(得分:1)

我的猜测是你的错误是一个空引用异常。 在您的方法中,您使用fline初始化null

ExcelData fline = null;

然后输入for循环,开始从0(int i = 0)开始迭代。 您还有一个条件:if (i > 0),其中您使用fline类的实例初始化ExcelData变量:

fline = new ExcelData();

但请注意,这仅适用于大于0的i

那么当i0时会发生什么 - 并且在循环的第一次迭代中就是这种情况。 首次迭代时i0。因此,您跳过fline语句中的if初始化,然后直接继续

if (fline.Designator == null)

在这里,您尝试访问fline,但它从未被初始化。所以你得到空引用异常。