Проект должен анализировать документы Excel для получения данных, поэтому я нашел некоторую информацию в Интернете и в сочетании с моим использованием на этот раз и записал свой опыт:
1. Для проекта Maven требуются следующие зависимости:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.10-FINAL</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.10-FINAL</version> </dependency>
Прямо перейдите на тестовый класс, с полными аннотациями в классе:
Пакет Shindo.java; импорт java.io.fileinputstream; import java.io.inputstream; импорт java.util.arraylist; import java.util.list; import org.apache.poi.hssf.usermodel.hssfcell; import org.apache.poi.hsssf.hssfcell; import org.pache. org.apache.poi.hssf.usermodel.hssfworkbook; import org.apache.poi.ss.usermodel.cell; import org.apache.poi.xssf.usermodel.xssfcell; import org.apache.poi.xssf.xssfrow; org.apache.poi.xssf.usermodel.xssfsheet; import org.apache.poi.xssf.usermodel.xssfwork; try {list <list <string >> result = new Excelutil (). Readxls (path); System.out.println (result.size ()); for (int i = 0; i <result.size (); i ++) {list <string> model = result.get (i); System.out.println ("ordernum:" + model.get (0) + "-> orderamount:" + model.get (1)); }} catch (Exception e) {e.printstackTrace (); }} /** * * @title: readxls * @description: обработка файлов xls * @param @param path * @param @return * @param @Throws Установка Исключений Файл * @return <sist <string >> Вернуть тип * @Throws * * Не сложно найти его логику обработки из кода: * 1. Первый. Использование INTERSTREM для INTER EXEL an-File. Excel File HSSFWorkBook объект типа, который представляет весь файл Excel. * 3. Loop for each page of this excel file* 4. Loop for each row in each page* 5. Process each cell in each row to get the value of this cell* 6. Add the result of this line to a List array* 7. Add the result of each row to the final total result* 8. After parsing, an object of type List<List<String>> is obtained* */ private List<List<String>> readXls(String path) throws Exception { InputStream is = new FileInputStream (path); // HSSFWorkBook идентифицирует весь Excel HSSFWorkBook HSSFWorkBook = New HSSFWorkBook (IS); Список <list <String >> result = new ArrayList <list <string >> (); int size = hssfworkbook.getnumberofsheets (); // цикл каждой страницы и обработайте текущую страницу цикла для (int necleeet = 0; nufeet <size; nuflet ++) {// hssfsheet идентифицирует определенную страницу hssfsheet hssfsheet = hssfworkbook.getsheetat (numsheet); if (hssfsheet == null) {продолжить; } // Обработайте текущую страницу и прочитайте каждую строку для (int rownum = 1; rownum <= hssfsheet.getlastrownum (); rownum ++) {// hssfrow представляет ряд hssfrow hssfrow = hssfsheet.getRow (rownum); int mincolix = hssfrow.getfirstcellnum (); int maxcolix = hssfrow.getlastcellnum (); List <string> rowlist = new ArrayList <string> (); // Переносить и изменить строки, чтобы получить обработку каждого элемента ячейки для (int colix = mincolix; colix <maxcolix; colix ++) {// hssfcell представляет ячейку HSSfcell Cell = hssfrow.getCell (colix); if (cell == null) {продолжить; } rowlist.Add (getStringVal (cell)); } result.add (rowlist); }} return result; } / ** * * @title: readxlsx * @description: обработка файлов xlsx * @param @param path * @param @return * @param @Throws Файл настройки исключения * @return <Sture <string >> return Type * @Throws * / private list <Stist <string >> readxlsx (string path) throws throws exception {inputStream = new -файл; Xssfworkbook xssfworkbook = new xssfworkbook (IS); Список <list <String >> result = new ArrayList <list <string >> (); // цикл каждой страницы и обработайте текущую страницу цикла для (xssfsheet xssfsheet: xssfworkbook) {if (xssfsheet == null) {продолжение; } // Обработайте текущую страницу и прочитайте каждую строку для (int rownum = 1; rownum <= xssfsheet.getlastrownum (); rownum ++) {xssfrow xssfrow = xssfsheet.getrow (rownum); int mincolix = xssfrow.getfirstcellnum (); int maxcolix = xssfrow.getlastcellnum (); List <string> rowlist = new ArrayList <string> (); for (int colix = mincolix; colix <maxcolix; colix ++) {xssfcell cell = xssfrow.getcell (colix); if (cell == null) {продолжить; } rowlist.add (cell.toString ()); } result.add (rowlist); }} return result; } // существующие проблемы/** * Поэтому при получении значений вам необходимо сделать специальную обработку, чтобы убедиться, что вы получите желаемые результаты. Онлайн -подход заключается в форматировании численных данных для получения желаемых результатов. * Ниже приведен другой метод. Перед этим давайте посмотрим на метод ToString () в POI: * * Этот метод является методом POI. Из исходного кода мы можем обнаружить, что поток обработки: * 1. Получить тип ячейки * 2. Форматируйте данные в соответствии с типом и выводом. Это создает много вещей, которые мы не ищем*, поэтому мы делаем преобразование этого метода. * / /*public String toString () {switch (getCellType ()) {case cell_type_blank: return ""; case cell_type_boolean: return getbooleancellvalue ()? «Истинно»: «Неверно»; case cell_type_error: return erroreval.getText (geterRorCellValue ()); case cell_type_formula: return getCellformula (); case cell_type_numeric: if (dateutil.iscelldateformatted (this)) {dateformat sdf = new SimpleDateFormat ("dd-mmmmyyy") return sdf.format (getDateCellValue ()); } return getNumericCellValue () + ""; case cell_type_string: return getrichstringcellvalue (). toString (); по умолчанию: возврат «Неизвестный тип ячейки:» + getCelltype (); }}* / / *** Метод восстановления toString () pOI по умолчанию заключается в следующем* @Title: getStringVal* @Description: 1. Для незнакомых типов или пустые, возвращайте "" Control String* 2. Если это число, изменять клетку на строку и затем string at at at @param @param @param @param @param @param @param @param @param @param @param @param @param @param @param @param @param @param @param @param @param @param @par String return type * @throhs */ public static String getStringVal (hssfcell cell) {switch (cell.getCelltype ()) {case cell.cell_type_boolean: return cell.getbooleancellvalue ()? «Истинно»: «Неверно»; case cell.cell_type_formula: return cell.getcellformula (); case cell.cell_type_numeric: cell.setcelltype (cell.cell_type_string); return cell.getStringCellValue (); case cell.cell_type_string: return cell.getStringCellValue (); по умолчанию: return ""; }}}Суммировать
Выше приведено все содержание этой статьи об использовании пакета POI для чтения кода документа Excel в Java. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!