C#将validation列表添加到excel错误

我正在写一个程序来添加一组用户数据到Excel文件。 一些单元需要有一个下拉列表,这是一个validation列表。 数据列表由用户提供。

在使用C#代码将数据导出为ex​​cel时,有时数据会导致程序,但有时不会。

添加数据时,程序端没有错误

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)); } } 

错误是这样的: 错误1当打开excel错误2接受excel更正 打开Excel文件时,它将删除validationfunction,不会向单元格显示下拉列表。

XML文件内容如下:error025200_02.xml在文件“C:\ Users \ wendylinlin \ Desktop \ Reports-Common20152241477_Defects.xlsx”中检测到错误。删除的function:从/xl/worksheets/sheet1.xml部分进行数据validation

但是,如果我用括号注释掉validation值,就意味着不要在(或)中添加validation值,validation工作正常,打开excel后我可以看到下拉列表。

我试图做一个string操作,用一个空格replace所有“(”和“)”,但它给出了相同的错误。 其他一些带“ – ”和“,”的string也给出了类似的问题。 但是replace特殊字符对于所有的情况根本没有帮助。

任何人都知道发生了什么? 我怎样才能有正确的validation价值的Excel和防止Excel删除validation列表?

谢谢!!

我查了一下论坛的讨论,发现Validation.Add函数只接受最多255个字符的列表。 如果您希望列表中包含更多的字符和项目,唯一的方法是将该列表存储在Excel表格中,并给出列表的特定范围。 要隐藏用户的值,实际上我使用了一个未使用的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$1:$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");