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"

alt text

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.

alt text

Como consertar isto?

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top