Ali*_*ead 2 testing automation scala apache-poi
我正在编写一个快速测试,向用户注册电子表格中的数据.
想法是转到网站>点击注册>阅读excel行A1和B1的电子邮件和密码>在注册网站上使用此数据>完成注册>注销>注册一个新用户,其中包含来自行A2和B2的信息>继续直到电子表格中的行为空.
我已经设法使用随机用户信息自动化注册过程,现在我只需要使用从电子表格中获取的特定电子邮件和密码.
我曾尝试使用Apache Poi,但不确定如何使用它以及如何使其循环直到电子表格结束.
这是我到目前为止,但我认为这是错的:
val myData = new File("/desktop/files.file.xmls")
val fis = new FileInputStream(myData)
val myWorkbook = new HSSFWorkbook(fis)
val mySheet = myWorkbook.getSheetAt(0)
val rowIterator = mySheet.iterator()
while(rowIterator.hasNext){
val row = rowIterator.next()
val cellIterator = row.cellIterator()
while(cellIterator.hasNext) {
val cell = cellIterator.next()
cell.getCellType match {
case Cell.CELL_TYPE_STRING => {
print(cell.getStringCellValue + "\t")
}
case Cell.CELL_TYPE_NUMERIC => {
print(cell.getNumericCellValue + "\t")
}
case Cell.CELL_TYPE_BLANK => {
print("null" + "\t")
}
}
}
println("")
Run Code Online (Sandbox Code Playgroud)
就像一张纸条,我正在使用poi 3.17.所以我的build.sbt有
"org.apache.poi" % "poi" % "3.17"
"org.apache.poi" % "poi-ooxml" % "3.17"
Run Code Online (Sandbox Code Playgroud)
在里面.如果您使用的是其他版本,请在问题中说明,我会更新我的答案.
这是我的示例excel文件:
首先,进口:
import org.apache.poi.ss.usermodel.{ DataFormatter, WorkbookFactory, Row }
import java.io.File
import collection.JavaConversions._ // lets you iterate over a java iterable
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用WorkbookFactory拉入文件并获取工作表:
val f = new File("Example.xlsx")
val workbook = WorkbookFactory.create(f)
val sheet = workbook.getSheetAt(0) // Assuming they're in the first sheet here.
Run Code Online (Sandbox Code Playgroud)
接下来,如果您注意Sheet的类型,
您会注意到它实现了Iterable<Row>,这意味着您可以使用for它来遍历所有行:
for (row <- sheet) {
// Do things
}
Run Code Online (Sandbox Code Playgroud)
只要你不需要从循环中返回任何东西.如果你需要这样做,你应该能够做到
sheet.map { row => }
Run Code Online (Sandbox Code Playgroud)
接下来,要获得格式化程序所需的单元格的实际值:
val formatter = new DataFormatter()
Run Code Online (Sandbox Code Playgroud)
然后拉A柱,您拨打getCell的row索引0:
val maybeA = Option(row.getCell(0, Row.MissingCellPolicy.RETURN_BLANK_AS_NULL)) // lift null to None
val maybeB = Option(row.getCell(1, Row.MissingCellPolicy.RETURN_BLANK_AS_NULL))
Run Code Online (Sandbox Code Playgroud)
那么我假设你只想做一些事情,如果你有这两个单元格,在这种情况下你可以利用这两个来理解:
val maybeEmailAndPass = for {
a <- maybeA
b <- maybeB
} yield {
val email = formatter.formatCellValue(a)
val pass = formatter.formatCellValue(b)
(email, pass)
}
println(maybeEmailAndPass)
Run Code Online (Sandbox Code Playgroud)
然后,如果你有什么东西,你可以做任何你想做的事情.
而上面的例子就是我的例子
Some((Row1 Email,Row1 Pass))
Some((Row2 Email,Row2 Pass))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5626 次 |
| 最近记录: |