Excel открывается в защищенном режиме после удаления листов с помощью Java Apache POI

Мне нужно удалить несколько листов из файла Excel.

Я использовал приведенный ниже код, чтобы удалить ненужные листы из файла Excel.

public static boolean deleteUnnecessarySheets(Workbook workbook,
        boolean authorize) 
{
    if (workbook != null)
    {
        int noOfSheets = workbook.getNumberOfSheets();
        for( int sheetNo = noOfSheets - 1; sheetNo >= 0; sheetNo-- )
        {
            Sheet sheet = workbook.getSheetAt(sheetNo);
            String sheetName = sheet.getSheetName();
            if (sheetName.equalsIgnoreCase("User Defined Actions") || sheetName.equalsIgnoreCase("AUTHORIZE"))
            {
                if (!authorize && sheetName.equalsIgnoreCase("AUTHORIZE"))
                {
                    workbook.removeSheetAt(sheetNo);
                }
            }
            else
            {
                workbook.removeSheetAt(sheetNo);
            }
        }
        return true;
    }
    return false;
}

Код успешно удаляет листы, как ожидалось. Но при открытии листа Excel вручную я получаю следующую ошибку.

Excel открывается в защищенном режиме после удаления листов с помощью Java Apache POI

Excel открывается в защищенном режиме после удаления листов с помощью Java Apache POI

Как я могу этого избежать? Или что делаю не так?

Обновлено: при нажатии «Щелкните для получения дополнительных сведений» Excel открывается в защищенном режиме после удаления листов с помощью Java Apache POI

Могут быть случаи, когда ваш код удаляет ВСЕ листы. Это может быть проблемой

Bentaye 29.05.2018 15:24

Я точно знаю, что останется хотя бы один лист. Я даже пробовал <html> workbook.setActiveSheet (0); </html> после удаления каждого листа

Sai Manoj Kadiyala 29.05.2018 15:26

Что он говорит, когда вы нажимаете на Click for more details.?

Bentaye 29.05.2018 15:27

Другая причина может заключаться в том, что у вас есть макросы или формулы на оставшемся листе, которые ссылаются на ячейки на некоторых из удаленных листов?

Bentaye 29.05.2018 15:33

Какая версия apache poi здесь используется?

Axel Richter 29.05.2018 15:46

@AxelRichter apache poi 3.9 версия

Sai Manoj Kadiyala 30.05.2018 06:03

Тогда это вина. Версии 3.9 уже более 7 лет, и игнорирование 7 лет разработки приводит к таким проблемам. Как вы заявили, вы пытались сделать существующий лист активным после того, как вы, вероятно, удалили лист, который был активным раньше. Но также были внесены изменения в родственный метод private void onSheetDelete, начиная с версии 3.9.

Axel Richter 30.05.2018 09:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
97
0

Другие вопросы по теме