Вы можете отсортировать таблицу с помощью
ws.Cells[tbl.Address.Address].Sort(new[] { 0, 1, 2});
с {0, 1, 2} означает первый, второй и третий столбец таблицы (необязательно рабочий лист)
К сожалению, похоже, нет никакой возможности определить, присутствуют ли заголовки или нет, поэтому заголовки погружаются в таблицу.
Если вам удастся отсортировать таблицу без первой строки, у вас все получится, но мой мозг не может обработать это в данный момент.