所以我在Excel中有这个表
import java.io.{ByteArrayOutputStream, InputStream, OutputStream}
import com.amazonaws.services.lambda.runtime.{Context, RequestStreamHandler}
/**
* Created by alifirat on 24/04/17.
*/
class IOTConsumer extends RequestStreamHandler {
val BUFFER_SIZE = 1024 * 4
override def handleRequest(input: InputStream, output: OutputStream, context: Context): Unit = {
val bytes = toByteArray(input)
val logger= context.getLogger
logger.log("Receive following thing :" + new String(bytes))
output.write(bytes)
}
/**
* Reads and returns the rest of the given input stream as a byte array.
* Caller is responsible for closing the given input stream.
*/
def toByteArray(is : InputStream) : Array[Byte] = {
val output = new ByteArrayOutputStream()
try {
val b = new Array[Byte](BUFFER_SIZE);
var n = 0
var flag = true
while(flag) {
n = is.read(b)
if(n == -1) flag = false
else {
output.write(b, 0, n)
}
}
output.toByteArray();
} finally {
output.close();
Array[Byte]()
}
}
}
我希望能够从A列输入一个字符(或数字)和一个数字,并且有一个公式可以输出下一个数字,该数字等于或大于与输入字符匹配的行中的输入数字。
示例:在表格中,输入字符Y和数字5应该为9,这是第2行中大于5的下一个数字。
我一直试图找到索引和匹配的组合但是还没有能够让它发挥作用。我猜它应该看起来像这样:
A B C D E F
__________________
1 | X 1 5 10 Y
2 | Y 2 4 9 5
3 | Z 3 7 8
任何帮助都将不胜感激。
答案 0 :(得分:2)
答案 1 :(得分:1)
这里有一个纯粹的INDEX / MATCH版本,它在整个列上仍然很快
=IFERROR(IF(F2<INDEX(B:D,MATCH(F1,A:A,0),1),INDEX(B:D,MATCH(F1,A:A,0),1),IF(INDEX(INDEX(B:D,MATCH(F1,A:A,0),0),MATCH(F2,INDEX(B:D,MATCH(F1,A:A,0),0)))=F2,INDEX(INDEX(B:D,MATCH(F1,A:A,0),0),MATCH(F2,INDEX(B:D,MATCH(F1,A:A,0),0))),INDEX(INDEX(B:D,MATCH(F1,A:A,0),0),MATCH(F2,INDEX(B:D,MATCH(F1,A:A,0),0))+1))),"No match")
方法
(1)找到并从B:D中提取匹配的行。
(2)如果F2小于行的第一个元素,则将结果设置为等于第一个元素。
(3)使用MATCH的非精确形式,找出小于或等于F2的最后一个值(即示例中的4)。
(4)如果这等于F2,则将其作为结果
(5)如果不是,则给出下一个值作为结果(即示例中为9)。
如果F2大于行的最后一个元素,它将给出&#34;不匹配&#34;。