Hello,

I've just found POI so I am quite new to using it (and I'm learning Java as I go).

Anyways, My particular use case is that I need to extract a byte[] of an object inserted into an office document and apply some logic to the byte[] (I'm looking for embedded PE files). I have a test spreadsheet where I embedded notepad.exe to test with.

The following is my code:

package cs.harvester.office;

import java.util.List;

import org.apache.poi.hssf.eventusermodel.HSSFListener;
import org.apache.poi.hssf.record.CommonObjectDataSubRecord;
import org.apache.poi.hssf.record.EmbeddedObjectRefSubRecord;
import org.apache.poi.hssf.record.ObjRecord;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.SubRecord;
import com.sun.org.apache.xml.internal.security.utils.Base64;



public class EventExample implements HSSFListener {

    @Override
    public void processRecord(Record record) {
        switch (record.getSid()) {
            case ObjRecord.sid:
                ObjRecord objRec = (ObjRecord)record;

                System.out.println("Obj: ");
                //
                List<SubRecord> subRecords = objRec.getSubRecords();
                for(SubRecord subRecord : subRecords) {
System.out.print(" SubRecord: " + subRecord.getClass().getSimpleName() + ": ");
                    System.out.println(subRecord.serialize().length);

                    if(subRecord instanceof CommonObjectDataSubRecord) {
CommonObjectDataSubRecord tmp = (CommonObjectDataSubRecord)subRecord;

} else if (subRecord instanceof EmbeddedObjectRefSubRecord){ EmbeddedObjectRefSubRecord tmp = (EmbeddedObjectRefSubRecord)subRecord; System.out.println(" EmbeddedObject: " + tmp.getOLEClassName() + " Stream ID: " + tmp.getStreamId() + " ObjectData Length: " + tmp.getObjectData().length); System.out.println(" EmbeddedObject: " + Base64.encode(tmp.getObjectData()));
                    }
                }
                break;
            default:
                System.out.println(record.getClass().getSimpleName());
        }
    }
}


The problem I have is that the ObjectData byte[] is always length 0. How should I go about getting the correct byte[] for the object?

Thanks,
Raindog

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to