poi-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bugzi...@apache.org
Subject DO NOT REPLY [Bug 19083] New: - Error Opening Excel File
Date Wed, 16 Apr 2003 17:52:58 GMT
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=19083>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=19083

Error Opening Excel File

           Summary: Error Opening Excel File
           Product: POI
           Version: 1.0.2
          Platform: Other
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Major
          Priority: Other
         Component: HSSF
        AssignedTo: poi-dev@jakarta.apache.org
        ReportedBy: fy7175@sbc.com
                CC: fy7175@sbc.com


Hi, 

This bug is for POI HSSF project (in both release versions and most recent dev 
versions).

I use HSSFWorkbook to create 5 spreadsheets and save string values
to these 5 spreadsheets in a single Excel file. The Java program runs ok 
without any error. However, when I open the Excel file manually from my 384M 
RAM NT machine I receive "Not enough memory" message from Excel 97. I try to 
open the same file from 512M or above RAM W2K machine I get "Errors were 
detected but Microsoft was able to open the file by making repairs" message. In 
both cases, I look at the file opened in Excel 97, it seems that all data were 
there (there may have something corrupted that I did not notice). So why I 
still receive the error messages and  how do I get rid of the error messages?

If I create only one or two spreadsheets of above five at a time, I will not
receive any error message when I manually open the Excel file. I start to 
receive above error messages when I try to create three or more of them. 

I attached my source codes here.


Thanks,

Feng

-------------------------------------------------------------------------------

import java.lang.reflect.*;
import java.util.*;
import java.io.*;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.poifs.filesystem.*;


/**
 *
 * =============================================================================
 * Description: This agent converts a table or set of tables into an Excel file,
 * 		which the user can then save on their hard drive.
 *
 */
public class HSSF
{
	
	private String fileName  = null;
	
	
// =============================================================================
	public HSSF(String fileName)
		throws IOException 
		
    	{
    		this.fileName = fileName;
    	}

	
// =============================================================================
	public void writeExcelSpreadsheetOut()
    	{
    	
    		FileOutputStream lOutputStream = null; 
    		BufferedOutputStream lBufferedStream = null;
    	
    		try
    		{
	    		// Create a new file
	    		// throws FileNotFoundException
	    		lOutputStream = new FileOutputStream( 
	    			this.fileName );
				
			// Create a buffered output stream
			lBufferedStream = new BufferedOutputStream( 
				lOutputStream );
				
			// create a new workbook
			HSSFWorkbook lWorkbook = new HSSFWorkbook( );
			
			// Create the sheets in the workbook.
			writeOneTable( lWorkbook );			
			writeOneTable( lWorkbook );
			writeOneTable( lWorkbook  );
			writeOneTable( lWorkbook  );
			writeOneTable( lWorkbook  );
			
			// Set the sheet names.
			lWorkbook.setSheetName( 0, "PB/NB" ); 
			lWorkbook.setSheetName( 1, "SWBT" ); 
			lWorkbook.setSheetName( 2, "SNET" ); 
			lWorkbook.setSheetName( 3, "AIT" ); 
			lWorkbook.setSheetName( 4, "Revenue Summary" ); 

			// throws IOException
			lWorkbook.write( lBufferedStream );
					
	   	}
    		catch ( FileNotFoundException e )
    		{
    			e.printStackTrace();
    		}
    	
    		catch ( IOException e )
    		{
    			e.printStackTrace();
    		}
    	
    		finally
        	{			
        		// Close the streams.
        		if ( lBufferedStream != null )
            		{
            			try
                		{
                			// throws IOException
                			lBufferedStream.close( );
               			}
                		catch ( IOException e )
                		{
                   			e.printStackTrace();
               	 		}
            		}
            
            		// Close the streams.
            		if ( lOutputStream != null )
            		{
            			try
                		{
                			// throws IOException
                			lOutputStream.close( );
                		}
                		catch ( IOException e )
                		{
                    			e.printStackTrace();
                		}
            	
        		}
   		 }
	}
    
// =============================================================================
	private void writeOneTable(HSSFWorkbook aWorkbook)
    	{
    	    	try
    		{
    			// create a new sheet
			HSSFSheet lSheet = aWorkbook.createSheet( );
			
			int lNumberOfRows = 10;
	
			// Get the number of columns from the table.
			int lColumnCount = 90;
			
			
			// Create the first row on the sheet.
			HSSFRow lFirstRow = lSheet.createRow( ( short )0 );
				
			
			
			// Loop through the columns and write the column 
headers to the 
			// first row.
			// Make sure to calculate the width needed.
			for( int lColumnHeaderIndex = 0; lColumnHeaderIndex < 
lColumnCount;
				lColumnHeaderIndex++ )
			{
				HSSFCell lColumnCell = lFirstRow.createCell( 
					( short )lColumnHeaderIndex ); 
				
				// Create a cell style
				HSSFCellStyle lCellStyle = 
aWorkbook.createCellStyle( );
				
				// Create a font.
				HSSFFont lFont = aWorkbook.createFont( );
				
				// Set the font to have bold characteristics.
				lFont.setBoldweight( HSSFFont.BOLDWEIGHT_BOLD );
				
				
				lCellStyle.setFont( lFont );
				
				// Set this for the cell.
				lColumnCell.setCellStyle( lCellStyle );
				
					
				lColumnCell.setCellValue( "This is a Test. " );
								 
				
				// Set the correct width using the multiplier
				lSheet.setColumnWidth( ( short )
lColumnHeaderIndex, 
					(short) 2000 );
	
			}			
			
			// Write a for loop here.  Start with the second row to 
accomodate the
			// column headers in the first row.  
			// For every row, and every cell
			
			
			for( int lRowIndex = 1; lRowIndex <= lNumberOfRows; 
lRowIndex++ )
			{
				// Create a new row on the sheet.
				HSSFRow lRow = lSheet.createRow( ( short )
lRowIndex );
				
				// Loop through each column and assign to a 
cell.
				for( int lColumnIndex = 0; lColumnIndex < 
lColumnCount;	
					lColumnIndex++ )
				{	
					// Create a cell for each column
					HSSFCell lCell = lRow.createCell( ( 
short )lColumnIndex ); 
						
					// Fill the cell with data.  We get 
this from the table and not
					// the model since we are representing 
what the user sees on 
					// the screen.
						
					lCell.setCellValue( "123456" ); 
				}		
			}
			
			
    	}
  	catch ( Exception e )
    	{
    		e.printStackTrace();
    	}
    }


    public static void main(String [] args)
    {

    	try
	{
		System.out.println("Start creating xls file.");
		HSSF hssf = new HSSF("MochaTest.xls");
		System.out.println("In process...");
		hssf.writeExcelSpreadsheetOut();
		System.out.println("File created!");
	}
	catch (Exception e )
	{
	   	e.printStackTrace();
    	}
    }

}

Mime
View raw message