Há muito tempo que queria estudar o método de usar Java para operar o Excel. Não tenho nada para fazer hoje, então apenas aprendi um pouco e resumi. Para usar java para operar o Excel, existe uma ferramenta de código aberto - jxl.jar, que pode ser baixada em http://sourceforge.net/projects/jexcelapi/files/.
1. Leia o conteúdo do arquivo Excel
Copie o código do código da seguinte forma:
/** *//**Lê o conteúdo do arquivo Excel
* @param arquivo arquivo a ser lido
* @retornar
*/
public static String readExcel(Arquivo arquivo)...{
StringBuffer sb = new StringBuffer();
Pasta de trabalho wb = null;
tentar...{
//Constrói objeto Pasta de Trabalho
wb=Workbook.getWorkbook(arquivo);
} catch (BiffException e) ...{
e.printStackTrace();
} catch (IOException e) ...{
e.printStackTrace();
}
if(wb==nulo)
retornar nulo;
//Depois de obter o objeto Workbook, você pode obter o objeto Sheet (planilha) através dele
Folha[] folha = wb.getSheets();
if(folha!=nulo&&folha.comprimento>0)...{
//Percorre cada planilha
for(int i=0;i<folha.comprimento;i++)...{
//Obtém o número de linhas da planilha atual
int rowNum = planilha[i].getRows();
for(int j=0;j<rowNum;j++)...{
//Obtém todas as células da linha atual
Célula[] células = planilha[i].getRow(j);
if(células!=nulo&&células.comprimento>0)...{
//Percorre cada célula
for(int k=0;k<células.comprimento;k++)...{
//Lê o valor da célula atual
String cellValue = células[k].getContents();
sb.append(cellValue+" ");
}
}
sb.append(" ");
}
sb.append(" ");
}
}
//Finalmente fecha o recurso e libera memória
fechar();
retornar sb.toString();
}
2. Escreva em arquivo Excel
Existem muitos formatos aqui, como negrito no conteúdo do texto, adição de certas cores, etc. Você pode consultar a API do jxl
Copie o código do código da seguinte forma:
/**Gera um arquivo Excel
* @param fileName O nome do arquivo Excel a ser gerado
*/
public static void writeExcel(String nome do arquivo)...{
WritableWorkbook wwb = null;
tentar...{
//Primeiro use o método de fábrica da classe Workbook para criar um objeto de pasta de trabalho gravável (Workbook)
wwb = Workbook.createWorkbook (novo arquivo (nome do arquivo));
} catch (IOException e) ...{
e.printStackTrace();
}
if(www!=nulo)...{
//Cria uma planilha gravável
//O método createSheet da pasta de trabalho possui dois parâmetros. O primeiro é o nome da planilha e o segundo é a posição da planilha na pasta de trabalho.
WritableSheet ws = wwb.createSheet("folha1", 0);
//Começa a adicionar células abaixo
for(int i=0;i<10;i++)...{
for(int j=0;j<5;j++)...{
//O que precisa ser observado aqui é que no Excel o primeiro parâmetro representa a coluna e o segundo parâmetro representa a linha.
Label labelC = new Label(j, i, "Esta é a linha "+(i+1)+", coluna "+(j+1)+"");
tentar...{
//Adiciona as células geradas à planilha
ws.addCell(rótuloC);
} catch (RowsExceededException e) ...{
e.printStackTrace();
} catch (WriteException e)...{
e.printStackTrace();
}
}
}
tentar...{
//Escreve da memória para arquivo
wwb.write();
//Fecha recursos e libera memória
close();
} catch (IOException e) ...{
e.printStackTrace();
} catch (WriteException e)...{
e.printStackTrace();
}
}
}
Nota: Se quiser escrever conteúdo em um Excel existente, você precisa proceder da seguinte forma:
Copie o código do código da seguinte forma:
WritableWorkbook livro = null;
tentar...{
//Excel pega o arquivo
Pasta de trabalho wb = Workbook.getWorkbook(new File("D:/test.xls"));
//Abre uma cópia de um arquivo e grava os dados especificados de volta no arquivo original
livro = Workbook.createWorkbook(new Arquivo("D:/test.xls"), wb);
//Adiciona uma planilha
Folha WritableSheet = book.getSheet("folha1");
sheet.addCell(new Label(8,3, "Algo é adicionado na linha 3, coluna 8"));
//TODO As seguintes partes são omitidas
}catch(Exceção e)...{
e.printStackTrace();
}
3. Descubra se um arquivo Excel contém uma determinada palavra-chave
Copie o código do código da seguinte forma:
/** Pesquisa se um determinado arquivo contém uma determinada palavra-chave
* @param file arquivo a ser pesquisado
* @param keyWord A palavra-chave a ser pesquisada
* @retornar
*/
public static boolean searchKeyWord(Arquivo arquivo,String keyWord)...{
res booleano = falso;
Pasta de trabalho wb = null;
tentar...{
//Constrói objeto Pasta de Trabalho
wb=Workbook.getWorkbook(arquivo);
} catch (BiffException e) ...{
retornar res;
} catch (IOException e) ...{
retornar res;
}
if(wb==nulo)
retornar res;
//Depois de obter o objeto Workbook, você pode obter o objeto Sheet (planilha) através dele
Folha[] folha = wb.getSheets();
booleano breakSheet = falso;
if(folha!=nulo&&folha.comprimento>0)...{
//Percorre cada planilha
for(int i=0;i<folha.comprimento;i++)...{
if(breakSheet)
quebrar;
//Obtém o número de linhas da planilha atual
int rowNum = planilha[i].getRows();
booleano breakRow = falso;
for(int j=0;j<rowNum;j++)...{
if(quebraRow)
quebrar;
//Obtém todas as células da linha atual
Célula[] células = planilha[i].getRow(j);
if(células!=nulo&&células.comprimento>0)...{
booleano breakCell = falso;
//Percorre cada célula
for(int k=0;k<células.comprimento;k++)...{
if(quebraCélula)
quebrar;
//Lê o valor da célula atual
String cellValue = células[k].getContents();
if(cellValue==nulo)
continuar;
if(cellValue.contains(keyWord))...{
res = verdadeiro;
breakCell = verdadeiro;
breakRow = verdadeiro;
breakSheet = verdadeiro;
}
}
}
}
}
}
//Finalmente fecha o recurso e libera memória
fechar();
retornar res;
}
4. Insira o ícone da imagem no Excel
Inserir imagens é fácil, veja o seguinte código:
Copie o código do código da seguinte forma:
/** *//**Inserir imagens no Excel
* @param dataSheet A planilha a ser inserida
* @param col A imagem começa nesta coluna
* @param row A imagem começa nesta linha
* @param width O número de colunas ocupadas pela imagem
* @param height O número de linhas ocupadas pela imagem
* @param imgFile O arquivo de imagem a ser inserido
*/
public static void insertImg(WritableSheet dataSheet, int col, int row, int width,
int altura, Arquivo imgFile)...{
WritableImage img = new WritableImage(coluna, linha, largura, altura, imgFile);
dataSheet.addImage(img);
}
Os comentários do código acima já são muito claros e provavelmente não há mais necessidade de explicá-los. Podemos verificá-los com o seguinte programa:
Copie o código do código da seguinte forma:
tentar...{
//Cria uma pasta de trabalho
Pasta de trabalho WritableWorkbook = Workbook.createWorkbook(new File("D:/test1.xls"));
//Planilha a ser inserida
WritableSheet imgSheet = workbook.createSheet("Imagens",0);
//Arquivo de imagem a ser inserido
Arquivo imgArquivo = new Arquivo("D:/1.png");
//A imagem é inserida na primeira célula da segunda linha, ocupando seis células cada em comprimento e largura.
insertImg(imgSheet,0,1,6,6,imgArquivo);
pasta de trabalho.write();
pasta de trabalho.close();
} catch (IOException e) ...{
e.printStackTrace();
} catch (WriteException e)...{
e.printStackTrace();
}
Mas o jxl suporta apenas imagens no formato png, e nem o formato jpg nem o gif são suportados.
5. Insira cabeçalho e rodapé
Geralmente, os cabeçalhos e rodapés são divididos em três partes, esquerda, centro e direita. Você pode usar o código a seguir para inserir cabeçalhos e rodapés.
Copie o código do código da seguinte forma:
/** *//**Adicionar cabeçalho e rodapé ao Excel
* @param dataSheet A planilha a ser adicionada ao cabeçalho
* @param à esquerda
* @param centro
* @param à direita
*/
public static void setHeader(WritableSheet dataSheet,String à esquerda,String ao centro,String à direita)...{
HeaderFooter hf = new HeaderFooter();
hf.getLeft().append(esquerda);
hf.getCentre().append(centro);
hf.getRight().append(direita);
//Adiciona cabeçalho
dataSheet.getSettings().setHeader(hf);
//Adiciona rodapé
//dataSheet.getSettings().setFooter(hf);
}
Podemos testar esse método com o seguinte código:
Copie o código do código da seguinte forma:
tentar...{
//Cria uma pasta de trabalho
Pasta de trabalho WritableWorkbook = Workbook.createWorkbook(new File("D:/test1.xls"));
//Planilha a ser inserida
WritableSheet dataSheet = workbook.createSheet("Adicionar cabeçalho",0);
ExcelUtils.setHeader(dataSheet, "chb", "2007-03-06", "Página 1 de 3");
pasta de trabalho.write();
pasta de trabalho.close();
} catch (IOException e) ...{
e.printStackTrace();
} catch (WriteException e)...{
e.printStackTrace();
}