Добавить проверку списка в столбец, кроме первых двух строк
Я пытаюсь добавить выпадающий список (проверка списка) при создании Excel, я уже нашел способ добавить его во весь столбец, но мой сценарий отличается, потому что я добавляю проверку только для всего столбца, кроме первой строки и второй строки.
Это то, что я пробовал до сих пор:
public MemoryStream GetExcelSheet()
{
using (var package = new ExcelPackage())
{
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Test");
var val = worksheet.DataValidations.AddListValidation("A:A");
val.Formula.Values.Add("Male");
val.Formula.Values.Add("Female");
val.ShowErrorMessage = true;
worksheet.Cells["A1"].Formula = null;
var stream = new MemoryStream(package.GetAsByteArray());
return stream;
}
}
Я пытаюсь аннулировать это:
worksheet.Cells["A1"].Formula = null;
надеясь, что это удалит проверку в определенной ячейке, но это не работает.
Я тоже пробовал
var val = worksheet.DataValidations.AddListValidation("A2:A");
указание номера начальной строки, но сгенерированный файл Excel поврежден.
Любая помощь по этому вопросу, пожалуйста?
2 ответа
AFAIK, к сожалению, нет возможности установить диапазон в Excel от "Row 2 to Infinity". Так что что-то вроде "A2:A" не будет работать.
Для демонстрации попробуйте создать лист в Excel вручную со списком проверки и сохранить его (ничего общего с кодом). Установите список val для всех столбцов A, затем нажмите A1 и удалите список только из него. Если затем вы переименуете xlsx в.zip, откройте его и посмотрите на файл sheet1.xml, вы увидите следующее:
<dataValidation type="list" allowBlank="1" showInputMessage="1" showErrorMessage="1" sqref="A2:A1048576">
<formula1>"Male,Female"</formula1>
</dataValidation>
Обратите внимание sqref
, По сути, Excel устанавливает диапазон от A2 до максимального числа строк в формате Excel 2007, равный 1 048 576. Так что нет причин, по которым ты не мог бы сделать то же самое.
ExcelCellBase имеет соответствующий метод расширения для получения строки адреса из диапазона:
public static string GetAddress(int FromRow, int FromColumn, int ToRow, int ToColumn)
ExcelPackage имеет публичный конст MaxRows
(1048576), который вы можете использовать для ToRow
параметр.
Собираем это вместе для вашего случая:
var range = ExcelRange.GetAddress(2, 1, ExcelPackage.MaxRows, 1);
var val = worksheet.DataValidations.AddListValidation(range);