Gerar arquivos do Excel simples
Em escritórios reais, geralmente temos um requisito: exigimos que o relatório seja aberto diretamente no Excel. Existe tanta necessidade durante os estágios. Consulte todas as informações do anexo fornecido pelo usuário com base no recurso selecionado e gerar o Excel para download. No entanto, ao consultar, precisamos verificar se há algum erro nas informações no anexo fornecido pelo usuário (cartão de identificação). Existe um erro de geração de erros da mensagem de erro Excel.
O projeto POI da Apache é atualmente uma interface HSSF relativamente madura usada para processar objetos Excel. De fato, o POI não apenas lida com o Excel, mas também pode lidar com palavras, powerpoint, visio e até perspectivas.
Aqui, primeiro apresentarei como gerar o Excel usando POI.
Primeiro de tudo, antes de gerar o Excel, precisamos entender a organização dos arquivos do Excel. Em POI, entende -se da seguinte maneira: um arquivo do Excel corresponde a uma pasta de trabalho e um livro de trabalhadores consiste em várias folhas. Uma folha possui várias linhas e uma linha geralmente possui várias células.
Para os quatro substantivos acima que podemos entender na figura abaixo
Para gerar o Excel, o POI fornece os seguintes objetos básicos:
A partir da imagem acima e da estrutura organizacional do Excel, podemos entender as etapas para criar o Excel.
1. Gere o objeto de documento Hssshworkbook.
2. Gere o formulário HSSFheet através do HSSFWorkbook.
3. Gere linhas através de HSSFSheet
4. Gere a célula HSSFCell através do Hssfrow.
Aqui está o código de exibição:
Erro do cartão de identidade Bean (Errorcondition.java)
classe pública ErrorCondition {private String Name; // Nomeie a string privada IDCARD; // status da sequência privada do cartão de identificação; // Mensagem de string privada de status de erro; // Mensagem de erro ErrorCondition (Nome da String, String Idcard, Status da String, Mensagem String) {this.name = Name; this.idcard = idcard; this.status = status; this.Message = message; } public string getName () {return name; } public void setName (nome da string) {this.name = name; } public string getIdCard () {return iDcard; } public void SetIdCard (String IDCARD) {this.idcard = IDCARD; } public string getStatus () {retornar status; } public void setStatus (status da string) {this.status = status; } public string getMessage () {return message; } public void setMessage (string message) {this.message = message; }}Classe de processamento (ExportRorexcel.java)
public classe ExterRexcel {public static void main (string [] args) {// etapa 1 Crie a pasta de trabalho hssfworkbook wb = new hssfworkbook (); // Etapa 2 Crie folha Hssfheet Sheet = WB.CreateSheet ("Mensagem de erro do cartão de identificação"); // Etapa 3 Criar linha Linha: Adicionar 0 linhas do cabeçalho da tabela Hssfrow Row = Sheet.Crearrow (0); HSSFCellStyle Style = WB.CreateCellStyle (); style.setalignment (hsSfCellStyle.align_center); // centro // Etapa 4: Crie célula HSSFCell Cell = Row.CreateCell (0); // a primeira célula celular.setCellValue ("nome"); // Definir Value Cell.setCellStyle (estilo); // célula de conteúdo central = linha.createCell (1); // a segunda célula celular.setCellValue ("cartão de identificação"); Cell.setCellStyle (estilo); célula = linha.createCell (2); // a terceira célula celular.setCellValue ("Status do erro"); Cell.setCellStyle (estilo); célula = linha.createCell (3); // a quarta célula celular.setCellValue ("mensagem de erro"); Cell.setCellStyle (estilo); // A quinta etapa insere a lista de dados <rorwcondition> list = exportRorexcel.getErrorCondition (); for (int i = 0; i <list.size (); i ++) {errorcondition errorcondition = list.get (i); // Criar linha = Sheet.crerowerow (i+1); // Crie célula e adicione a linha de dados.CreateCell (0) .SetCellValue (ErrorCondition.getName ()); row.createCell (1) .setCellValue (errorcondition.getIdCard ()); row.createCell (2) .setCellValue (errorcondition.getStatus ()); row.createCell (3) .setCellValue (errorcondition.getMessage ()); } // Etapa 6 Salve o arquivo do Excel gerado no caminho especificado, tente {FileOutputStream fout = new FileOutputStream ("d: //errorcondition.xls"); wb.Write (FOUT); fout.close (); } catch (ioexception e) {e.printStackTrace (); } System.out.println ("Geração de arquivos do Excel com sucesso ..."); } Lista estática pública <rorworcondition> getErrorCondition () {list <rorwcondition> list = new ArrayList <rorworcondition> (); ErrorCondition R1 = New ErrorCondition ("Zhang San", "4306821989021611", "L", "Erro de comprimento"); ErrorCondition r2 = new ErrorCondition ("Li Si", "430682198902191112", "X", "Verifique o erro"); ErrorCondition r3 = new ErrorCondition ("Wang Wu", "", "N", "Informações do cartão de identidade está vazio"); list.add (r1); list.add (r2); list.add (r3); lista de retorno; }} Nas seis etapas acima, você pode gerar arquivos do Excel no local especificado.
A implementação de Java POI insere imagens no Excel
Fazer o desenvolvimento da Web é inevitável para lidar com o Excel. Hoje, o chefe me deu uma tarefa - Exportar Excel. O que eu pensei que, a princípio, era bastante simples, era apenas pesquisar, construir o Excel e baixar a resposta. Mas há uma diferença, ou seja, você precisa adicionar fotos, é uma que foi adicionada há muito tempo. Ao mesmo tempo, nenhuma boa informação foi encontrada na internet, então escrevi esta postagem para gravá -las para a minha e meus amigos do blog para consultar e referir.
Existe um objeto HSSFPatriarch no POI, que é o principal gerente para desenhar. Seu método CreatePicture (Anchor, PictureIndex) pode inserir uma imagem no Excel. Então você precisa inserir uma imagem no Excel e pode fazê -lo em três etapas. 1. Obtenha o objeto Hssfpatriarch, 2. Novo objeto HSSFClientAnchor, 3. Basta chamar o método CreatePicture. A implementação é muito fácil de implementar, mas ainda é um pouco difícil fazê -lo bem. Aqui primeiro inserimos uma foto:
classe pública ExcelimageTest {public static void main (string [] args) {fileOutputStream fileout = null; BufferImage bufferImg = nulo; // primeiro, coloque a leitura na imagem em um bytearrayOutputStream para gerar bytearray try {byteArrayOutputStream bytearrayout = new ByteArrayOutputStream (); bufferiMg = imageio.read (novo arquivo ("f: /picture/anounty/xiaozhao11.jpg")); Imageio.write (bufferImg, "jpg", bytearrayout); HSSFWorkbook WB = new HSSFWorkbook (); Sheet hssfsheet1 = wb.createSheet ("imagem de teste"); // O gerente superior para desenho pode obter apenas uma planilha (certifique -se de prestar atenção a esse ponto) Hssfpatriarch Patriarch = Sheet1.CreatedRawingPatriarch (); // a âncora é usada principalmente para definir os atributos das imagens hssfclientanchor âncora = novo hssfclientanchor (0, 0, 255, 255, (curto) 1, 1, (curto) 5, 8); anchor.setAnchortype (3); // Insira o patriarch de imagem.CreatePicture (Anchor, wb.addpicture (bytearrayout.tobytearray (), hssfworkbook.picture_type_jpeg)); fileout = new FileOutputStream ("d:/teste excel.xls"); // grava no arquivo do Excel wb.write (fileout); System.out.println ("--------"); } catch (Exceção e) {e.printStackTrace (); } finalmente {if (fileout! = null) {try {fileout.close (); } catch (ioexception e) {e.printStackTrace (); }}}}}}}}}} A seguir, são apresentados os resultados após a execução:
Quanto ao motivo pelo qual esse resultado é principalmente por causa do HSSFClientAnchor (0, 0, 255, 255, (curto) 1, 1, (curto) 5, 8) construtor. Deixe -me explicar este construtor abaixo: hssfclientanchor (int dx1, int dy1, int dx2, int dy2, col1 curto, int row1, col2 curto, int row2); Os significados de cada parâmetro são os seguintes:
Aqui DX1 e DY1 definem a posição inicial da imagem na célula inicial, e DX2 e DY2 definem a posição final da célula final. Col1 e Row1 definem a célula inicial, Col2 e Row2 definem a célula final.
O seguinte é criado com dois construtores diferentes. A partir dessa imagem, podemos ver claramente o significado e as diferenças dos oito parâmetros acima.
O exposto acima é inserir uma foto, e quanto a inserir várias imagens? De fato, é muito simples. Construa vários objetos diferentes de HSSFClientAnchor e controlem esses oito parâmetros, como segue:
Hssfclientanchor Anchor1 = novo HssfclientAnchor (0, 0, 1023.100, (curto) 1, 1, (curto) 5, 8); HSSFClientAnchor Anchor2 = New HssfclientAnchor (0, 0, 1023.100, (curto) 1, 9, (curto) 5, 16); // insira o patriarch de imagem.CreatePicture (Anchor1, wb.addpicture (bytearrayout.tobytearray (), hssfworkbook.picture_type_jpeg)); patriarch.createPicture (anchor2, wb.addpicture (bytearrayout.tobytearray (), hssfworkbook.picture_type_jpeg));
O restante do código é o mesmo e os seguintes resultados são obtidos: