Я создал таблицу на одном листе (список имен состояний) и назвал таблицу "tblStates".Затем на втором листе есть столбец для State, где я хочу проверить список для тех ячеек, в котором у каждой ячейки есть выпадающий список, предлагающий имена состояний из таблицы «tblStates».Поэтому для столбца «Состояние» на втором листе я создал таблицу с именем «tblGeoStates» и добавил проверку списка в столбец, который ссылается на «= tblStates».(Я ссылался на эту статью / видео, хотя у меня нет второго зависимого списка, но я просто хотел сделать первую часть этого: Contexture Video )
Выполнив шаги изПо ссылке выше, я выполнил эти шаги вручную в Excel, и она отлично работает, однако, при кодировании через EPPlus, она не работает.Таблицы в каждом рабочем листе присутствуют и названы правильно.Проверка списка была применена к таблице на втором рабочем листе, и в каждой ячейке в tblGeoStates появляется раскрывающийся список.Но значения не отображаются.
Рабочий лист 1 с таблицей tblStates
Рабочий лист 2 с таблицей tblGeoStates с проверкой списка, которая ссылается на первую таблицу
Когда я пытаюсь щелкнуть диалоговое окно проверки списка, чтобы закрыть его, я получаю эту ошибку проверки из Excel - в рабочей книге, созданной вручную, ничего этого не происходити все выглядит одинаково
Код с использованием EPPlus, который генерирует каждую таблицу, а затем проверку списка во 2-й таблице.
// Add Named Table for States column so we can reference it in another sheet
using (ExcelRange r = ws.Cells[$"B6:B57"])
{
ExcelTableCollection tblcollection = ws.Tables;
ExcelTable table = tblcollection.Add(r, "tblStates");
}
// Add Named Table for GeoStates column and validation that references tblStates
using (ExcelRange r = ws.Cells["F:F"]) // also tried "F2:F1048576 so the header isn't included
{
ExcelTableCollection tblcollection = ws.Tables;
ExcelTable table = tblcollection.Add(r, "tblGeoStates");
table.ShowFilter = false;
var v1 = r.DataValidation.AddListDataValidation();
v1.ShowErrorMessage = true;
v1.ErrorStyle = ExcelDataValidationWarningStyle.warning;
v1.ErrorTitle = "An invalid value was entered";
v1.Error = "Select a value from the list";
v1.Formula.ExcelFormula = "=tblStates"; // tried w & w/o = sign
}
Я пробовал несколько разных вещей, таких как включение заголовка или его отсутствие в выбранном диапазоне для таблиц;Разрешены блоки или нет, показан фильтр или нет и т. Д.
Я изучил базовый XML как созданной вручную рабочей книги, так и созданной программно с помощью EPPlus, и они выглядят по-разному.
Это автоматически сгенерированный EPPlus (не работает):
<dataValidation sqref="F1:F1048576" errorStyle="warning" error="Select a value from the list" errorTitle="An invalid value was entered" showErrorMessage="1" type="list">
<formula1>tblStates</formula1>
</dataValidation>
И это тот, который я сделал вручную (и работает):
<dataValidation xr:uid="{895EE9F3-E8D3-45B6-AD98-9A095C448064}" sqref="F1:F1048576" showErrorMessage="1" showInputMessage="1" type="list" allowBlank="1">
<formula1>tblStates</formula1>
</dataValidation>