Estou usando Apache POI API
para gerar excel spreadsheet
alguns dados de saída.
O problema que estou enfrentando é que, quando a planilha é criada e aberta, as colunas não são expandidas de forma que algum texto longo, como texto formatado com data, não apareça à primeira vista.
Eu poderia apenas clicar duas vezes na borda da coluna no Excel para expandir ou arrastar a borda para ajustar a largura da coluna, mas pode haver mais de 20 colunas e não há como eu querer fazer isso manualmente toda vez que abrir a planilha :(
Eu descobri (embora possa ser o método errado) groupRow()
esetColumnGroupCollapsed()
posso fazer o truque, mas sem sorte. Talvez eu esteja usando da maneira errada.
Snippet de código de amostra
Workbook wb = new HSSFWorkbook();
CreationHelper createHelper = wb.getCreationHelper();
//create sheet
Sheet sheet = wb.createSheet("masatoSheet");
//not really working yet.... :(
//set group for expand/collapse
//sheet.groupRow(0, 10); //just random fromRow toRow argument values...
//sheet.setColumnGroupCollapsed(0, true);
//create row
Row row = sheet.createRow((short)0);
//put a cell in the row and store long text data
row.createCell(0).setCellValue("Loooooooong text not to show up first");
Quando esta planilha é criada, a string "Looooooong text to not show up first" está na célula, mas como a coluna não está expandida, apenas "Loooooooo" é exibido.
Como posso configurá-lo para que, ao abrir minha planilha, a coluna já esteja expandida ???
fonte
Respostas:
Depois de adicionar todos os seus dados à planilha, você pode chamá
autoSizeColumn(int column)
-la para ajustar automaticamente as colunas para o tamanho adequadoAqui está um link para a API .
Veja esta postagem para obter mais referências. Problema em ajustar o tamanho da célula do Excel ao tamanho do conteúdo ao usar o Apache Poi
fonte
autoSizeColumn
não escala bem e vai ser super- lento se você tiver lotes de linhas. Tive que pegar um pouco de hacky e fazer algo semelhante ao que foi sugerido nesta pergunta .Dica: para fazer o tamanho automático funcionar, a chamada para
sheet.autoSizeColumn(columnNumber)
deve ser feita após preencher os dados no Excel.Chamar o método antes de preencher os dados não terá efeito.
fonte
(5 until row.lastCellNum).forEach { colNum -> val columnWidth = (row.getCell(colNum).toString().length * 0.44 + 2.24) * 768 reportSheet.setColumnWidth(colNum, columnWidth.toInt()) }
Se você deseja dimensionar automaticamente todas as colunas em uma pasta de trabalho, aqui está um método que pode ser útil:
fonte
NullPointerException
arow.cellIterator()
. É porque não tenho valor em uma das células?Você pode tentar algo assim:
Aqui os parâmetros são: número da coluna na folha e sua largura Mas, as unidades de largura são muito pequenas, você pode tentar 4000, por exemplo.
fonte
Para Excel POI:
fonte
amostra de código abaixo
// isso é crucial
// o argumento deve ser o número da célula
Verifique a saída e enlouqueça :)
fonte
Se você souber a contagem de suas colunas (por exemplo, é igual a uma lista de coleção). Você pode simplesmente usar este forro para ajustar todas as colunas de uma folha (se você usar pelo menos java 8):
fonte
Eu uso a solução simples abaixo:
Esta é sua pasta de trabalho e planilha:
em seguida, adicione dados à sua planilha com colunas e linhas. Depois de adicionar dados à planilha, escreva o seguinte código para a
autoSizeColumn
largura.Aqui, em vez de 15, você adiciona o número de colunas em sua planilha.
Espero que alguém ajude isso.
fonte
É muito simples, use este código de linha dataSheet.autoSizeColumn (0)
ou forneça o número da coluna entre colchetes dataSheet.autoSizeColumn (número da célula)
fonte
Você também pode quebrar o texto. Código de amostra PFB:
fonte
Você pode usar
setColumnWidth()
se quiser expandir mais sua célula.fonte