2015-11-24 25 views
2

预定义的列表。其中一个场景是我想要一个列有预定义值的下拉列表中,说喜欢真假。我跟着this问题,写代码如下OpenXML的资料验证设置我使用的OpenXML创建Excel文件和导出表数据列

DataValidation dataValidation = new DataValidation 
{ 
    Type = DataValidationValues.List, 
    AllowBlank = true, 
    SequenceOfReferences = new ListValue<StringValue>() { InnerText = "B1" }, 
    //Formula1 = new Formula1("'SheetName'!$A$1:$A$3") // this was used in mentioned question 
    Formula1 = new Formula1("True,False") // I need predefined values. 
}; 

DataValidations dvs = worksheet.GetFirstChild<DataValidations>(); //worksheet type => Worksheet 
if (dvs != null) 
{ 
    dvs.Count = dvs.Count + 1; 
    dvs.Append(dataValidation); 
} 
else 
{ 
    DataValidations newDVs = new DataValidations(); 
    newDVs.Append(dataValidation); 
    newDVs.Count = 1; 
    worksheet.Append(newDVs); 
} 

如果我SHEETNAME用它与细胞值的范围,它工作正常,但如果我添加字符串,它引发了我的错误“无法读取内容发现”,并删除资料验证节点。

如何添加公式本身列表下拉验证值。它创造了手动添加(在Excel应用程序编辑)列表值XML是<formula1>"One,Two"</formula1>(用于Excel文件观察XML)

回答

4

好吧,我得到这个解决。增加了双引号,以配方和完成。

DataValidation dataValidation = new DataValidation 
{ 
    Type = DataValidationValues.List, 
    AllowBlank = true, 
    SequenceOfReferences = new ListValue<StringValue>() { InnerText = "B1" }, 
    Formula1 = new Formula1("\"True,False\"") // escape double quotes, this is what I was missing 
}; 

DataValidations dvs = worksheet.GetFirstChild<DataValidations>(); //worksheet type => Worksheet 
if (dvs != null) 
{ 
    dvs.Count = dvs.Count + 1; 
    dvs.Append(dataValidation); 
} 
else 
{ 
    DataValidations newDVs = new DataValidations(); 
    newDVs.Append(dataValidation); 
    newDVs.Count = 1; 
    worksheet.Append(newDVs); 
}