O projeto precisa analisar documentos do Excel para obter dados, então encontrei algumas informações on -line e combinei com meu uso desta vez e escrevi minha experiência:
1. As seguintes dependências são necessárias para o projeto 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>
Vá diretamente para a classe de teste, com anotações completas na classe:
pacote shindo.java; importar java.io.fileInputStream; importar java.io.inputStream; importar java.util.ArrayList; importar java.util.list; import org.apache.poi.hsf.usermodel.hsfCell; org.apache.poi.hssf.usermodel.hssfworkbook; importar org.apache.poi.ss.usermodel.cell; importar org.apache.poi.xssf.Usermodel.xsfcell; import org.apache.poiEnome.xssf.ermodel.xsfcell; import.apache.poiEnome.xssf.ermodel.xsfCell; org.apache.poi.xssf.usermodel.xssfsheet; importar org.apache.poi.xssf.usermodel.xssfworkbook; classe pública Excelutil {public static void main (string [] args) {string = "d: //ide//work-workun/nwern/javic/nkav tente {list <list <string>> resultado = new Excelutil (). readxls (caminho); System.out.println (resultado.size ()); for (int i = 0; i <resultado.size (); i ++) {list <string> modelo = resultado.get (i); System.out.println ("Ordernum:" + Model.get (0) + "-> OrderAntount:" + Model.get (1)); }} catch (Exceção e) {e.printStackTrace (); }} /** * * @title: readxls * @Description: Processando arquivos XLS * @param @param caminho * @param @return * @param @throws Exception Set Arquivo * @Return List <List <String >> Return Type * @Throws * * Não é difícil encontrar o lógico de processamento do código: * 1. 1. Arquivo de Excel no Memory HSSFWorkbook Type Object, que representa todo o arquivo do 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 é = new FileInputStream (caminho); // hssfworkbook identifica todo o Excel HSSFWorkbook HSSFWorkbook = new HSSFWorkbook (IS); List <List <String>> resultado = novo ArrayList <List <String>> (); int size = hssfworkbook.getNumberOfSheets (); // loop cada página e processe a página de loop atual para (int numsheet = 0; numsheet <size; numsheet ++) {// hssfsheet identifica uma determinada página hssfsheet hssfsheet = hssfworkbook.getSheetat (numsheet); if (hssfsheet == null) {continua; } // Processe a página atual e leia cada linha para (int ROWNUM = 1; ROWNUM <= HSSFSHEET.GETLASTOWNUM (); ROWNUM ++) {// Hssfrow representa a linha Hssfrow Hssfrow = hssfsheet.GeTrow (ROWNUM); int miColix = hssfrow.getfirstCellnum (); int maxcolix = hssfrow.getLastcellnum (); List <String> rowList = new ArrayList <String> (); // Traversal e altere as linhas para obter processamento de cada elemento da célula para (int colix = miColix; colix <maxcolix; colix ++) {// hssfcell representa a célula hssfcell = hssfrow.getcell (colix); if (célula == null) {continue; } rowlist.add (getStringVal (célula)); } resultado.add (rowlist); }} Retornar resultado; } / ** * * @title: readxlsx * @Description: Processando arquivos xlsx * @param @param caminho * @param @return * @param @throws seting de exceção Arquivo * @return list <list <tring>> Tipo de retorno * @Throws * / private List <List <String >> readxlsx (string Path) XSSFWorkbook XSSFWorkbook = novo XSSFWorkbook (IS); List <List <String>> resultado = novo ArrayList <List <String>> (); // loop todas as páginas e processe a página de loop atual para (xssfsheet xssfsheet: xssfworkbook) {if (xssfsheet == null) {continuação; } // Processe a página atual e leia todas as linhas para (int rownum = 1; rownum <= xssfsheet.getLastrownum (); rownum ++) {xssfrow xssfrow = xssfsheet.getRow (rownum); int miColix = 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 (célula == null) {continue; } rowlist.add (Cell.toString ()); } resultado.add (rowlist); }} Retornar resultado; } // Problemas existentes/** De fato, às vezes os dados que queremos obter são os dados no Excel, mas, no final, descobre -se que o resultado não é ideal* se os dados do seu Excel for um número, você descobrirá que o correspondente em Java se tornou um método de notação científica. * Portanto, ao obter valores, você precisa fazer algum processamento especial para garantir que obtenha os resultados desejados. A abordagem on -line é formatar dados numéricos para obter os resultados desejados. * O seguinte é outro método. Antes disso, vamos dar uma olhada no método ToString () em POI: * * Este método é o método POI. A partir do código -fonte, podemos descobrir que o fluxo de processamento é: * 1. Obtenha o tipo de célula * 2. Formate os dados de acordo com o tipo e a saída. Isso cria muitas coisas que não estamos procurando*, então fazemos uma transformação desse método. * / /*public string tostring () {switch (getCellType ()) {case Cell_type_blank: return ""; case celular_type_boolean: return getBooleAncellValue ()? "Verdadeiro": "false"; case Cell_Type_error: return erroreval.getText (getErrorCellValue ()); case celular_type_formula: return getCellFormula (); Case Cell_Type_Numeric: if (dateUtil.ISCellDateFormatted (this)) {dateFormat sdf = new SimpleDateFormat ("dd-mmm-yyyy") return sdf.format (getDateCellValue ()); } retornar getNumericCellValue () + ""; Case Cell_Type_String: retornar getRichStringCellValue (). ToString (); Padrão: retornar "Tipo de célula desconhecido:" + getCellType (); }}* / / *** O método de reconstrução do tostring padrão () de POI é o seguinte* @title: getStringVal* @Description: 1. Para tipos não familiares, ou vazio, retornar "" String de string* 2. Se for um número, modificar o tipo de célula para seriar e depois retornar a string, de modo que o formato não é formado* Tipo de retorno * @THOWS */ String estática pública getStringVal (HSSFCell Cell) {switch (Cell.getCellType ()) {case Cell.Cell_Type_Boolean: Return Cell.getBooleAnCellValue ()? "Verdadeiro": "false"; case celular.cell_type_formula: retornar célula.getCellFormula (); case celular.cell_type_numeric: Cell.setCellType (Cell.Cell_Type_String); retornar célula.getStringCellValue (); case celular.cell_type_string: retornar célula.getStringCellValue (); padrão: retornar ""; }}}Resumir
O exposto acima é todo o conteúdo deste artigo sobre o uso do pacote POI para ler o código do documento do Excel em Java. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!