Well!! As nan experienced (old?) developer I would never (cough, cough) make
a mistake like that.
Very easy done Jeff when you are playing around with code. Yesterday someone
asked me to look at some old code and I found it was a horrible mess because
I had been trying to add further features in my spare time so to speak. Took
me quite a while to undo the 'improvements'; we all do it.
Best of luck with POI and if you need any help in the future, just drop an
email to the list and I am sure someone will reply.
Yours
Mark B
Jeff Spence wrote:
>
> Hello,
>
> All is well. At some point during my experimentation I commented out
> some of the code because
> I was having a few issues, and inadvertently deleted them. When you
> mentioned create() in your last
> post I remembered not seeing that method in what I had in my program,
> and looked back at your code,
> discovered my mistake, and restored the missing lines. Anyway,
> everything seems to be working fine,
> I now have output from the worksheet ect.
>
> Also, thank you for your generosity in explaining all of this.
> Jeff.
>
>
>
>
>
> MSB wrote:
>> I think that I may not have explained my self too well Jeff. When I was
>> talking about openxml4j, I did not mean that it was in the archive but
>> that
>> whilst the archives names may change between version of POI, that part of
>> the name is constant. For example, I have just updated to version 3.5
>> beta 6
>> and the name of the archive is now 'openxml4j-1.0-beta.jar' not
>> 'openxml4j-bin-alpha-080407.jar', just the openxml4j part of the name is
>> common to both. In like manner the name of the POI archive will change to
>> reflect the version and build date. Now I am using
>> 'poi-3.5-beta6-20090530.jar' whilst in the example I posted to you it was
>> 'poi-3.5-beta1-20080718.jar'.
>>
>> I must admit to being concerned about the message you are receiving, the
>> only source of a null pointer there could be if the workbook variable
>> contained a null variable. Can you add a line of code for me please Jeff?
>> Please enter the following immediately before the numSheets =
>> workbook.getNumberOfSheets() line;
>>
>> if(workbook == null) {
>> System.out.println("Yes, you got a null workbook.");
>> }
>>
>> As far as I am aware the WorkbookFactory.create() method either returns
>> an
>> HSSXWorkbook, an XSSFWorkbook or it throws an exception, it cannot return
>> a
>> null value.
>>
>> Also, I forgot to send you another email earlier. I found out where the
>> XSSF............ classes are. they are stored in an archive called
>> 'poi-ooxml-3.5-beta6-20090530.jar' which was called
>> 'poi-ooxml-3.5-beta1-20080718.jar' in the code I sent you earlier due to
>> differing versions again.
>>
>>
>> Jeff Spence wrote:
>>
>>> Hi,
>>>
>>> I ran the example. Wrote to and read from disc. Still studying and
>>> playing around.
>>> I can't find the openxml4j in the jar though, still seems to work fine
>>> with one exception.
>>> (no pun intended) NullPointerFound on the following line:
>>>
>>> numSheets = workbook.getNumberOfSheets();
>>>
>>>
>>> Thanks,
>>> Jeff.
>>>
>>>
>>>
>>>
>>>
>>> MSB wrote:
>>>
>>>> Hello again Jeff,
>>>>
>>>> Firstly, I must admit that I am not too sure about exactly where the
>>>> XSSF..... classes are. Having said that you do not need to to worry
>>>> about
>>>> it
>>>> if you write code to the interfaces defined in the ss.usermodel
>>>> package.
>>>> The
>>>> other benefit of this is that it also does not matter if, at runtime,
>>>> the
>>>> application finds itself having to deal with files in both the binary
>>>> (HSSF)
>>>> and OpenXML (XSSF) formats.
>>>>
>>>> Yesterday, I wrote a little bit of code that follows this pattern. In
>>>> order
>>>> to compile and run it however, you will have to set your classpath
>>>> appropriately. I compiled the code against 3.5 beta 1 and so added the
>>>> following archives into my class path;
>>>>
>>>> poi-3.5-beta1-20080718.jar
>>>> poi-ooxml-3.5-beta1-20080718.jar
>>>> openxml4j-bin-alpha-080407.jar
>>>> xmlbeans-2.3.0.jar
>>>> log4j-1.2.13.jar
>>>> dom4j-1.6.1.jar
>>>> ooxml-schemas.jar
>>>>
>>>> It is highly likely that the exact names of the archives you have
>>>> downloaded
>>>> will differ, do not be too concerned, just make sure that most of the
>>>> name
>>>> is similar - i.e. the openxml4j part of the name for the
>>>> openxml4j-bin-alpha-080407.jar archive.
>>>>
>>>> This is the code;
>>>>
>>>> import java.io.File;
>>>> import java.io.FileInputStream;
>>>> import java.util.Iterator;
>>>>
>>>> import org.apache.poi.ss.usermodel.WorkbookFactory;
>>>> import org.apache.poi.ss.usermodel.Workbook;
>>>> import org.apache.poi.ss.usermodel.Sheet;
>>>> import org.apache.poi.ss.usermodel.Row;
>>>> import org.apache.poi.ss.usermodel.Cell;
>>>>
>>>> public class Main {
>>>>
>>>> /**
>>>> * @param args the command line arguments
>>>> */
>>>> public static void main(String[] args) {
>>>>
>>>> File inputFile = null;
>>>> FileInputStream fileIStream = null;
>>>> Workbook workbook = null;
>>>> Sheet sheet = null;
>>>> Row row = null;
>>>> Cell cell = null;
>>>> Iterator<Row> rowIterator = null;
>>>> Iterator<Cell> cellIterator = null;
>>>> int numSheets = 0;
>>>>
>>>> try {
>>>> inputFile = new File("C:/temp/sample.xlsx");
>>>> fileIStream = new FileInputStream(inputFile);
>>>> // Use the WorkbookFactory create() factory method to get
>>>> // either an HSSFWorkbook or XSSFWorkbook depending on
>>>> // the file type wrapped in the FileInputStream
>>>> workbook = WorkbookFactory.create(fileIStream);
>>>>
>>>> // Lets see what we got, an XSSF or HSSFWorkbook
>>>> if(workbook instanceof
>>>> org.apache.poi.hssf.usermodel.HSSFWorkbook) {
>>>> System.out.println("You got an HSSFWorkbook");
>>>> }
>>>> else {
>>>> System.out.println("You got an XSSFWorkbook");
>>>> }
>>>> // Get the number of sheets
>>>> numSheets = workbook.getNumberOfSheets();
>>>> // Iterate through each sheet
>>>> for(int i = 0; i < numSheets; i++) {
>>>> // Get the sheet
>>>> sheet = workbook.getSheetAt(i);
>>>> // Get an iterator to work through the rows on the
>>>> sheet
>>>> rowIterator = sheet.iterator();
>>>> // Iterate through the rows
>>>> while(rowIterator.hasNext()) {
>>>> row = rowIterator.next();
>>>> System.out.println("Processing row number: " +
>>>> row.getRowNum());
>>>> // Get an iterator to work through the cells on the
>>>> row
>>>> cellIterator = row.iterator();
>>>> // Iterate through the cells
>>>> while(cellIterator.hasNext()) {
>>>> cell = cellIterator.next();
>>>> // Just print out the num,ber of the cell
>>>> // and the String representatin of the
>>>> instance.
>>>> System.out.println("Cell: " +
>>>> cell.toString());
>>>> }
>>>> }
>>>> }
>>>> }
>>>> catch(Exception ex) {
>>>> System.out.println("Caught an: " +
>>>> ex.getClass().getName());
>>>> System.out.println("Message: " + ex.getMessage());
>>>> System.out.println("Stacktrace follows.........");
>>>> ex.printStackTrace(System.out);
>>>> }
>>>> finally {
>>>> if(fileIStream != null) {
>>>> try {
>>>> fileIStream.close();
>>>> }
>>>> catch(Exception ex) {
>>>> // I G N O R E //
>>>> }
>>>> }
>>>> }
>>>> }
>>>> }
>>>>
>>>> which does not do anything exciting - iterates through all of the
>>>> sheets
>>>> in
>>>> a workbook, the rows on a sheet and the cells on a row then merely
>>>> calls
>>>> the
>>>> toString() method once it has a cell reference in hand. You should be
>>>> able
>>>> to call it with both binary and OpenXML Excel files by simply changing
>>>> this
>>>> line to point to your file;
>>>>
>>>> inputFile = new File("C:/temp/sample.xlsx");
>>>> //inputFile = new File("C:/temp/sample.xls");
>>>>
>>>> That only deals with reading existing files however. If you want to see
>>>> how
>>>> a similar technique can be used to create a file, then take a look
>>>> here;
>>>>
>>>> http://poi.apache.org/spreadsheet/converting.html
>>>>
>>>> and in particular, the section titled 'New, generic SS Usermodel Code'.
>>>>
>>>> I accept that does not answer your original question, which I think has
>>>> more
>>>> to do with dependencies and your classpath settings, but it will get
>>>> you
>>>> working whilst I have a dig around to see where the XSSF.........
>>>> classes
>>>> are.
>>>>
>>>> PS do not be surprised when you run the code to see two warnings from
>>>> the
>>>> logging system.
>>>>
>>>> log4j:WARN No appenders could be found for logger (org.openxml4j.opc).
>>>> log4j:WARN Please initialize the log4j system properly.
>>>>
>>>> They can safely be ignored for now.
>>>>
>>>>
>>>>
>>>> Jeff Spence wrote:
>>>>
>>>>
>>>>> I tried the following with success:
>>>>>
>>>>> HSSFWorkbook wb = new HSSFWorkbook();
>>>>> FileOutputStream fileOut = new
>>>>> FileOutputStream("C:\\workbook.xls");
>>>>> wb.write(fileOut);
>>>>> fileOut.close();
>>>>>
>>>>> But the following without success (narrowed down to this line I
>>>>> think).
>>>>>
>>>>> XSSFWorkbook wb = new XSSFWorkbook();
>>>>>
>>>>> ...this error message.
>>>>>
>>>>> java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException
>>>>>
>>>>> ...tried these imports.
>>>>>
>>>>> import org.apache.poi.xssf.usermodel.XSSFWorkbook;
>>>>> import org.apache.poi.xssf.usermodel.*;
>>>>>
>>>>> I don't think it's the path because, as stated above, they both
>>>>> derive from ss.usermodel.
>>>>>
>>>>> Anyone have a suggestion?
>>>>>
>>>>> Thanks,
>>>>> Jeff.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: [email protected]
>>>>> For additional commands, e-mail: [email protected]
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>>
>>>
>>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
>
--
View this message in context:
http://www.nabble.com/HSSF---XSSF-tp23788082p23810587.html
Sent from the POI - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]