День добрый. Вопрос такого содержания использую библиотеку 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();
}
}
}
Для 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());
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости