java - 具有自定义约束的 apache poi

标签 java

我想使用 apache-poi 和自定义约束来运行这个自定义公式

=OR(IF(ISERROR(FIND(".",A1)),LEN(A1)>0,LEN(MID(A1,FIND(".",A1)+1,25))<3))

那么知道如何做到这一点吗?代码如下...

公共(public)类 PoiWriteExcelFile {

public static void main(String[] args) {
    try {
        FileOutputStream fileOut = new FileOutputStream("c:/poi-test.xls");
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet worksheet = workbook.createSheet("POI Worksheet");
        HSSFCellStyle style = workbook.createCellStyle();
        HSSFDataFormat df = workbook.createDataFormat();
        CellRangeAddressList addressList = new CellRangeAddressList(0, 4, 3, 3);
        DataValidationHelper helper = worksheet.getDataValidationHelper();
//            helper.create
            helper.createFormulaListConstraint("OR(IF(ISERROR(FIND('.',A1)),LEN(A1)>0,LEN(MID(A1,FIND('.',A1)+1,25))<3))");
            DVConstraint dvConstraint = DVConstraint.createNumericConstraint(ValidationType.DECIMAL, DVConstraint.OperatorType.BETWEEN, "1.00", "1000000000000.00");
            dvConstraint.createCustomFormulaConstraint("OR(IF(ISERROR(FIND('.',A1)),LEN(A1)>0,LEN(MID(A1,FIND('.',A1)+1,25))<3))");
            DataValidation dataValidation = new HSSFDataValidation(addressList,
                    dvConstraint);
            dataValidation.setSuppressDropDownArrow(false);
            worksheet.addValidationData(dataValidation);
            style.setLocked(true);
            //style.setDataFormat(workbook.createDataFormat().getFormat("0.00"));
            style.setDataFormat(df.getFormat("0.000"));
            // index from 0,0... cell A1 is cell(0,0)
        List val = new ArrayList();
        val.add("srNo");
        val.add("name");
        val.add("qty");
        val.add("price");
        val.add("total");
        val.add(1);
        val.add("a");
        val.add(100);
        val.add(0);
        val.add(0);
        val.add(2);
        val.add("b");
        val.add(1000);
        val.add(0);
        val.add(0);
        val.add(3);
        val.add("c");
        val.add(10000);
        val.add(0);
        val.add(0);
        int k = 0;
        int count = 1;
        int countt = 1;
        String formula = "";
        for (int i = 0; i < 4; i++) {
            HSSFRow row1 = worksheet.createRow(i);
            for (int j = 0; j < 5; j++) {
                HSSFCell cellA1 = row1.createCell(j);
                try {
                    //cellA1.setCellValue((Integer) val.get(j + k));
                    cellA1.setCellStyle(style);
                } catch (Exception e) {

                    cellA1.setCellStyle(style);
                }
                if (j == 4 && i != 0) {
                    count++;
                    formula = "C" + count + "*D" + (count);
                    cellA1.setCellFormula(formula);
                }
                if (j == 3 && i != 0) {
                    countt++;
                    formula = "ROUNDUP(D"+countt+",3)";
                    cellA1.setCellStyle(style);
                    cellA1.setCellFormula(formula);
                }
            }
            k = k + 5;
        }
        //worksheet.protectSheet("jogi");
        workbook.write(fileOut);
        fileOut.flush();
        fileOut.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

}

最佳答案

使用此方法org.apache.poi.hssf.usermodel.HSSFCell.setCellValue(String)。您的单元格类型应为 org.apache.poi.ss.usermodel.Cell.CELL_TYPE_FORMULA

关于java - 具有自定义约束的 apache poi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10698754/

相关文章:

java - Android NDK 库仅在运行时不加载三星 galaxy 4.0.2 手机

java - Android HttpUrlConnection 不工作

java - 从 Java 调用 Catalog 过程执行 SSIS 包

java - Scala 的 TreeSet 与 Java 的 TreeSet - 轮询?

java - 保存时跳过 Hibernate 验证

java - 使用Autowire获取spring xml中配置的sftpChannel

java - 如何根据第一个列值从二维数组的第二列获取值?

java - 在 Java 中准备 SQL 查询时如何设置整数列表

java - 我尝试在我的 rpi 上使用 jdk.dio 并得到 'no dio in java.library.path'

java - 将 wikipedia-dump 导入到 SQL 不完整