Created attachment 29928 [details] JUnit test to demonstrate shifting of zero-height rows When using sheet.shiftRows, the Zero Height row flag remains on the old row positions. I'm attaching a JUnit test that demonstrates this.
The same test succeeds with XSSF, I think the reason is that the zero-height state is not copied when the rows are moved, should be easy to fix if this is the case.
Unfortunately there are more issues with shifting, I think the whole approach might be slightly broken. It tries to copy contents of rows from one row the the next one, somehow this can cause more invalid states, e.g. grouped rows and their collapes/expanded states are kept per row and are not handled correctly right now...