提问者:小点点

如何格式化合并单元格作为货币在Excel使用java?


我已经合并使用apache poi和java单元格,但我希望这些合并的单元格格式为货币。

合并代码中的单元格后,我添加了cellstyle. setDataformat((短)8);但是当我打开excel时,它没有显示为货币格式。它显示为一般。

你能分享一个工作代码来合并一个数据格式为货币的单元格吗?

提前谢谢你。


共1个答案

匿名用户

从你的问题中并不清楚这里到底有什么问题。无论是否在合并区域中,对具有数字格式的单元格都没有特殊要求。

需要知道的是,合并区域只显示整个合并区域中左上角的单元格。这意味着使用整个合并区域中左上角单元格的单元格值和单元格样式。

下面是一个最小的、可重复的示例来说明这一点。

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


class CreateExcelMergedCellsCurrencyFormat {

 public static void main(String[] args) throws Exception {
     
  Object[][] data = new Object[][] {
   new String[] {"Name", "va", "lu", "es"},
   new Object[] {"a", 123.456d, null, null},
   new Object[] {"b", 0, null, null},
   new Object[] {"c", -123.456d, null, null},
   new Object[] {"d", 1000000L, null, null},
   new Object[] {"e", -1000000, null, null}   
  };

  int firstRow = 3;
  int firstCol = 2;
  int mergeFromCol = firstCol + 1;
  int mergeToCol = firstCol + 3;
  
  try (Workbook workbook = new XSSFWorkbook(); 
       FileOutputStream fileout = new FileOutputStream("./Excel.xlsx") ) {

   CellStyle currencyStyle = workbook.createCellStyle();
   currencyStyle.setDataFormat(workbook.createDataFormat().getFormat(BuiltinFormats.getBuiltinFormat(8)));

   Sheet sheet = workbook.createSheet();
   
   int r = firstRow;
   for (Object[] rowData : data) {
    Row row = sheet.createRow(r);
    int c = firstCol;
    for (Object cellValue : rowData) {
     Cell cell = row.createCell(c);
     if (cellValue instanceof String) {
      cell.setCellValue((String)cellValue); 
     } else if (cellValue instanceof Number) {
      cell.setCellValue(((Number)cellValue).doubleValue()); 
      cell.setCellStyle(currencyStyle);
     }
     c++;
    }
    if (r > firstRow) sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum(), mergeFromCol, mergeToCol));
    r++;
   }
      
   workbook.write(fileout);
  }

 }
}