Как оказалось, у меня было неправильное понимание того, как работает XSSFWorkbook :: setSheetOrder.
Я предполагал (ошибочно), что установка порядка листа будет держать лист в этом положении, что-то вроде распределяя листы по их индексу в массив. Однако последующие вызовы setSheetOrder изменят порядок листов других листов, если ваш последний вызов неявно изменяет порядок перед листом, использованным в вашем последнем вызове.
Например, если у вас есть листы, упорядоченные следующим образом:
[StaticX, StaticY, Cloned3, Cloned4, Cloned1, Cloned2] и вы вызываете setSheetOrder ("Cloned3", 3)
, порядок становится
[StaticX, StaticY, Cloned4, Cloned3, Cloned1, Cloned2], что необходимо.
Однако, последующий вызов setSheetOrder ("Cloned1", 1) теперь будет иметь порядок
[StaticX, Cloned1, StaticY, Cloned4, Cloned3, Cloned2], который переместил Cloned3 из позиции 3.
В моих отладочных отпечатках я думал, что это работает, потому что я просто проверял порядок, который установил последний вызов, который, конечно, корректен каждый раз время, но когда я начал распечатывать порядок всех листов после каждой настройки порядка листов, проблема стала очевидной.
Чтобы это исправить, я просто положил все Укажите имена листов в массиве в том порядке, в котором я их хотел, и установите порядок листов от первого к последнему в порядке, что прекрасно работает.
Большое спасибо Акселю за предоставленный этот минимальный пример.