JXLバージョン=2.6.12
JBEHAVEバージョン:3.6.8
EXCEL:MS EXCEL 2007
以下のようにクラスパスからJbehaveステップクラスのExcelを読み取り、ArrayIndexOutOfBoundsExceptionを取得しています。同じコードがスタンドアロンのJavaコードで機能しています
ワークブックワークブック=null; InputStreamストリーム=this.getClass()。getClassLoader()。getResourceAsStream( "test.xls"); workbook = Workbook.getWorkbook(stream); シートシート=workbook.getSheet(0); セルa1=sheet.getCell(0,0);
ただし、ファイルシステムパスを使用してJbehave ProjectでExcelを読み取ると、Excelのシートからコンテンツを読み込んで読み取ることができます。
workbook = Workbook.getWorkbook(new File( "test.xls"));
以下はスタックトレースです。
java.lang.ArrayIndexOutOfBoundsException:39181 at jxl.read.biff.Record。(Record.java:79)at jxl.read.biff.File.next(File.java:181)at jxl.read.biff.WorkbookParser.parse (WorkbookParser.java:569)at jxl.Workbook.getWorkbook(Workbook.java:271)at jxl.Workbook.getWorkbook(Workbook.java:253)at org.teststepgiven.steps.Test.test(Test.java:33) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method .invoke(Method.java:597)at org.jbehave.core.steps.StepCreator $ ParameterizedStep.perform(StepCreator.java:537)atorg.jbehave.core.embedder。StoryRunner $ FineSoFar.run(StoryRunner.java:477)at org.jbehave.core.embedder.StoryRunner.runStepsWhileKeepingState(StoryRunner.java:457)at org.jbehave.core.embedder.StoryRunner.runScenarioSteps(StoryRunner.java:421) org.jbehave.core.embedder.StoryRunner.runCancellable(StoryRunner.java:297)at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:211)at org.jbehave.core.embedder.StoryRunner.run (StoryRunner.java:172)at org.jbehave.core.embedder.StoryManager $ EnqueuedStory.call(StoryManager.java:229)at org.jbehave.core.embedder.StoryManager $ EnqueuedStory.call(StoryManager.java:201)at java.util.concurrent.FutureTask.run(FutureTask.java:138)at java.util.concurrent.java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:303)at java.util.concurrent.FutureTask.run(FutureTask.java:138)at java.util.concurrentThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908)at java.lang.Thread.run(Thread.java:662)