Remover células em merge de arquivo xls usando HSSF

3 respostas
E

Olá!

Através da API HSSF (http://jakarta.apache.org/poi/hssf/index.html), estou carregando dados de uma planhilha do Excel.
Ao exibir um log que criei para me mostrar como minha implementação estava obtendo os dados contidos nas células, pude perceber que as células que foram mescladas (merge) não eram carregadas corretamente.

Percorro as linhas da planilha e cada uma das células (colunas) contidas em cada linha. Qdo vou percorrer uma linha que possui alguma célula mesclada com uma célula da próxima linha, não consigo obter nenhum dado das células.

Ex: célula b4 está mesclada com b5. Qdo leio linha 4 não obtenho dados, qdo leio 5, obtenho dados normalmente.

Tentei usar o comando removeMergedRegion(index) mas, não sei o que é este tal “index” que tenho que passar como parâmetro. Tentei alguns valores mas nada aconteceu… as células mescladas continuam na planilha.

Se alguém souber de algo que possa resolver este problema, agradeceria se me informasse.

Obrigada,
Eliane

3 Respostas

R

Olá,

gostaria de saber se vc tem algum exemplo que eu possa seguir para manipular arquivos excel com a jakarta poi, pois estou quebrando a cabeça para entender alguns exemplos que encontrei na internet…

Obrigado

L

Salve Eliana,

A regra para percorrer(pegar) os dados dentro da celula, primeiramente devemos percorrer a linha e depois celula por celula. Faca uma iteracao de linhas e celulas e assim voce pega os dados.
Este metodo que voce citou removeMergedRegion(int index), o parametro eh a posicao da celula, onde vai remover a regiao mesclada e com isto voce vai perder o valor ou formula da celula.

public void removeMergedRegion(int index)
removes a merged region of cells (hence letting them free) 

Parameters:
index - of the region to unmerge

Espero ter lhe ajudado. Abracos!

Olah renato_avancini,

Segue o link para a sua duvida:
http://www.google.com/search?sourceid=navclient&ie=UTF-8&rls=GGLD,GGLD:2004-48,GGLD:en&q=POI+example+HSSFSheet
Abracos!

Leandro Capuano

sanjust

Sei que a pergunta foi feita em [color=red]2004[/color], mas... se alguém estiver precisando da resposta para 2011 usando a API 3.7 assim como eu precisei. :D

Aqui vai o código:

CellRangeAddress range = null;
		
for(Row row : sheet){
	for(Cell cell : row){
		for (int i = 0; i < sheet.getNumMergedRegions(); i++) {
			range = sheet.getMergedRegion(i);
			if(range.isInRange(cell.getRowIndex(), cell.getColumnIndex())){
				sheet.removeMergedRegion(i);
			}
		}
	}
}

Saudações. 8)

Criado 29 de dezembro de 2004
Ultima resposta 1 de mar. de 2011
Respostas 3
Participantes 4