C# 添加验证列表到 excel 错误
C# Add validation list to excel error
我正在编写一个程序来将一组用户数据添加到 excel 文件中。
一些单元格需要有一个下拉列表,这是一个验证列表。数据列表由用户提供。
使用C#代码导出数据到excel时,有时数据会引起程序有时不会。
添加数据时程序端没有报错
validationValues.Add("Interface Phase 1 Cycle3");
validationValues.Add("Performance Testing");
validationValues.Add("Pre SIT (HLB)");
validationValues.Add("Pre-SIT FE (EtoE) Phase1 C1");
validationValues.Add("Sanity Test(HLB)");
validationValues.Add("SIT Cycle 1 (HLB)");
validationValues.Add("SIT Cycle 2 (HLB)");
validationValues.Add("SIT Cycle 3 (HLB)");
validationValues.Add("SIT FE (EtoE) Phase1 C1");
validationValues.Add("SIT FE (EtoE) Phase1 C2");
validationValues.Add("SIT FE (EtoE) Phase1 C3");
validationValues.Add("SIT Sanity Check");
validationValues.Add("SIT STB Cycle 1");
validationValues.Add("SIT STB Cycle 2");
validationValues.Add("SIT STB Cycle 3");
validationValues.Add("SIT STB Sanity Check");
validationValues.Add("SIT STB User Interface Issues");
validationValues.Add("SIT WOG Phase1 C1");
validationValues.Add("SIT WOG Phase1 C2");
validationValues.Add("SIT WOG Phase1 C3");
if (validationValues.Count != 0)
AddDataValidation(xlWorkSheet, validationValues, "R:R");
validationValues.Clear();
在 AddDataValidation 函数中:
private static void AddDataValidation(Excel.Worksheet worksheet, List<string> validationValues, string col)
{
try
{
string values = string.Join(",", validationValues);
Excel.Range column = worksheet.UsedRange.Columns[col, Type.Missing];
column.Validation.Delete();
column.Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertInformation, XlFormatConditionOperator.xlBetween, values, Type.Missing);
column.Validation.IgnoreBlank = true;
}
catch (Exception exception)
{
//This part should not be reached, but is used for stability-reasons
throw new Exception(String.Format("Error when adding a Validation with restriction to the specified Column:{0}, Message: {1}", col, exception));
}
}
错误是这样的:
打开 excel 文件后,它会删除验证功能,不会向单元格显示下拉列表。
XML 文件内容在这里:
error025200_02.xmlErrors 在文件 'C:\Users\wendylinlin\Desktop\Reports-Common20152241477_Defects.xlsx' 中检测到已删除的功能:来自 /xl/worksheets/sheet1.xml 部分
的数据验证
但是,如果我用方括号注释掉验证值,意味着不要添加带有 ( 或 ) 的验证值,验证工作正常,打开后我可以看到下拉列表 excel。
我尝试进行字符串操作,用 space 替换所有“(”和“)”,但它给出了相同的错误。其他一些带有“-”和“,”的字符串也会出现类似的问题。但是替换特殊字符对所有情况都没有帮助。
有人知道发生了什么事吗?我怎样才能获得 excel 的正确验证值并防止 excel 删除验证列表?
谢谢!!
我查看了一些论坛讨论,发现 Validation.Add 函数只接受最多 255 个字符的列表。如果你想要一个包含更多字符和项目的列表,唯一的方法是将列表存储在 excel sheet 中,并为列表指定一个特定范围。 来隐藏来自用户的值,实际上我使用了一个未使用的 excel 列并隐藏了下拉列表值的列。
这是我发现解决此问题的唯一替代方法。
for (int valueNum = 0; valueNum < bug.Fields["Microsoft.VSTS.Common.CrimsonLogic.TargetVersion"].AllowedValues.Count; valueNum++)
{
//use unused columns to add validation value
xlWorkSheet.Cells[valueNum + 1, 27] = bug.Fields["Microsoft.VSTS.Common.CrimsonLogic.TargetVersion"].AllowedValues[valueNum].ToString();
}
//Column R is where I want the drop down list to be
ValidationValueCol = xlWorkSheet.UsedRange.Columns["R:R", Type.Missing];
ValidationValueCol.Validation.Delete();
strconfig = "='" + Sheetname+ "'!$AA:$AA$" + (bug.Fields["Microsoft.VSTS.Common.CrimsonLogic.TargetVersion"].AllowedValues.Count+1);
//Add the validation range with the pre-stored list
ValidationValueCol.Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, XlFormatConditionOperator.xlBetween, strconfig, Type.Missing);
ValidationValueCol.Validation.IgnoreBlank = true;
HideColumn(xlWorkSheet, "AA");
我正在编写一个程序来将一组用户数据添加到 excel 文件中。 一些单元格需要有一个下拉列表,这是一个验证列表。数据列表由用户提供。
使用C#代码导出数据到excel时,有时数据会引起程序有时不会。
添加数据时程序端没有报错
validationValues.Add("Interface Phase 1 Cycle3");
validationValues.Add("Performance Testing");
validationValues.Add("Pre SIT (HLB)");
validationValues.Add("Pre-SIT FE (EtoE) Phase1 C1");
validationValues.Add("Sanity Test(HLB)");
validationValues.Add("SIT Cycle 1 (HLB)");
validationValues.Add("SIT Cycle 2 (HLB)");
validationValues.Add("SIT Cycle 3 (HLB)");
validationValues.Add("SIT FE (EtoE) Phase1 C1");
validationValues.Add("SIT FE (EtoE) Phase1 C2");
validationValues.Add("SIT FE (EtoE) Phase1 C3");
validationValues.Add("SIT Sanity Check");
validationValues.Add("SIT STB Cycle 1");
validationValues.Add("SIT STB Cycle 2");
validationValues.Add("SIT STB Cycle 3");
validationValues.Add("SIT STB Sanity Check");
validationValues.Add("SIT STB User Interface Issues");
validationValues.Add("SIT WOG Phase1 C1");
validationValues.Add("SIT WOG Phase1 C2");
validationValues.Add("SIT WOG Phase1 C3");
if (validationValues.Count != 0)
AddDataValidation(xlWorkSheet, validationValues, "R:R");
validationValues.Clear();
在 AddDataValidation 函数中:
private static void AddDataValidation(Excel.Worksheet worksheet, List<string> validationValues, string col)
{
try
{
string values = string.Join(",", validationValues);
Excel.Range column = worksheet.UsedRange.Columns[col, Type.Missing];
column.Validation.Delete();
column.Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertInformation, XlFormatConditionOperator.xlBetween, values, Type.Missing);
column.Validation.IgnoreBlank = true;
}
catch (Exception exception)
{
//This part should not be reached, but is used for stability-reasons
throw new Exception(String.Format("Error when adding a Validation with restriction to the specified Column:{0}, Message: {1}", col, exception));
}
}
错误是这样的:
XML 文件内容在这里: error025200_02.xmlErrors 在文件 'C:\Users\wendylinlin\Desktop\Reports-Common20152241477_Defects.xlsx' 中检测到已删除的功能:来自 /xl/worksheets/sheet1.xml 部分
的数据验证但是,如果我用方括号注释掉验证值,意味着不要添加带有 ( 或 ) 的验证值,验证工作正常,打开后我可以看到下拉列表 excel。
我尝试进行字符串操作,用 space 替换所有“(”和“)”,但它给出了相同的错误。其他一些带有“-”和“,”的字符串也会出现类似的问题。但是替换特殊字符对所有情况都没有帮助。
有人知道发生了什么事吗?我怎样才能获得 excel 的正确验证值并防止 excel 删除验证列表?
谢谢!!
我查看了一些论坛讨论,发现 Validation.Add 函数只接受最多 255 个字符的列表。如果你想要一个包含更多字符和项目的列表,唯一的方法是将列表存储在 excel sheet 中,并为列表指定一个特定范围。 来隐藏来自用户的值,实际上我使用了一个未使用的 excel 列并隐藏了下拉列表值的列。 这是我发现解决此问题的唯一替代方法。
for (int valueNum = 0; valueNum < bug.Fields["Microsoft.VSTS.Common.CrimsonLogic.TargetVersion"].AllowedValues.Count; valueNum++)
{
//use unused columns to add validation value
xlWorkSheet.Cells[valueNum + 1, 27] = bug.Fields["Microsoft.VSTS.Common.CrimsonLogic.TargetVersion"].AllowedValues[valueNum].ToString();
}
//Column R is where I want the drop down list to be
ValidationValueCol = xlWorkSheet.UsedRange.Columns["R:R", Type.Missing];
ValidationValueCol.Validation.Delete();
strconfig = "='" + Sheetname+ "'!$AA:$AA$" + (bug.Fields["Microsoft.VSTS.Common.CrimsonLogic.TargetVersion"].AllowedValues.Count+1);
//Add the validation range with the pre-stored list
ValidationValueCol.Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, XlFormatConditionOperator.xlBetween, strconfig, Type.Missing);
ValidationValueCol.Validation.IgnoreBlank = true;
HideColumn(xlWorkSheet, "AA");