Java - IF 函数与 OR 使用数组 - Apache POI
Java - IF Function with OR using an array - Apache POI
我有一个数组,它的长度会随着用户输入新数字而改变,并且当条件为 TRUE 时,我需要单元格的值为 0。例如,用户在数组中输入:“201”和“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] 这两个空格,但在用户输入数字时自动执行多次?
您必须遍历数组并为数组中的每个值创建一个 'entry' (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-streams,您可以简单地用 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();
我有一个数组,它的长度会随着用户输入新数字而改变,并且当条件为 TRUE 时,我需要单元格的值为 0。例如,用户在数组中输入:“201”和“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] 这两个空格,但在用户输入数字时自动执行多次?
您必须遍历数组并为数组中的每个值创建一个 'entry' (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-streams,您可以简单地用 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();