We're sorry Aspose doesn't work properply without JavaScript enabled.

Free Support Forum - aspose.com

Calc engine very slow

I’m finding that the calc engine is extremely slow. Orders of magnitude
slower than an interop call to Excel from .NET even. The example I’m
using has a lot of VLookups. Is that a known issue? There is really no
way you can call this “highly scalable and lightening fast”. Here is the code and workbook is attached. This takes a minute and a half on my machine. I can’t see anything in the example code that I’m not doing here. What gives? Thx.

Workbook workbook = new Workbook();
workbook.Open(Path.Combine(path, “TestBefore.xls”));
workbook.CalculateFormula();
workbook.Save(Path.Combine(path, “TestAfter.xls”), FileFormatType.Excel2003);


This performance issue is caused by the formula:

VLOOKUP($A1,Chart!A:A,1,FALSE)

We didn't consider search the looup value in a whole column before which caused we to check the whole column's cell one by one. We will optimize it right now and provide a new fix next week.

FYI, the data for table array is injected after the fact, so there is no way to know when the formula is written how many rows it will be. We need to be able to specify table arrays this way, including multiple columns (e.g., A:J). Thank you for your quick response.

Actually that strikes me as very odd. I thought all spreadsheets stored data as a sparse matrix, for which you’d only ever perform any operation on actual, non-null cells rather than the full matrix model that is presented to the user.

I changed the table array to an explicit range (A$1:A$2000) and it sped things up dramatically. However, as soon as I pushed some actual data into the table array, calculate performance plummeted again. Much, much slower than Excel.

Hi,

Thanks for providing us further info.

We will optimize the formula calculation engine (as Laurence told) and provide you the fix soon.

Thank you.

Hi,

Please try the attached version(4.6.0.6) as We have improved the performance of calculating the formula VLOOKUP($A1,Chart!A:A,1,FALSE), hopefully the formulas would be processed quickly as expected.

Thank you.