使用 OpenNTF POI 从 Excel 获取值,但 row.getCellType() 不再有效

Getting values from Excel using OpenNTF POI, but row.getCellType() no longer working

我正在使用 UpdateSite

在 Domino 10 服务器上使用来自 OpenNTF 的最新 POI 版本

https://poi4xpages.openntf.org/

我的代码读取 Excel

中的单元格值

由于某种原因,方法 rowdata.getCell(0).getCellType() 不再有效,并且在 运行 时生成错误,因此我无法检查单元格包含的值类型。

方法 getStringCellValue()getNumericCellValue() 仅在 Excel 单元格中的值是类型,即如果我有一个包含 100 的单元格,它始终是一个数字。

在我的专栏中我有 100100a 如果我使用 100a getNumericCellValue() 生成错误。

hsCurrent.put("FILE", inputFile);
Workbook wb = ioAction.run(null, hsCurrent);
worksheet = wb.getSheetAt(0);
rowdata = worksheet.getRow(1);
kod = rowdata.getCell(0).getStringCellValue();
price = rowdata.getCell(3).getNumericCellValue();

由于 getCellType() 不工作,我需要找到另一种方法来处理我收到的错误,我如何在 java 中做到这一点。

此外,如果您知道为什么 getCellType() 有问题,请告诉我。

还请注意,所有这些方法都会检查 excel 中单元格的 而不是 它是什么类型的单元格是

如果我需要提供更多信息,请告诉我

javax.servlet.ServletException: java.lang.NoSuchMethodError: org/apache/poi/ss/usermodel/Cell.getCellType()Lorg/apache/poi/ss/usermodel/CellType; (loaded from file:/D:/Lotus/Domino/Data/domino/workspace/.config/org.eclipse.osgi/42/0/.cp/lib-maven/poi.jar by org.eclipse.osgi.internal.loader.EquinoxClassLoader@ab93247a[biz.webgate.dominoext.poi.library:1.3.1.201703140726(id=42)]) called from class com.consili.ImportExcel (loaded from xspnsf://server:0/web.nsf/WEB-INF/classes/ by com.ibm.domino.xsp.module.nsf.ModuleClassLoader$DynamicClassLoader@9b55621b). at com.ibm.xsp.webapp.FacesServlet.handleError(FacesServlet.java:690) at com.ibm.xsp.webapp.FacesServlet.renderErrorPage(FacesServlet.java:512) at com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:186) at com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138) at com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103) </values>
    <values>at com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:600) at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1352) at com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:877) at com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:820) at com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:589) at com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1336) at com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:662) at com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:482) at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357) at com.ibm.designer.runtime.domino.adapter</values>
    <values>.LCDEnvironment.service(LCDEnvironment.java:313) at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272) Caused by: java.lang.NoSuchMethodError: org/apache/poi/ss/usermodel/Cell.getCellType()Lorg/apache/poi/ss/usermodel/CellType; (loaded from file:/D:/Lotus/Domino/Data/domino/workspace/.config/org.eclipse.osgi/42/0/.cp/lib-maven/poi.jar by org.eclipse.osgi.internal.loader.EquinoxClassLoader@ab93247a[biz.webgate.dominoext.poi.library:1.3.1.201703140726(id=42)]) called from class com.consili.ImportExcel (loaded from xspnsf://server:sweb.nsf/WEB-INF/classes/ by com.ibm.domino.xsp.module.nsf.ModuleClassLoader$DynamicClassLoader@9b55621b). at com.consili.ImportExcel.getImportedData(ImportExcel.java:98) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90) at sun.reflect.DelegatingMethodAccessorImpl.i</values>
    <values>nvoke(DelegatingMethodAccessorImpl.java:55) at java.lang.reflect.Method.invoke(Method.java:508) at com.ibm.jscript.types.JavaAccessObject.call(JavaAccessObject.java:322) at com.ibm.jscript.types.FBSObject.call(FBSObject.java:161) at com.ibm.jscript.ASTTree.ASTCall.interpret(ASTCall.java:197) at com.ibm.jscript.ASTTree.ASTVariableDecl.interpret(ASTVariableDecl.java:82) at com.ibm.jscript.ASTTree.ASTBlock.interpret(ASTBlock.java:100) at com.ibm.jscript.ASTTree.ASTIf.interpret(ASTIf.java:90) at com.ibm.jscript.ASTTree.ASTBlock.interpret(ASTBlock.java:100) at com.ibm.jscript.ASTTree.ASTTry.interpret(ASTTry.java:109) at com.ibm.jscript.ASTTree.ASTProgram.interpret(ASTProgram.java:119) at com.ibm.jscript.ASTTree.ASTProgram.interpretEx(ASTProgram.java:139) at com.ibm.jscript.JSExpression._interpretExpression(JSExpression.java:435) at com.</values>
    <values>ibm.jscript.JSExpression.access(JSExpression.java:424) at com.ibm.jscript.JSExpression.run(JSExpression.java:414) at java.security.AccessController.doPrivileged(AccessController.java:732) at com.ibm.jscript.JSExpression.interpretExpression(JSExpression.java:410) at com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:251) at com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:234) at com.ibm.xsp.javascript.JavaScriptInterpreter.interpret(JavaScriptInterpreter.java:222) at com.ibm.xsp.binding.javascript.JavaScriptMethodBinding.invoke(JavaScriptMethodBinding.java:111) at com.ibm.xsp.application.ActionListenerImpl.processAction(ActionListenerImpl.java:60) at javax.faces.component.UICommand.broadcast(UICommand.java:324) at com.ibm.xsp.component.UIEventHandler.broadcast(UIEventHandler.java:366) at com.ibm.xsp.component.UIDataPanelBase.broadcas</values>
    <values>t(UIDataPanelBase.java:400) at com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400) at com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400) at com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400) at com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400) at com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400) at com.ibm.xsp.component.UIViewRootEx.broadcast(UIViewRootEx.java:1669) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:307) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:428) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:94) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:96) </values>
    <values> at com.ibm.xsp.controller.FacesControllerImpl.execute(FacesControllerImpl.java:256) at com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:231) at com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:157) at com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:163) ... 13 more

我这样做了,它似乎有效

try{
    year = (int)rowdata.getCell(1).getNumericCellValue();
}catch(Exception e){
    year = rowdata.getCell(1).getStringCellValue();
}