Как конвертировать из Scientifi c в числовое значение при записи Excel в Apache Poi Java - PullRequest
0 голосов
/ 02 мая 2020

Мне нужно создать лист XL с использованием Apache POI с некоторыми значениями, которые являются длинными цифрами c для примера: 1234567891011.

Когда я использую приведенный ниже пример кода для создания листа Excel, данные хранится в формате Scientifi c (1.23457E + 12). Но я хочу сохранить эти данные в качестве числа ex. 1234567891011.00 в порядке.

Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet("format sheet");
String str = "1234567891011";
Row row;
Cell cell;
short rowNum = 0;
short colNum = 0;

row = sheet.createRow(rowNum++);
cell = row.createCell(colNum);
cell.setCellValue(str);


FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();

Я попытался установить формат ячейки в Numeri c, как показано ниже, но не работает.

row = sheet.createRow(rowNum++);
cell = row.createCell(colNum);
cell.setCellValue(str);
dateCell1.setCellType(XSSFCell.CELL_TYPE_NUMERIC);
double converted = new Double(str);
dateCell1.setCellValue(converted);

Скажите, пожалуйста, если это возможно.

Ответы [ 2 ]

2 голосов
/ 02 мая 2020

Excel использует числовой формат General по умолчанию. При необходимости он переключается на формат scientifi c. Это означает, что если ширина ячейки слишком мала или число c слишком велико.

Так что используйте стиль ячейки со специальным форматом чисел 0.00 или 0.

Пример:

import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

class CreateExcelBigDecimal {

 public static void main(String[] args) throws Exception {

  //Workbook workbook = new XSSFWorkbook(); String filePath = "./Excel.xlsx";
  Workbook workbook = new HSSFWorkbook(); String filePath = "./Excel.xls";

  DataFormat format = workbook.createDataFormat();

  CellStyle numberCellStyle = workbook.createCellStyle();
  numberCellStyle.setDataFormat((short)8);
  numberCellStyle.setDataFormat(format.getFormat("0.00"));

  Sheet sheet = workbook.createSheet();
  Cell cell = sheet.createRow(0).createCell(0);

  double value = 1234567891011d;

  cell.setCellValue(value);
  cell.setCellStyle(numberCellStyle);

  sheet.setColumnWidth(0, 20*256);

  FileOutputStream out = new FileOutputStream(filePath);
  workbook.write(out);
  out.close();
  workbook.close();

 }
}

Это приводит к отображению 1234567891011.00 в ячейке A1.

0 голосов
/ 02 мая 2020

Оставьте ячейку в виде типа String и отформатируйте свой номер java side.

long yourLongNumber = 1234567891011;
String strLong = String.format("%d", yourLongNumber);
//out: "1234567891011"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...