OpenXML Excel создание листов.Формула не работает автоматически, когда я использую Indirect для ссылки на список - PullRequest
1 голос
/ 06 июня 2019

Я создаю шаблон Excel с использованием OpenXML через c #, чтобы пользователи могли заполнять его и импортировать в нашу систему.

Часть процесса заключается в том, что пользователь выбирает параметры из раскрывающихся списков, а скрытые столбцы заполняются идентификаторами этих выборов с использованием формулы VLOOKUP. Все те с прямыми ссылками списка работают отлично.

У меня есть один случай, когда выбор из списка, называемого «Группа приложений», определяет, какой список используется в следующем столбце, называемом «Приложение». Это делается с помощью функции INDIRECT в Excel и работает нормально. Проблема возникает при попытке получить идентификатор для динамического списка. Я опубликую код ниже, но просто открыв Excel и выбрав опцию из группы приложений, вы получите правильный список в приложении. Выбор приложения не заполняет столбец applicationid автоматически. Если я выберу столбец applicationid, чтобы увидеть формулу в порядке. Если я щелкну в поле редактирования в верхней части Excel, а затем выделю из него формулу, то сработает и с этого момента будет работать. Еще раз, это VLOOKUP, использующий INDIRECT для создания ссылки на список.

Я провел несколько тестов, и кажется, что проблема заключается в НЕПОСРЕДСТВЕННО, как будто я жестко кодирую имя списка, которое запускает vlookup, как и должно быть.

Я также удалил замещающие функции, но это не имело никакого значения.

Я проверил режим расчета в столбце, и он настроен на автоматический.

Я уже искал в Интернете, но ничего не нашел

                // Application Group
                cell = new Cell() { CellReference = "AI" + rownumber };
                cell.CellValue = new CellValue();
                cellFormula = new CellFormula()
                {
                    Text = "VLOOKUP(AH" + rownumber.ToString() + " ,ApplicationGroupList,2,FALSE)"
                };
                cell.CellFormula = cellFormula;
                row.Append(cell);

                // Application
                cell = new Cell() { CellReference = "AK" + rownumber };
                cell.CellValue = new CellValue();
                cellFormula = new CellFormula()
                {
                    Text = "VLOOKUP(AJ" + rownumber.ToString() + ",INDIRECT(SUBSTITUTE(SUBSTITUTE(AH" + rownumber.ToString() + ",\" \",\"\"),\"/\",\"\") & \"Id\") ,2,FALSE)"
                };
                cell.CellFormula = cellFormula;
                row.Append(cell);

Нет сообщений об ошибках, и формула верна, поскольку простое нажатие в поле редактирования запускает формулу, и с этого момента она работает. Кажется, что Excel не признает его как формулу, хотя он был настроен так же, как и другие, которые работают нормально. Смотрите код выше. Группа приложений работает нормально. Приложение не, но созданная формула хорошо синтаксически и функционально.

Есть ли у кого-нибудь опыт чего-то подобного и как заставить формулу работать так же, как все остальные?

1 Ответ

0 голосов
/ 06 июня 2019

Хорошо, как мне часто кажется, я сам целую вечность смотрел на это. Исчерпаны все варианты или я так подумал. Сразу после того, как я опубликую это, я думаю, что я просто попробую то, что мне не пришлось делать ни для одной другой формулы на всякий случай. Бинго!

Так что мне пришлось добавить

cellFormula.CalculateCell = true;

И это, похоже, решило проблему. Зачем мне это нужно, я не знаю, так как все остальное работает без явной установки этого флага, но проблема, похоже, решена.

...