OpenXml DataValidation为列设置预定义列表

我正在使用OpenXml创buildExcel文件并导出表数据。 其中一种情况是我想要一个列有预定义值的下拉列表,比如true和false。 我跟着这个问题,并写下如下代码

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它,它工作正常,但如果我添加string,它会引发错误“find不可读的内容”,并删除datavalidation节点。

如何为公式中的列表下拉validation添加值。 为手动添加的(通过在Excel应用程序中编辑)列表值创build的XML是<formula1>"One,Two"</formula1> (对于excel文件,观察到xml)

好吧,我解决了这个问题。 增加了双引号的公式和完成。

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