Запись числа в формате Long

415
14 июля 2018, 00:50

День добрый. Вопрос такого содержания использую библиотеку apache poi для формирования Excel отчета. Но столкнулся с проблемой.

У меня есть 2 числовых поля, которые хотелось бы поместить в Excel как число. Но они попадают туда как строка. (И вид имеют страшный).

Дело в том что я используют типы данных float и Long. Tак вот Long хотелось бы бес знаков после запятой, а float наоборот с 2 знаками. Подскажите как это сделать?

Используемый код привожу ниже.

public class ExcelCreate {
private static HSSFCellStyle createStyleForTitle(HSSFWorkbook workbook) {
    HSSFFont font = workbook.createFont();
    font.setBold(true);
    HSSFCellStyle style = workbook.createCellStyle();
    style.setFont(font);
    return style;
}
public void create(List<ClientUsersDiscountCard> usersList) throws IOException{
    HSSFWorkbook workbook = new HSSFWorkbook();
    HSSFSheet sheet = workbook.createSheet("лист 1");

    int rownum = 0;
    Cell cell;
    Row row;
    HSSFCellStyle style = createStyleForTitle(workbook);
    row = sheet.createRow(rownum);
    cell = row.createCell(0,CellType.STRING);
    cell.setCellValue("№ карты");
    //row = sheet.createRow(rownum);
    cell = row.createCell(1,CellType.STRING);
    cell.setCellValue("% скидки");
    //row = sheet.createRow(rownum);
    cell = row.createCell(2,CellType.STRING);
    cell.setCellValue("Дата выдачи");
    //row = sheet.createRow(rownum);
    cell = row.createCell(3,CellType.STRING);
    cell.setCellValue("Магазин выдачи");
    //row = sheet.createRow(rownum);
    cell = row.createCell(4,CellType.STRING);
    cell.setCellValue("ФИО Клиента");
    //row = sheet.createRow(rownum);
    cell = row.createCell(5,CellType.STRING);
    cell.setCellValue("Телефон");
    //row = sheet.createRow(rownum);
    cell = row.createCell(6,CellType.STRING);
    cell.setCellValue("Сумма покупок");
    //row = sheet.createRow(rownum);
    cell = row.createCell(7,CellType.STRING);
    cell.setCellValue("SMS рассылка");
    for (ClientUsersDiscountCard user: usersList
         ) {
        rownum++;
        row = sheet.createRow(rownum);
        cell = row.createCell(0, CellType.STRING);
        cell.setCellValue(user.getNumber_card());
        cell = row.createCell(1, CellType.NUMERIC);
        cell.setCellValue(user.getProcent_discont());
        cell = row.createCell(2, CellType.STRING);
        cell.setCellValue(user.getDate_create());
        cell = row.createCell(3, CellType.STRING);
        cell.setCellValue(user.getMagazine());
        cell = row.createCell(4, CellType.STRING);
        cell.setCellValue(user.getFio_client());
//////     Вот тут long
        cell = row.createCell(5);
        cell.setCellValue(user.getTelephone());
////         Тут float
        cell = row.createCell(6, CellType.NUMERIC);
        cell.setCellValue(user.getAll_sum());
        cell = row.createCell(7, CellType.BOOLEAN);
        cell.setCellValue(user.getNumber_card());
    }
    for (int i = 0; i <7; i++){
        sheet.autoSizeColumn(i);
    }
    try {
        File file = new File("C:/demo/employee.xls");
        file.getParentFile().mkdirs();
        FileOutputStream outFile = new FileOutputStream(file);
        workbook.write(outFile);
        System.out.println("Created file: " + file.getAbsolutePath());
    }catch (IOException e){
        e.printStackTrace();
    }

}

}

Answer 1

Для Long нужно тоже указывать тип CellType.NUMERIC, но ещё можно указывать формат Numeric в style, создайте отдельный style для float:

CellStyle decimalStyle = workbook.createCellStyle();  
decimalStyle.setDataFormat(workbook.getCreationHelper().createDataFormat().getFormat("0.00"));

и затем для long делайте:

cell = row.createCell(5, CellType.NUMERIC);
cell.setCellStyle(style);
cell.setCellValue(user.getTelephone());

А для float:

cell = row.createCell(6, CellType.NUMERIC);
cell.setCellStyle(decimalStyle);
cell.setCellValue(user.getAll_sum());
READ ALSO
Посимвольный консольный ввод через Stream Java 8

Посимвольный консольный ввод через Stream Java 8

Как можно преобразовать консольный ввод Systemin в Stream из символов

313
Элементарный пример лямбда выражения

Элементарный пример лямбда выражения

В книге Шилдта приводится элементарный пример использования лямбда-выражения, где метод

270
Как передать один аргумент в метод вместо 3 определенных

Как передать один аргумент в метод вместо 3 определенных

Когда пытаюсь скомпилировать код, вижу такую ошибку: "Expected 3 arguments, but got 1" на мутод "refactorStudent" и "refactorInfo", подскажите как пофикситьДа и вообще,...

295