This is an interface for creating raw Microsoft Excel spreadsheets by hooking into Microsoft's 2003 SpreadsheetML schema using the Progress (a.k.a. ABL) programming language. There is no dependancy on the Windows Excel.exe COM interface or any such ugliness. This program writes raw .xml files which will open directly in Excel when double-clicked.
- You will need to add the
com/abevoelker
path to yourPROPATH
, so that theExcel
andXML
directories will be sitting at the top-level of yourPROPATH
. Otherwise, Progress won't understand what these objects are when you try to instantiate them. - An example.p file is included that shows a simple example of creating a spreadsheet using the library. For more advanced usage, the library code is generally well commented so don't be afraid to explore.
- The created .xml files are very large, due to the verbosity of XML in general and the weirdness of SpreadsheetML in particular. I would highly recommend compressing them if you are going to send them remotely or do some type of long-term storage.
- For massive documents (>10k rows), you may run into some memory-related issues. A lot of this has to do with the terrible memory management of the AVM. I had pondered creating some type of CellManager object to act as a FlyWeight for creating cells, but experimenting with it proved that it did not improve things very much at all. The main problem from my testing is that the AVM seems to reserve about 5KiB per
CHARACTER
variable, so Cell objects eat up a lot of memory no matter how primitive I can make them. The only way to get around this is to create a betterCHARACTER
datatype. At that point, you are better off migrating to a real programming language. To lessen the burden, be sure to flush theCell
objects into rawLONGCHAR
using one of theWorksheet
's flush methods everyn
rows (I typically flush about every 500 rows).
As always, hard work went into creating this product. If you use it and would like me to continue producing quality software please consider donating! Thank you!
ExcelABL is released under the LGPLv3 license.