Проблема с установкой целочисленного значения в Excel с NPOI

У меня есть строка Excel, где мне нужно написать 5 с использованием NPOI в первом столбце и 7.0 во втором столбце. Записать эти значения довольно просто, но когда мне нужно записать оба в одну строку, 5 форматируется как 5.0.

Чтобы написать 5, я использую:

public static void SetCellValue(IRow row)
{
    var cell = row.CreateCell(1); // column 1
    int value = 5;
    cell.SetCellType(CellType.Numeric);
    cell.SetCellValue(value); 

    // 5 is written
}

Чтобы написать 7.0, я использую:

public static void SetCellValue(IRow row)
{
    var cell = row.CreateCell(2); // column 2
    int value = 7;
    cell.SetCellType(CellType.Numeric);
    cell.SetCellValue(value); 

    var dataFormat = cell.Sheet.Workbook.CreateDataFormat();
    var strFormat = "0.0";
    cell.CellStyle.DataFormat = dataFormat.GetFormat(strFormat); 

    // 7.0 is written
}

Чтобы написать 5 и 7.0, я использую:

public static void SetCellValue(IRow row)
{
    var cell1 = row.CreateCell(1); // column 1
    int value1 = 5;
    cell1.SetCellType(CellType.Numeric);
    cell1.SetCellValue(value1); 

    var cell2 = row.CreateCell(2); // column 2
    int value2 = 7;
    cell2.SetCellType(CellType.Numeric);
    cell2.SetCellValue(value2); 

    var dataFormat = cell2.Sheet.Workbook.CreateDataFormat();
    var strFormat = "0.0";
    cell2.CellStyle.DataFormat = dataFormat.GetFormat(strFormat); 

    // 5.0 and 7.0 is written and not 5 and 7.0
}


Есть предложения? Я пытался отформатировать первый элемент (номер 5), используя такие форматы, как var strFormat = "0"; и var strFormat = "#";, но он остается как 5.0, а не как 5.


Дополнительное примечание. Я использую NPOI версии 2.1.1.


person JoJo    schedule 29.12.2014    source источник


Ответы (1)


Мне нравится NPOI, но иногда у меня возникают проблемы с некоторыми странными ошибками. Ваша проблема кажется одной из таких.

Чтобы решить эту, вам нужно:

  1. Создайте строку в своем шаблоне Excel и отформатируйте ее, как вам нужно.

  2. Создайте новую строку (где вы хотите написать), скопировав из отформатированного содержимого.

int formattedRowIndex = 1;
int newRowIndex = 2;
IRow row = sheet.CopyRow(formattedRowIndex, newRowIndex);
  1. Запишите значения без применения какого-либо другого форматирования.
row.CreateCell(1).setCellValue(5);
row.CreateCell(2).setCellValue(7);

// Output: 5 and 7.0
  1. Удалите фиктивную строку:
sheet.RemoveRow(formattedRowIndex);
person Zanon    schedule 29.12.2014