如何使用grails excel导入插件读取列值?

时间:2016-02-08 16:09:09

标签: grails apache-poi xlsx

我使用Grails excel导入插件导入excel文件。

      static Map propertyConfigurationMap = [
          name:([expectedType: ExcelImportService.PROPERTY_TYPE_STRING, defaultValue:null]),
          age:([expectedType: ExcelImportService.PROPERTY_TYPE_INT, defaultValue:0])]

      static Map CONFIG_BOOK_COLUMN_MAP = [
          sheet:'Sheet1',
          startRow: 1,
          columnMap:  [
           //Col, Map-Key
           'A':'name',
           'B':'age',
          ]
         ]

我可以使用代码段检索数组列表:

def usersList = excelImportService.columns(workbook,CONFIG_USER_COLUMN_MAP)

导致

[[姓名:Mark,年龄:25],[姓名:Jhon,年龄:46],[姓名:Anil,年龄:62],[姓名:Steve,年龄:32]]

我也能通过使用usersList.get(0)来阅读每个记录[name:Mark,age:25]

如何阅读每列值? 我知道我可以读到这样的东西

String[] row = usersList.get(0)
for (String s : row)
    println s

我想知道插件是否支持任何东西,以便我可以直接读取列值而不是操纵它来获得所需的结果。

1 个答案:

答案 0 :(得分:1)

您的usersList基本上是List<Map<String, Object>>(地图列表)。您可以使用配置中给出的名称来读取列。在您的示例中,您将列A name 和列B age 命名为。因此,使用迭代示例作为基础,您可以像这样阅读每一列:

Map row = usersList.get(0)

for(Map.Entry entry : row) {
    println entry.value
}

Groovy使Object.each(Closure)

更容易实现
row.each { key, value -> 
    println value 
}

如果您想阅读特定的列值,可以采用以下几种方法:

println row.name // One
println row['name'] // Two
println row.getAt('name') // Three

提示:这些最终都会调用row.getAt('name')