NPOI Excel Number Format não aparece na planilha do Excel no ASP.NET
Pergunta
Estou tentando criar células de formato duplo e numérico no Excel usando a biblioteca NPOI. Eu usei código como
Dim cell As HSSFCell = row.CreateCell(j)
cell.SetCellValue(Double.Parse(dr(col).ToString))
Nos números do Excel, estão alinhados à direita, mas quando eu verifico o formato, ele está aparecendo em "general"
Então eu mudei meu código para como abaixo
Dim cell As HSSFCell = row.CreateCell(j)
cell.SetCellValue(Double.Parse(dr(col).ToString))
Dim cellStyle As HSSFCellStyle = hssfworkbook.CreateCellStyle
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("#,#0.0")
cell.CellStyle = cellStyle
Então, ao abrir o arquivo, ele está dando erro e também demorou tanto para abrir. Mas o formato do Excel mostrando em "Número"
O erro de exibição é como abaixo.
Como consertar isto?
Solução
Dar uma olhada em isto, você está criando um objeto CellStyle para cada célula? Se sim, não. Tente criar apenas alguns estilos antes de criar suas células e aplique esses estilos predefinidos às células que você cria.
Outras dicas
Hare é uma maneira simples de criar formato duplo no documento do Excel Usando npoi.
//make NUMERIC Format in Excel Document // Author: Akavrelishvili
var eRow = sheet.CreateRow(rowIndex); //create new Row , rowIndex - it's integer, like : 1,2,3
eRow.CreateCell(0).SetCellValue(row["ProvidName"].ToString()); //create cell and set string value
double Amount = Convert.ToDouble(row["Amount"].ToString()); //convert string to double
eRow.CreateCell(1).SetCellValue(Amount); // create cell and set double value.
Esta é a versão de funcionamento, eu usei muitos projetos.
Muito difícil é inserir o formato DateTime no Excel, não há um bom exemplo na Internet e acho que ajuda as pessoas a fazer da maneira correta. Eu mostro o exemplo de código:
//make Date Time Format in Excel Document // Author: Akavrelishvili
var erow = Sheet.Creatowerow (RowIndex); // Crie nova linha // rowindex - é inteiro, como: 1,2,3
ICellStyle cellDateStyle = workBook.CreateCellStyle(); //create custom style
cellDateStyle.DataFormat = workBook.CreateDataFormat().GetFormat("dd/mm/yyyy"); //set day time Format
eRow.CreateCell(3).SetCellValue(Convert.ToDateTime(row["Date"])); //set DateTime value to cell
eRow.GetCell(6).CellStyle = cellDateStyle; // Restyle cell using "cellDateStyle"
I hope it helps
Para corrigir os estilos de células diferentes, declaram todos os estilos fora de qualquer loop que você esteja em execução.
Presumo que você 'J' seria o enumerador, então vou deixar o que você tinha em um formato corrigido para você.
Dim cellStyle As HSSFCellStyle = hssfworkbook.CreateCellStyle
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("#,#0.0")
For col = 0 To ColoumCounter
For j = 0 To Counter
Dim cell As HSSFCell = row.CreateCell(j)
cell.SetCellValue(Double.Parse(dr(col).ToString))
cell.CellStyle = cellStyle
Next
Next
Isso deve funcionar um pouco melhor, limitando o número de estilos "novos".
Crie um estilo então, mas esse estilo para a coluna
ICellStyle _TextCellStyle = wb1.CreateCellStyle();
_TextCellStyle.DataFormat = wb1.CreateDataFormat().GetFormat("@");
sheet.SetDefaultColumnStyle(2, _TextCellStyle);