Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将验证列表添加到excel错误_C#_Excel_Validation - Fatal编程技术网

C#将验证列表添加到excel错误

C#将验证列表添加到excel错误,c#,excel,validation,C#,Excel,Validation,我正在编写一个程序,将一组用户数据添加到excel文件中。 一些单元格需要有一个下拉列表,这是一个验证列表。数据列表由用户提供 使用C#代码将数据导出到excel时,有时数据会导致程序错误,但有时不会 当我添加数据时,程序端没有错误 validationValues.Add("Interface Phase 1 Cycle3"); validationValues.Add("Performance Testing"); validationValues.Add("Pre SIT (HLB)");

我正在编写一个程序,将一组用户数据添加到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));

        }
    }
private static void AddDataValidation(Excel.Worksheet工作表,列表validationValues,字符串col)
{
尝试
{
字符串值=string.Join(“,”,validationValues);
Excel.Range column=worksheet.UsedRange.Columns[col,Type.Missing];
column.Validation.Delete();
column.Validation.Add(XlDVType.xlValidateList,XlDVAlertStyle.xlValidAlertInformation,XlFormatConditionOperator.xlBetween,value,Type.Missing);
column.Validation.IgnoreBlank=true;
}
捕获(异常)
{
//不应触及该部分,但出于稳定性原因使用该部分
抛出新异常(String.Format(“向指定列添加带限制的验证时出错:{0},消息:{1}”,列,异常));
}
}
错误如下所示: 打开excel文件后,将删除验证功能,不会向单元格显示下拉列表。

XML文件内容如下所示: error025200_02.xml在文件“C:\Users\Wendylin\Desktop\Reports-Common20152241477_Defects.xlsx”中检测到错误已删除功能:从/xl/worksheets/sheet1.xml部分进行数据验证

但是,如果我用括号注释掉验证值,意味着不要添加带有(或)的值,验证工作正常,打开excel后我可以看到下拉列表

我尝试进行字符串操作,用空格替换所有的“(“and”)”,但它给出了相同的错误。其他一些带“-”和“,”的字符串也会出现类似的问题。但特殊字符的替换并不能对所有情况都有帮助。

有人知道发生了什么吗?如何向excel中输入正确的验证值并防止excel删除验证列表


谢谢

我查看了一些论坛讨论,发现了验证。添加函数只接受最多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");
for(int valueNum=0;valueNum
我刚刚检查发现问题是由AddDataValidation函数中的字符串长度引起的。如果值大于255,则excel无法正确打开文件。有人知道为什么会这样吗?excel工作表最多只能包含32767个字符,而不是255个字符。我在一些论坛讨论中查看了,发现了验证。Add函数只接受最多255个字符的列表。如果希望列表中包含更多字符和项目,唯一的方法是将列表存储在excel工作表中,并为列表指定特定范围。