使用C#的Microsoft.Office.Interop.Excel生成具有预先设置的下拉值的Excel文件

我想从我的C#应用程序生成一个Excel文件,用户将可以在以后填写。 我正在使用Microsoft.Office.Interop.Excel

我正在启动Excel并使用下面的代码填充标题单元格:

 var excelApp = new Excel.Application {Visible = true}; var workbook = excelApp.Workbooks.Add(Missing.Value); var workSheet = (Excel.Worksheet) workbook.Worksheets.Item[1]; headers.Select((s, i) => new Tuple<string, int>(s, i)).ToList().ForEach ( h => { workSheet.Cells[1, h.Item2 + 1] = h.Item1; } ); 

我怎样才能指定第一列的单元格应该有一个包含预填充值的下拉菜单?

我已经尝试了大量的在线可用的东西,比如下面在这里find的,没有运气:

 var dropDownRange = workSheet.Range["A2"].Resize[64000]; dropDownRange.Value = Values; dropDownRange = dropDownRange.Offset[0, 1]; dropDownRange.Validation.Delete(); dropDownRange.Validation.Add(Excel.XlDVType.xlValidateList, Excel.XlDVAlertStyle.xlValidAlertInformation, Type.Missing, "=DropDownList"); 

在将validation限制应用于列表时,公式参数需要逗号分隔的一串值。 这里是一个例子,它创build了一个三个值的下拉菜单:

 var items = new List<string>() { "Item 1", "Item 2", "Item 3" }; var formattedItems = string.Join(", ", items.ToArray()); var dropDownRange = workSheet.Range["A2"].EntireColumn; dropDownRange.Validation.Delete(); dropDownRange.Validation.Add(Excel.XlDVType.xlValidateList, Excel.XlDVAlertStyle.xlValidAlertInformation, Excel.XlFormatConditionOperator.xlBetween, formattedItems, Type.Missing); 

另外如果你需要默认单元格的值,你可以这样做:

 dropDownRange.Value = "Item 2"; 

甚至更好:

 dropDownRange.Value = items[1];