Apache POI基本操作

POI中excel的基本组成部分

1.工作簿 HSSFWorkbook

    // 根据excel文件获取一个工作簿
    HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(path));
    // 创建一个新的工作簿
    HSSFWorkbook myWorkbook = new HSSFWorkbook();

2.工作表 HSSFSheet

    // 从工作簿获取第一个工作表
    HSSFSheet sheet = wb.getSheetAt(0);
    // 为当前工作簿新建一个工作表
    HSSFSheet mySheet = myWorkbook.createSheet();

3.一行 HssfRow

    // 获取已有的数据行
    HSSFRow newRow = mySheet.getRow(i);
    if (newRow == null) {
        // 创建一个新数据行
        newRow = mySheet.createRow(i);
    }

4.一个单元格 HSSFCell

    HSSFCell newCell = newRow.getCell(j);
    if (newCell == null) {
        newCell = newRow.createCell(j);
    }

还有一种特殊的单元格,合并单元格

   // 合并单元格 CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
   mySheet.addMergedRegion(new CellRangeAddress(i, i, 0, 1));

合并单元格设置值以及样式的时候,注意要设置到该合并单元格的第一个单元格。如下:

   //设置合并单元格的值
   HSSFRow newRow = mySheet.getRow(i);
   newRow.getCell(0).setCellValue(cellValue);

单元格由样式、值、公式等组成。样式包含字体/颜色/是否加粗/自动换行/数据类型等;基于此,我们可以在excel中定义好我们需要的样式(也可能是客户指定的样式,提供一个excel样例),直接拷贝过来进行设置即可。

设置列宽

HssfSheet: setColumnWidth(int columnIndex, int width) columnIndex列索引,width宽度
getColumnWidth(int columnIndex)

缩放比例

   // 设置缩放比例
   mySheet.setZoom(85);

单元格样式

   // 获取单元格原有样式
   HSSFCellStyle oldCellStyle = HssfCell: getCellStyle()
   // 创建单元格样式
   HSSFCellStyle newCellStyle = myWorkbook.createCellStyle();
   // 从已有单元格样式克隆
   newCellStyle.cloneStyleFrom(oldCellStyle)
   // 设置自动换行
   newCellStyle.setWrapText(true);
   // 为单元格设置样式
   hssfCell.setCellStyle(newCellStyle);

单元格值

hssfCell.setCellValue(T value); // 可以设置多种数据类型
excel单元格有一种数据类型叫做常规类型,这种数据类型无特定格式,但是要设置为数值时,可以将单元格数据类型设置为常规类型,同时设置值为Double类型,这样我们也能达到设置数值的目的,如下代码:

   Double dbCellValue = new Double(cellValue);
   newCell.setCellValue(dbCellValue);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,Apache POI库支持SUMIFS函数。您可以使用org.apache.poi.ss.formula.eval.forked.ForkedEvaluationSheet类来计算公式,该类是在Apache POI 3.17版本中引入的。 您可以使用以下代码示例计算SUMIFS函数: ``` import org.apache.poi.ss.formula.eval.forked.ForkedEvaluationSheet; import org.apache.poi.ss.formula.eval.forked.ForkedEvaluationWorkbook; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.util.HashMap; import java.util.Map; public class SumifsExample { public static void main(String[] args) { // Create a new workbook Workbook workbook = new XSSFWorkbook(); // Create a new sheet ForkedEvaluationSheet sheet = new ForkedEvaluationSheet(workbook.getSheet("Sheet1")); // Create a new workbook with the same sheets ForkedEvaluationWorkbook workbookWrapper = new ForkedEvaluationWorkbook(workbook); // Set up the formula String formula = "SUMIFS(A1:A10, B1:B10, \"X\", C1:C10, \">=10\")"; // Evaluate the formula sheet.setWorkbook(workbookWrapper); sheet.setRow(0, workbook.getSheet("Sheet1").getRow(0)); sheet.setRow(1, workbook.getSheet("Sheet1").getRow(1)); sheet.getCell(0, 0).setCellValue(1); sheet.getCell(0, 1).setCellValue("X"); sheet.getCell(0, 2).setCellValue(10); sheet.getCell(1, 0).setCellValue(2); sheet.getCell(1, 1).setCellValue("Y"); sheet.getCell(1, 2).setCellValue(20); sheet.getCell(2, 0).setCellValue(3); sheet.getCell(2, 1).setCellValue("X"); sheet.getCell(2, 2).setCellValue(30); Map<String, Double> values = new HashMap<>(); values.put("A1", 1.0); values.put("A2", 2.0); values.put("A3", 3.0); values.put("B1", "X"); values.put("B2", "Y"); values.put("B3", "X"); values.put("C1", 10.0); values.put("C2", 20.0); values.put("C3", 30.0); sheet.setActiveCell(0, 3); sheet.setFormula(formula); sheet.getCell(0, 3).setCellType(CellType.FORMULA); sheet.getCell(0, 3).setCachedFormulaResultType(CellType.NUMERIC); double result = sheet.getCell(0, 3).getNumericCellValue(); // Print the result System.out.println("SUMIFS result: " + result); // Close the workbook try { workbook.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 这个例子计算了A1:A10区域中,B1:B10等于"X"且C1:C10大于等于10的单元格的和。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值