Генерирование файла Excel с предварительно сгруппированными выпадающими значениями с помощью C# в Microsoft.Office.Interop.Excel

Я хочу создать Excel файл из моего C# приложение, которое пользователи смогут заполнить позже. я использую 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; }
    );

Как я могу указать, что ячейки первого столбца должны иметь выпадающий список, содержащий предварительно заполненные значения?

Я попробовал множество вещей, доступных онлайн, таких как ниже, найденный здесь, без удачи:

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

1 ответ

Решение

Параметр формулы ожидает строку значений через запятую при применении ограничения проверки к списку. Вот пример, который создает раскрывающийся список с тремя значениями:

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];
Другие вопросы по тегам