cancel
Showing results for 
Search instead for 
Did you mean: 

jxl.read.biff.BiffException: Unable to recognize OLE stream at jxl.read.bif

Former Member
0 Kudos

Hi Team,

*I am trying to read excel file into webdynpro using JXL Api

I am getting the below error.*

jxl.read.biff.BiffException: Unable to recognize OLE stream at jxl.read.biff.CompoundFile

*Can any one has idea, how to resolve it, I have searched in SDN but I didn't find any solution.

If I open that excel file from desktop, its not opening directly, it is asking to select from 3 options, open this file as an XML list, As read only work book, use xml source task pane.

The below is the complete stack trace.*

in catchjxl.read.biff.BiffException: Unable to recognize OLE stream at jxl.read.biff.CompoundFile.<init>(CompoundFile.java:111) at jxl.read.biff.File.<init>(File.java:127) at jxl.Workbook.getWorkbook(Workbook.java:210) at jxl.Workbook.getWorkbook(Workbook.java:187) at pri.brm.sap.RUCFormView.onActionUploadFile(RUCFormView.java:1503) at pri.brm.sap.wdp.InternalRUCFormView.wdInvokeEventHandler(InternalRUCFormView.java:599) at com.sap.tc.webdynpro.progmodel.generation.DelegatingView.invokeEventHandler(DelegatingView.java:87) at com.sap.tc.webdynpro.progmodel.controller.Action.fire(Action.java:67) at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.doHandleActionEvent(WindowPhaseModel.java:420) at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.processRequest(WindowPhaseModel.java:132) at com.sap.tc.webdynpro.clientserver.window.WebDynproWindow.processRequest(WebDynproWindow.java:335) at com.sap.tc.webdynpro.clientserver.cal.AbstractClient.executeTasks(AbstractClient.java:143) at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doProcessing(ApplicationSession.java:321) at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessingStandalone(ClientSession.java:713) at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessing(ClientSession.java:666) at com.sap.tc.webdynpro.clientserver.session.ClientSession.doProcessing(ClientSession.java:250) at com.sap.tc.webdynpro.clientserver.session.RequestManager.doProcessing(RequestManager.java:149) at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doContent(DispatcherServlet.java:62) at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doPost(DispatcherServlet.java:53) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:401) at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:266) at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:386) at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:364) at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:1039) at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:265) at com.sap.engine.services.httpserver.server.Client.handle(Client.java:95) at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:175) at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33) at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41) at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37) at java.security.AccessController.doPrivileged(AccessController.java:219) at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:102) at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:172)

Any one has encountered similar kind problem..?

Regards,

Bala

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Hi,

Try opening this excel file in msexcel and save it .

Try uploading the same, if it works fine then the header of your excel is some how getting currupted when using the excel export.

Regards

Ayyapparaj

Former Member
0 Kudos

It works fine, If i do as suggested by you.

It meanse the the excel sheet header is getting currupted.

Then how to resolve this?

I have checked every thing, But i am finding where it is going wrong ?

Can you please help on this?

Regards,

Bala

Former Member
0 Kudos

Any help...???

Former Member
0 Kudos

Hi,

If you have any other ui elements in the form which contains the fileupload remove them try only with fileupload and see the same error exists or not.

Regards

Ayyapparaj

Former Member
0 Kudos

Hi Ayyapparaj,

Thanks for your reply.

I tried with suggestion but, still the same error.

Acually it is working fine for normal ecxcel sheet uploading.

The one which I am trying to upload is, generated excel sheet with excel export component.

First I am trying to export all the webdynpro form values into excel sheet, and upload the same using upload UI element back to Webdynpro form.

Now, the problem is coming only to the excel sheet which I have exported, not to normal excel sheet.

While, opening this generated excel sheet, it asking for three options like open this file as an XML list, As read only work book, use xml source task pane.

Now, for any excel sheet which opens as usual it's working fine.

i wrote the below code, to export webdynpor values to excel sheet.

public void exportToExcel2003( com.sap.tc.webdynpro.progmodel.api.IWDNode dataNode, java.util.Map columnInfos, java.lang.String ExcelSheetName )

{

//@@begin exportToExcel2003()

byte[] excelXMLFile;

IWDCachedWebResource cachedExcelResource = null;

//String fileName = dataNode.getNodeInfo().getName() + ".xls";

String fileName = ExcelSheetName + ".xls";

try {

// create Excel 2003 XML data as a byte array for the given context node,

// attributes and headers

excelXMLFile = toExcel(dataNode, columnInfos).getBytes("UTF-8");

// create a cached Web Dynpro XLS resource for the given byte array

// and filename

cachedExcelResource = getCachedWebResource(

excelXMLFile, fileName, WDWebResourceType.XLS);

// Store URL and file name of cached Excel resource in context.

if (cachedExcelResource != null) {

wdContext.currentContextElement().setExcelFileURL(

cachedExcelResource.getURL());

wdContext.currentContextElement().setExcelFileName(

cachedExcelResource.getResourceName());

// Open popup window with a link to the cached Excel file Web resource.

openExcelLinkPopup();

} else {

wdComponentAPI.getMessageManager().reportException(

"Failed to create Excel file from table!", true);

}

} catch (UnsupportedEncodingException e) {

wdComponentAPI.getMessageManager().reportException(

e.getLocalizedMessage(), true);

} catch (WDURLException e) {

wdComponentAPI.getMessageManager().reportException(

e.getLocalizedMessage(), true);

}

//@@end

}

private String toExcel(IWDNode dataNode, Map columnInfos) {

StringBuffer x = new StringBuffer();

String attributeName, headerName;

String entriesName = dataNode.getNodeInfo().getName();

String entryName = entriesName + "Element";

// trim given header texts, so that XML element names adhere to the

// rule 'no spaces contained'.

trimHeaderTexts(columnInfos);

x.append("<?xml version='1.0' encoding='UTF-8' standalone='no'?>\n");

x.append("<").append(entriesName).append(">\n");

for (int i = 0; i <dataNode.size(); i++) {

IWDNodeElement dataNodeElement = dataNode.getElementAt(i);

x.append("<").append(entryName).append(">\n");

for (Iterator iter = columnInfos.keySet().iterator();

iter.hasNext();

) {

attributeName = (String) iter.next();

if(dataNodeElement.index()!=1)

{

headerName = (String) columnInfos.get(attributeName);

x

.append("<")

.append(headerName)

.append(">")

.append(dataNodeElement.getAttributeValue(attributeName))

.append("</")

.append(headerName)

.append(">\n");

}

}

x.append("</").append(entryName).append(">\n");

}

x.append("</").append(entriesName).append(">\n");

return x.toString();

}

private void trimHeaderTexts(Map columnInfos) {

String attributeName, trimmedHeaderText;

for (Iterator iter = columnInfos.keySet().iterator();

iter.hasNext();

) {

attributeName = (String) iter.next();

trimmedHeaderText =

trimHeaderText((String) columnInfos.get(attributeName));

columnInfos.put(attributeName, trimmedHeaderText);

}

}

private String trimHeaderText(String headerText) {

StringBuffer newHeaderText = new StringBuffer();

String token;

StringTokenizer tokenizer = new StringTokenizer(headerText.trim());

while (tokenizer.hasMoreTokens()) {

token = tokenizer.nextToken();

newHeaderText.append(token.substring(0, 1).toUpperCase());

newHeaderText.append(token.substring(1).toLowerCase());

}

return newHeaderText.toString();

}

private IWDCachedWebResource getCachedWebResource(

byte[] file,

String name,

WDWebResourceType type) {

IWDCachedWebResource cachedWebResource = null;

if (file != null) {

cachedWebResource = WDWebResource.getWebResource(file, type);

cachedWebResource.setResourceName(name);

}

return cachedWebResource;

}

What could be the problem , pleae help me.

Regards,

Bala