首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将类为“jxl.biff.EmptyCell@47821b4b”的对象“jxl.biff.EmptyCell”转换为“jxl.DateCell”

不能将类为“jxl.biff.EmptyCell@47821b4b”的对象“jxl.biff.EmptyCell”转换为“jxl.DateCell”
EN

Stack Overflow用户
提问于 2016-02-21 14:29:10
回答 1查看 960关注 0票数 0

My域模型

代码语言:javascript
复制
package sample

class Person {

String lastName
String firstName
Date dateOfBirth
int numberOfChildren
static constraints = {
}
} 

我的控制器

代码语言:javascript
复制
package sample

/*imported libraries.*/

import jxl.DateCell
import jxl.LabelCell
import jxl.NumberCell
import jxl.Sheet
import jxl.Workbook

class PersonController {
private final static int COLUMN_LAST_NAME = 0
private final static int COLUMN_FIRST_NAME = 1
private final static int COLUMN_DATE_OF_BIRTH = 2
private final static int COLUMN_NUMBER_OF_CHILDREN = 3

 def index() {
    redirect(action: "list", params: params)
}

def list(Integer max) {
    params.max = Math.min(max ?: 10, 100)
    [personInstanceList: Person.list(params), personInstanceTotal: Person.count()]
}

def upload() { }


    def doUpload() {
    def file = request.getFile('file')
    Workbook workbook = Workbook.getWorkbook(file.getInputStream());
    Sheet sheet = workbook.getSheet(0);

    // skip first row (row 0) by starting from 1
    for (int row = 1; row < sheet.getRows(); row++) {
        LabelCell lastName = sheet.getCell(COLUMN_LAST_NAME, row)
        LabelCell firstName = sheet.getCell(COLUMN_FIRST_NAME, row)
        DateCell dateOfBirth = sheet.getCell(COLUMN_DATE_OF_BIRTH, row)
        NumberCell numberOfChildren = sheet.getCell(COLUMN_NUMBER_OF_CHILDREN, row)

        new Person(lastName:lastName.string , firstName:firstName.string ,
                dateOfBirth:dateOfBirth.date, numberOfChildren:numberOfChildren.value).save()

    }
    redirect (action:'list')
}


} 

我想从grails数据库中的.xls文件中加载数据,问题是xls文件加载数据没有被保存,我得到以下错误。无法将类'jxl.biff.EmptyCell@47821b4b‘和类'jxl.biff.EmptyCell’转换为类'jxl.DateCell‘。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-21 15:02:50

看起来,在某些情况下,dateOfBirth没有任何价值。在这种情况下,空值到目前为止无法转换。这就是抛出can not cast class 'jxl.biff.EmptyCell' to class 'jxl.DateCell'的原因。

dateOfBirth单元格为空时,请确保将dataOfBirth设置为null。如果您对dateOfBirth字段有约束,它将自动抛出一个exception

constraints意味着Person类中的所有属性都是必需的。显然,Excel表中有空字段,这会导致整个进程停止。如果您仍然希望忽略那些带空字段的行,并且仍然处理好的行,则可以执行以下一项或两项操作:

检查每个字段是否为空,并调用继续处理下一行。这将是我的建议。

和/或

在循环中使用try/catch包装:

代码语言:javascript
复制
    for (int row = 1; row < sheet.getRows(); row++) {
        try{
                LabelCell lastName = sheet.getCell(COLUMN_LAST_NAME, row)
                LabelCell firstName = sheet.getCell(COLUMN_FIRST_NAME, row)
                DateCell dateOfBirth = sheet.getCell(COLUMN_DATE_OF_BIRTH, row)
                NumberCell numberOfChildren = sheet.getCell(COLUMN_NUMBER_OF_CHILDREN, row)
new Person(lastName:lastName.string , firstName:firstName.string ,
                        dateOfBirth:dateOfBirth.date, numberOfChildren:numberOfChildren.value).save(failOnError: true)
        }catch(e){
          // log the error and the row number so that you know which row failed
        }

    }

要更好地理解哪个字段验证失败,请编写正确的字段验证错误消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35537346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档