Java - IF函数与OR使用数组- Apache POI



我有一个数组,它的长度将随着用户输入新数字而改变,并且我需要当条件为TRUE时单元格的值为0。例如,用户输入:"201"one_answers"500";到数组中,所以公式将是=IF(OR(N2=500, N2=201),0,F2),然后=IF(OR(N3=500, N3=201),0,F3),直到最后一行。我写了这段代码但是第二个OR条件还是一样的因为I还是一样的

int arr[] = {500,201};
int i;

for (i = 0; i < arr.length; i++){
int cRow2 = 1;
int b = 2;
Row newRow2 = firstSheet.getRow(cRow2);
while (newRow2 != null) {
Cell cell3 = newRow2.createCell(12);
cell3.setCellFormula("IF(OR(N"+b+"="+arr[i]+", N"+b+"="+arr[i]+"),0,F"+b+")");
b++;
cRow2++;
newRow2 = firstSheet.getRow(cRow2);
}
}

是否有一种方法可以使用两个空格arr[0]和arr[1],但会自动按照用户输入数字的次数进行操作?

您必须遍历数组并为数组中的每个值创建一个'条目' (NX=Value)。这可以通过多种方式实现。

String joined = Arrays.stream( arr )
.mapToObj( val -> String.format( "N%d=%d", current, val ) )
.collect( Collectors.joining(",") );

在这个例子中,我使用的是一个流,它正是这样做的,并通过","的性格。结果字符串类似于"N6=500,N6=201,N6=501,N6=211"然后可以轻松地格式化为公式:

String result = String.format( "IF(OR(%s),0,F%d)", joined, b );

和完成。现在,您已经有了一个用于数组中任意数量值的公式。

用于测试的完整代码块:

int[] arr = { 500, 201, 501, 211 };
int b = 2;
while( b < 10 )
{
int current = b;
String joined = Arrays.stream( arr )
.mapToObj( val -> String.format( "N%d=%d", current, val ) )
.collect( Collectors.joining(",") );
String result = String.format( "IF(OR(%s),0,F%d)", joined, b );
b++;
System.out.println(result);
}

如果您不熟悉java流,您可以简单地将流替换为以下foreach-loop:

StringJoiner joiner = new StringJoiner( "," );
for( int val : arr )
{
String format = String.format( "N%d=%d", current, val );
joiner.add( format );
}
String joined = joiner.toString();

最新更新