Как я получаю индекс последнего столбца при чтении a xlsx
файл с помощью ПОИ Apache API?
Существует a getLastRowNum
метод, но я ничто не могу найти связанным с числом столбцов...
Править: Я имею дело с XLSX
файлы
Если алгоритм уже ограничен/жестко закодирован с использованием только std:: vector:: iterator
и std:: vector:: iterator
, не имеет значения, какой метод вы в конечном итоге будете использовать. Ваш алгоритм уже конкретизирован за пределами точки, где выбор одного из других может иметь какое-либо значение. Они оба делают одно и то же. Это просто вопрос личного предпочтения. Я бы лично использовал явное вычитание.
Если, с другой стороны, вы хотите сохранить более высокую степень общности в вашем алгоритме, а именно, чтобы допустить возможность того, что в будущем он может быть применен к какому-то другому типу итератора, то лучший метод зависит от вашего намерения. Это зависит от того, насколько ограничительным будет тип итератора, который можно использовать здесь.
Если используется явное вычитание, алгоритм будет ограничен довольно узким классом итераторов: итераторов произвольного доступа. (Это то, что вы получаете теперь от std:: vector
)
Если вы используете distance
, ваш алгоритм будет поддерживать гораздо более широкий класс итераторов: итераторы ввода.
Конечно, вычисление расстояния
для неслучайных итераторов является в общем случае неэффективной операцией (в то время как для случайных итераторов это так же эффективно, как и вычитание). Вы должны решить, имеет ли ваш алгоритм смысл для неслучайных итераторов, с точки зрения эффективности. Это результат потери в эффективности разрушительно до точки сделать ваш алгоритм совершенно бесполезным, то вы должны лучше придерживаться вычитания, таким образом, запрещая неэффективное использование и заставляя пользователя искать альтернативные решения для других типов итераторов. Если эффективность с неслучайными итераторами всё ещё находится в пригодном для использования диапазоне, то следует использовать расстояние
и документально зафиксировать тот факт, что алгоритм лучше работает с случайными итераторами.
Да. Это стандартная практика.
В Effective Java, 2nd Ed. это охватывается пунктом 61 «Создать исключения, соответствующие абстракции». В пункте 58 «Использование проверенных исключений для условий восстановления и исключений во время выполнения для ошибок программирования» также рассматривается вопрос о том, проверяется ли результирующая исключительная ситуация или нет.
То, что это конструктор, а не обычный метод, на самом деле не является проблемой. (На самом деле, конструкторы, возможно, имеют больше свободы, поскольку они не связаны интерфейсом super.)
При создании исключения в результате другого исключения рекомендуется убедиться, что вы настройками причину
в новом исключении.
Я думаю, что вам придется выполнить итерацию по строкам и проверить HSSFRow.getLastCellNum ()
на каждой из них.