> I have just been looking through the api docs and come across a class called
HSSFCellUtil. One if it's
> methods allows you to create a cell from a String and to pass a style object
in addition.

Thanks for pointing me to this.  It doesn't do what I want, but it verfies that
I can do it myself in the way I thought I'd have to.

Unfortunately, the createCell method just applies a style to the cell. 
Presumably the caller's responsible for creating the style, leaving the issue
of sharing styles unaddressed:

Here's the createCell code from HSSFCellUtil:

    public static HSSFCell createCell( HSSFRow row, int column, String value,
HSSFCellStyle style )
    {
        HSSFCell cell = getCell( row, column );

        cell.setCellValue(new HSSFRichTextString(value));
        if ( style != null )
        {
            cell.setCellStyle( style );
        }

        return cell;
    }

The other method, setCellStyleProperty kind of does what I want.
It scans all the styles in the workbook, looking for one with the property you 
asked for.  If it finds one, it uses it.  If not, it allocates a new one.
The problem with this method is that it only supports one property at a time.
So if you wanted to set font, color, data type, etc.  You'd end up creating a 
series of styles that accumulate these properties one at a time.
Only the last style would actually end up referenced by the cell, but the 
others would still be there in the workbook - kind of silly.
What I want is to create a reference style (via cloneStyleFrom?), set all the 
properties I want and then pass that in to an API that does what
setCellStyleProperty does, but based on matching all the properties in a style 
at once.

Sound right?

Here's the setCellStyleProperty code from HSSFCellUtil:

    public static void setCellStyleProperty( HSSFCell cell, HSSFWorkbook
workbook, String propertyName, Object propertyValue )
            throws NestableException
    {
        try
        {
            HSSFCellStyle originalStyle = cell.getCellStyle();
            HSSFCellStyle newStyle = null;
            Map values = PropertyUtils.describe( originalStyle );
            values.put( propertyName, propertyValue );
            values.remove( "index" );

            // index seems like what  index the cellstyle is in the list of
styles for a workbook.
            // not good to compare on!
            short numberCellStyles = workbook.getNumCellStyles();

            for ( short i = 0; i < numberCellStyles; i++ )
            {
                HSSFCellStyle wbStyle = workbook.getCellStyleAt( i );
                Map wbStyleMap = PropertyUtils.describe( wbStyle );
                wbStyleMap.remove( "index" );

                if ( wbStyleMap.equals( values ) )
                {
                    newStyle = wbStyle;
                    break;
                }
            }

            if ( newStyle == null )
            {
                newStyle = workbook.createCellStyle();
                newStyle.setFont( workbook.getFontAt(
originalStyle.getFontIndex() ) );
                PropertyUtils.copyProperties( newStyle, originalStyle );
                PropertyUtils.setProperty( newStyle, propertyName, 
propertyValue );
            }

            cell.setCellStyle( newStyle );
        }
        catch ( Exception e )
        {
            e.printStackTrace();

            throw new NestableException( "Couldn't setCellStyleProperty.", e );
        }
    }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to