O Apache POI é uma API Java de plataforma cruzada gratuita e de código aberto escrito em Java. O Apache POI fornece a função dos programas Java para ler e escrever arquivos de formato do Microsoft Office.
Página de download do projeto: http://poi.apache.org/download.html
O Apache POI é uma API Java que cria e mantém várias APIs Java que cumprem o padrão XML (OOXML) do Office (OOXML) e o formato de documento composto Ole 2 da Microsoft (OLE2). Ele pode ser usado para ler e criar e modificar os arquivos MS Excel usando Java. Além disso, você também pode usar o Java para ler e criar arquivos MS Word e MSpowerPoint. O Apache POI fornece a solução Java Operação Excel.
Exemplo de Documento de Reading Excel
Usamos o HSSFWorkbook no POI para ler dados do Excel.
Teste public void (arquivo de arquivo) lança IoException {inputStream inp = new FileInputStream (FILE); Livro de trabalho do HSSFWorkbook = novo HSSFWorkbook (INP); // pasta de trabalho ... Operação de Traversal} O código acima mostra que não há problema em ler o arquivo do Excel2003 (XLS), mas uma vez que o arquivo do Excel2007 (XLSX) for lido, uma exceção será relatada: "Os dados fornecidos parecem estar no Office 2007+ xml. Você está ligando para o PoI que lida com o OLE2 (você precisa de um número de documentos.
Depois de revisar as informações, a versão do Excel 2007 dos arquivos do Excel precisa ser lida usando o XSSFWorkbook, como segue:
Teste public void (arquivo de arquivo) lança IoException {inputStream inp = new FileInputStream (FILE); Panual de trabalho do XSSFWorkbook = novo XSSFWorkbook (INP); // pasta de trabalho ... Operação de Traversal} NOTA: O XSSFWorkbook requer importação adicional de poi-ooxml-3.9 sources.jar e poi-ooxml-schemas-3.9.jar.
Dessa forma, não há problema em importar o Excel2007, mas é relatada uma exceção para importar o Excel2003.
Portanto, ao importar o Excel, tente julgar a versão do Excel e chamar métodos diferentes.
Pensei em usar o nome do sufixo do arquivo para determinar o tipo, mas se alguém mudar o sufixo do XLSX para XLS, se ele usar a função XLSX para ler, o resultado é um erro; Embora o nome do sufixo esteja correto, a codificação do conteúdo do arquivo e assim por diante não está correta.
Finalmente, é recomendável usar o WorkbookFactory.Create (InputStream) no POI-OOXML para criar uma pasta de trabalho, porque o HSSFWorkbook e o XSSFWorkbook implementam a interface da pasta de trabalho. O código é o seguinte:
Pasta de trabalho WB = WorkbookFactory.Create (IS);
Como você pode imaginar, na Função de Workbookfactory.create (), deve haver um julgamento no tipo de arquivo. Vamos dar uma olhada em como os juízes do código -fonte:
/ ** * Cria o HSSFWorkbook / XSSFWorkbook apropriado a partir do * inputStream fornecido. * Seu fluxo de entrada deve suportar Mark/Redefinir ou * ser embrulhado como um {@link pushbackInputStream}! */ Public Static Work.ttatic Create (InputStream INP) lança ioexception, invalidformatexception {// Se claramente não faz marcar/ redefinir, envolva se (! inp.marksupported ()) {inp = new PushBackInputStream (inp, 8); } if (poifsfilesystem.haspoifsheader (inp)) {return New HSSFWorkbook (INP); } if (Poixmldocument.hasooxmlheader (inp)) {return New XSSFWorkbook (opcpackage.open (inp)); } Jogue nova ilegalArgumentException ("Seu insputStream não era um fluxo OLE2, nem um fluxo de ooxml"); }Você pode ver que os objetos apropriados da pasta de trabalho são criados separadamente de acordo com o tipo de arquivo. É julgado com base nas informações do cabeçalho do arquivo. Neste momento, mesmo que o nome do sufixo seja alterado, ele ainda não pode ser passado.