I’m new to groovy, and I’ve used the ExcelBuilder code referenced below to iterate through an excel spreadsheet to grab data. Is there an easy to write data as I iterate?
For example, row 1 might have data like this (CSV):
value1,value2
And after I iterate, I want it to look like this:
value1,value2,value3
Yes, this can be done! As I got into the guts of it, I realized that the problem I was trying to solve wasn’t the same as trying to read and write from the same file at the same time, but rather the excel data was stored in an object that I could freely manipulate whenever I wanted. So I added methods specific to my needs – which may or many not meet the needs of anyone else – and I post them here for smarter people to pick apart. At the end of it all, it is now doing what I want it to do.
I added a cell method that takes an index (number or label) and a value which will update a cell for the current row in context (specifically while using
.eachLine()), and a.putRow()method that adds a whole row to the spreadsheet specified. It also handles Excel 2003, 2007, and 2010 formats. When files, sheets, or cells referenced don’t exist, they get created. Since my source spreadsheets often have formulas and charts ready to display the data I’m entering, the.save()and.saveAs()methods call.evaluateAllFormulaCells()before saving.To see the code I started with and examples of how it works, check out this blog entry
Note that both the
.save()and.saveAs()methods reload the workbook from the saved file immediately after saving. This is a workaround to a bug in Apache POI that doesn’t seem to be fixed yet (see Exception when writing to the xlsx document several times using apache poi).If you see any glaring errors or ways to improve (other than style), I’d love to hear them. Again, Groovy is not a language I have much experience with, and I haven’t done anything with Java in several years, so I’m sure there might be some better ways to do things.