Мне нужно удалить несколько листов из файла 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 вручную я получаю следующую ошибку.
Как я могу этого избежать? Или что делаю не так?
Обновлено: при нажатии «Щелкните для получения дополнительных сведений»

Я точно знаю, что останется хотя бы один лист. Я даже пробовал <html> workbook.setActiveSheet (0); </html> после удаления каждого листа
Что он говорит, когда вы нажимаете на Click for more details.?
Другая причина может заключаться в том, что у вас есть макросы или формулы на оставшемся листе, которые ссылаются на ячейки на некоторых из удаленных листов?
Какая версия apache poi здесь используется?
@AxelRichter apache poi 3.9 версия
Тогда это вина. Версии 3.9 уже более 7 лет, и игнорирование 7 лет разработки приводит к таким проблемам. Как вы заявили, вы пытались сделать существующий лист активным после того, как вы, вероятно, удалили лист, который был активным раньше. Но также были внесены изменения в родственный метод private void onSheetDelete, начиная с версии 3.9.




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