设置Excel工作表的值时出错

时间:2018-08-22 00:29:12

标签: c# excel visual-studio epplus solidworks

这是我的第一个项目,无需赘述。我对编码非常陌生,这对我来说可能是一个非常简单的疏忽。我是一名工程师,我需要向1000多个CAD文件中添加一些“自定义属性”。我正在使用excel为每个文件分配设置属性。

我正在使用EPPlus

我有一个using OfficeOpenXml;声明。

在调试过程中,在第73行出现错误:worksheet.Cells[row, 6].Value = file;

  

System.NullReferenceException:'对象引用未设置为对象的实例。工作表为null。”

我可以看到第64行的“ var worksheet”值为空,但我不知道为什么...


public static void InsertPropName2()
{
    string ExFile = @"J:\VB Test\Excel\SW.Prop.xlsx";
    var FileInfo = new FileInfo(ExFile);

    List<string> DrwPropName = new List<string>()
    {
        "MPN",
        "Description",
        "OEM Location",
        "Material",
        "Surface Finish",
        "Hardness",
        "Color",
    };

    List<string> PartPropName = new List<string>()
    {
        "MPN",
        "Description",
        "Drawn",
        "Q.A. Approved",
        "Checked",
        "Engineering Approved",
        "Revision",
        "Drawn By:",
        "Drawn Date",
        "Q.A. Approval",
        "Q.A. App. Date",
        "Checked By",
        "Checked Date",
        "Engineering Approval",
        "Engineering App. Date",
    };

    List<int> PartPropType = new List<int>()
    {
        30,
        30,
        30,
        30,
        30,
        30,
        30,
        30,
        64,
        30,
        64,
        30,
        64,
        30,
        64,
    };

    using (ExcelPackage excel = new ExcelPackage(FileInfo))
    {
        string directory = @"J:\Move (Test)\a";
        string[] Files = Directory.GetFiles(directory);

        foreach (string file in Files)
        {
           string WSName = file.Substring(file.Length - 31);

            //line 64
            var worksheet = excel.Workbook.Worksheets[WSName];

            string FileType = file.Substring(file.Length - 6);

            switch (FileType)
            {
                case "SLDDRW":
                    int row = 1;
                    int a = 0;

                    //line 73
                    worksheet.Cells[row, 6].Value = file;
                    foreach (string prop in DrwPropName)
                    {
                        worksheet.Cells[row, 7].Value = DrwPropName[a];
                        worksheet.Cells[row, 8].Value = 30;
                        a++;
                    }

                    break;

                case "SLDPRT":
                    int row2 = 1;
                    int b = 0;
                    worksheet.Cells[row2, 6].Value = file;
                    foreach (string prop in PartPropName)
                    {
                        worksheet.Cells[row2, 7].Value = PartPropName[b];
                        worksheet.Cells[row2, 8].Value = PartPropType[b];
                        b++;
                        row2++;
                    }

                    break;

                case "SLDASM":
                    int row3 = 1;
                    int c = 0;
                    worksheet.Cells[row3, 6].Value = file;
                    foreach (string prop in PartPropName)
                    {
                        worksheet.Cells[row3, 7].Value = PartPropName[c];
                        worksheet.Cells[row3, 8].Value = PartPropType[c];
                        c++;
                        row3++;
                    }

                    break;

                default:

                    break;
            }
        }
        excel.Save();
    }
}

任何帮助将不胜感激。再次抱歉,这是一个非常简单的菜鸟错误!

编辑: 在运行此类之前,我还要运行另一个类,该类将使用上面讨论的工作表创建一个excel文件,因此我知道工作表存在。我还目视检查了excel文件是否有问题的工作表。其他类中的代码将执行,并且我的项目那部分没有错误。

WSName没有在类中的其他任何地方声明,因此它与其他NullReferenceException线程不同。

另一类中的部分代码:

using (ExcelPackage excel = new ExcelPackage(FileInfo))
{
    string WSName = file.Substring(file.Length - 31);

    var worksheet = excel.Workbook.Worksheets.Add(WSName);

1 个答案:

答案 0 :(得分:0)

感谢您尝试解决此问题。我发现了问题所在。

WSName是通过代码Directory.GetFiles(directory);设置的,因此我可以跟踪每个CAD文件的属性。

当第一个类成员使用WSName的值创建工作表时。 WSName的值带有“ \”。即使我在字符串前面使用了“ @”符号,工作表的实际名称也省略了“ \”。它一定是我对Excel的限制。当第二个类成员尝试写工作表时,尽管WSName的编码方式与第一个成员相同,但由于缺少“ \”,所以找不到它。