这是我的第一个项目,无需赘述。我对编码非常陌生,这对我来说可能是一个非常简单的疏忽。我是一名工程师,我需要向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);
答案 0 :(得分:0)
感谢您尝试解决此问题。我发现了问题所在。
WSName
是通过代码Directory.GetFiles(directory);
设置的,因此我可以跟踪每个CAD文件的属性。
当第一个类成员使用WSName
的值创建工作表时。 WSName
的值带有“ \”。即使我在字符串前面使用了“ @”符号,工作表的实际名称也省略了“ \”。它一定是我对Excel的限制。当第二个类成员尝试写工作表时,尽管WSName
的编码方式与第一个成员相同,但由于缺少“ \”,所以找不到它。