我有一個陣列,當用戶輸入新數字時,它的長度會改變,當條件為 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] 但自動與用戶輸入數字一樣多次?
uj5u.com熱心網友回復:
您必須遍歷陣列并為陣列中的每個值創建一個“條目”(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 回圈替換流:
StringJoiner joiner = new StringJoiner( "," );
for( int val : arr )
{
String format = String.format( "N%d=%d", current, val );
joiner.add( format );
}
String joined = joiner.toString();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/466523.html
標籤:爪哇 数组 if 语句 excel公式 apache-poi
上一篇:通過==運算子從哈希圖中獲取元素,而不是java中的.equal
下一篇:com.typesafe.config.ConfigException$Missing:reference.conf:未找到鍵“默認”的配置設定