Depending on the workbook, it is possible that a large number of cells will
need to be marked, although I am unsure if it will hit the limit of the
number of styles (I think its in the 1000s).  In any case, I was planning on
eventually implementing some sort of 'style pooling' simply to keep the
files from getting too big.

I experimented with your code and I've found that it works, assuming that
the cell we are cloning from is from a seperate sheet.  If I clone from the
same sheet, even if it is a different cell, the program doesn't change the
style of the cell at all.

For the application that I am writting, I was planning on cloning the style
not only from the sheet I am marking, but from the exact cell that I am
marking.  The reason is that different cells may have different style in the
workbook and I am trying to just simply add red strips to the current style
of the cell.  I'm starting to wonder if this is possible.  Is there a
restriction regaurding what cells you may set to a particular cloned
cellStyle?

Also, the WorkbookFactory did solve my other issue.  Thank you for the
advice.

yehogold



MSB wrote:
> 
> OK, will have a look at the workbooks a little later.
> 
> I do have one further question; do you have any idea of roughly how many
> of these cells you will have to alter? The reason I ask is that Excel
> places a limit on the number of different format/style objects you can
> create - at least the .xls binary format does, I am not so certain about
> the OpenXML based one. As a result, we may need to look into 'style
> pooling' if you are going to be altering the format on a reasonably large
> number of cells. This should be quite straightforward to implement - use
> some form of Collections object to manage the styles and check to see if
> one already exists with the attributes we require before creating a new
> one - but it is an extra wrinkle to take into consideration.
> 
> If I have the time over the weekend, I will try to put something together.
> 
> Yours
> 
> Mark B
> 
> PS Did the WorkbookFactory solve your other problem?
> 
> 
> yehogold wrote:
>> 
>> It sounds like you've got it.  I will be removing the highlighting
>> applied to the cells using the POI.  Here is the function I currently
>> have written to do that:
>> 
>>      public void clearMark(Cell cell)
>>      {
>>              if (cell.getCellStyle().getFillPattern() ==
>> CellStyle.THIN_BACKWARD_DIAG)
>>              {
>>                      Workbook wb = cell.getSheet().getWorkbook();
>>                      CellStyle clearStyle = wb.createCellStyle();
>>              
>>                      clearStyle.cloneStyleFrom(cell.getCellStyle());
>>                      
>>                      clearStyle.setFillForegroundColor(Font.COLOR_NORMAL);
>>                      clearStyle.setFillPattern(CellStyle.NO_FILL);
>>                      
>>                      cell.setCellStyle(clearStyle);
>>              }
>>      }
>> 
>> I've tried testing it on its own, using cells that I marked manually with
>> the red-strips using Excel.  It mostly works, however it does cause two
>> bugs.  
>> 
>> First, although it retains the font and text color of the cell, it does
>> not retain the background color of the cell.
>> 
>> Second, when run on a .xlsx file, Excel complains that it found
>> unreadable content in the workbook.  It can repair the problem and open
>> the workbook, but gives you a warning message when you open it.
>> 
>> I am attaching 4 versions of a test work book.  The two book1's are
>> identical workbooks before the above function was run on them in two
>> different formats, book1_after's are the resultant files after the
>> function was run.
>> 
>> Thank you,
>> 
>> yehogold
>> 
>>  http://www.nabble.com/file/p24972448/Book1.xls Book1.xls 
>> http://www.nabble.com/file/p24972448/Book1.xlsx Book1.xlsx 
>> http://www.nabble.com/file/p24972448/Book1_after.xls Book1_after.xls 
>> http://www.nabble.com/file/p24972448/Book1_after.xlsx Book1_after.xlsx 
>> 
>> 
>> 
>> MSB wrote:
>>> 
>>> At the risk of repeating myself, I want to be completely clear about
>>> this;
>>> 
>>> You are reading in an existing workbook.
>>> You want to clone the style from one of the cells of that workbook and
>>> then modify it such that the forground consists of a pattern of diagonal
>>> red bars. This format will be used to mark or highlight cells that
>>> conform to a specific criteria and you will be highlighting - applying
>>> the style to - them using POI.
>>> Later, you may want to re-set or remove the highlighting applied to the
>>> cells. How will this be done, through POI or manually. If done through
>>> POI, how will you accomplish this? I only ask because if you modify a
>>> style that has been applied to one or more cells, every cell that style
>>> has been applied to will be affected - so it would be better to change
>>> the style applied to another one.
>>> 
>>> Will proceed on this premise but cannot promise anything soon.
>>> 
>>> Yours
>>> 
>>> Mark B
>>> 
>>> 
>>> yehogold wrote:
>>>> 
>>>> I am, indeed, cloning a cellStyle from the same workbook.
>>>> 
>>>> The point of this portion of the program is to mark the cell of an
>>>> existing workbook that was created using EXCEL, not the POI. 
>>>> Therefore, I am opening and reading in the workbook.
>>>> 
>>>> What I would like to do is to mark the cell with red diagonal lines in
>>>> the foreground.  I would like the rest of the format to remain the same
>>>> as it was before, allowing me to "unmark" it at a later point,
>>>> returning it to its original format.  Therefore, if the background is
>>>> white, I would like it to stay white, if it is blue, I would like it to
>>>> stay blue, if the font is bold, I would like it to stay bold, etc.
>>>> 
>>>> Thank you again for spending so much time on this,
>>>> 
>>>> yehogold
>>>> 
>>>> 
>>>> MSB wrote:
>>>>> 
>>>>> Sorry about BiffViewer. I was assuming that you were cloning a style
>>>>> from one workbook for use in a different workbook. BiffViwere would
>>>>> have allowed you to see what the differences were between the original
>>>>> style and the clone had this been the case.
>>>>> 
>>>>> Now, from what you have said, it seems as though you are cloning a
>>>>> style within a workbook, can I ask, is this the case? If so, are you
>>>>> building the workbook entirely using POI or are you opening and then
>>>>> modifying an existing workbook? If the former, then the easy way to
>>>>> get around the problem is to not clone and then modify a style but to
>>>>> build it completely from scratch, even though this does mean a few
>>>>> lines of repeated code.
>>>>> 
>>>>> If I have the time tomorrow, I will experiment with the workbook you
>>>>> attached to see if I can replicate the problem. Can I check to make
>>>>> sure that the style you are looking for has a white background to the
>>>>> cell and red diagonal bars in the foreground?
>>>>> 
>>>>> Yours
>>>>> 
>>>>> Mark B
>>>>> 
>>>>> 
>>>>> yehogold wrote:
>>>>>> 
>>>>>> I used the BiffViewer to look at the file, but I'm not sure how to
>>>>>> read what I am looking at.  I can see many different kinds of style
>>>>>> objects and a couple of cell objects, but am not sure how you know
>>>>>> what cell has what style.
>>>>>> Is there anywhere where there are instructions on how to read the
>>>>>> output of the BiffViewer?
>>>>>> 
>>>>>> As shown in the code, the new cellStyle was created by cloning the
>>>>>> cellStyle of the cell, modifying it, and setting the cellStyle of the
>>>>>> cell to the newly modified clone.
>>>>>> 
>>>>>> I don't remember what the original style of the cells were in the
>>>>>> workbook attached to my first method.  I am attaching a second
>>>>>> workbook were I know that the original cellStyle of all the cells was
>>>>>> the default, i.e. I did not modify the style before running the
>>>>>> workbook through the program.
>>>>>> 
>>>>>> Please let me know if anyone has any ideas.
>>>>>> 
>>>>>> Thank again in advance for your time.
>>>>>> 
>>>>>> Regaurds,
>>>>>> yehogold
>>>>>> 
>>>>>>  http://www.nabble.com/file/p24955769/workbook.xls workbook.xls 
>>>>>> 
>>>>>> 
>>>>>> MSB wrote:
>>>>>>> 
>>>>>>> As a first step, I would reccomend that you investigate alittle
>>>>>>> using the BiffViewer utility. That may tell you which attributes of
>>>>>>> the cell style are either not being set correctly or corrunpted by
>>>>>>> the clone process.
>>>>>>> 
>>>>>>> Does the example workbook you have posted contain both the corrupted
>>>>>>> cell style and the style that you are cloning to create it in the
>>>>>>> first instance?
>>>>>>> 
>>>>>>> Yours
>>>>>>> 
>>>>>>> Mark B
>>>>>>> 
>>>>>>> 
>>>>>>> yehogold wrote:
>>>>>>>> 
>>>>>>>> Hi.
>>>>>>>> 
>>>>>>>> I have the following code used to modify the pattern of a cell:
>>>>>>>> 
>>>>>>>>                Workbook wb = cell.getSheet().getWorkbook();
>>>>>>>>                CellStyle errorStyle = wb.createCellStyle();
>>>>>>>>        
>>>>>>>>                errorStyle.cloneStyleFrom(cell.getCellStyle());
>>>>>>>>                
>>>>>>>>                errorStyle.setFillForegroundColor(Font.COLOR_RED);
>>>>>>>>                errorStyle.setFillPattern(CellStyle.THIN_BACKWARD_DIAG);
>>>>>>>>                
>>>>>>>>                cell.setCellStyle(errorStyle);  
>>>>>>>> 
>>>>>>>> When I run it, I end up getting these weird looking black cells. 
>>>>>>>> Excel 2003 will also not let me directly change the format of the
>>>>>>>> black cells.  How would I format the cells withouth getting this
>>>>>>>> problem?
>>>>>>>> 
>>>>>>>> I am inclosing one of the workbooks.  The messed up black cells are
>>>>>>>> on sheet2.
>>>>>>>> 
>>>>>>>> Thank you in advance for your help.
>>>>>>>>  http://www.nabble.com/file/p24923092/workbook2.xls workbook2.xls 
>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>> 
>>> 
>> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Weird-cells-appearing-after-modifying-the-format-of-a-cell-tp24923092p24973927.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]

Reply via email to