Hello,
Hi,
Thanks for your posting and using Aspose.Cells for .NET.
You can save your Workbook object into byte array and then can cache it, later you can again recreate your Workbook object from the byte array. Let us know if it works in your case.
Workbook contains all excel objects and below are utility functions to serialize/deserialize workbook object. The code first saves the workbook into byte array and then recreate the workbook from byte array.
C#
{
string filePath = @“f:\downloads\test.xls”;
Workbook book = new Workbook(filePath);
byte[] bytesBook = SerializeWorkbook(book);
Workbook newBook = DeSerializeWorkbook(bytesBook);
newBook.Save(filePath + “.out.xls”);
}
public static byte[] SerializeWorkbook(Workbook workbook)
{
//Create a memory stream
MemoryStream ms = new MemoryStream();
//Save the workbook which contains all excel objects
//into memory stream
workbook.Save(ms, SaveFormat.Excel97To2003);
//Read bytes from memory stream
ms.Position = 0;
byte[] bytesWorkbook = new byte[ms.Length];
ms.Read(bytesWorkbook, 0, bytesWorkbook.Length);
return bytesWorkbook;
}
public static Workbook DeSerializeWorkbook(byte[] bytesWorkbook)
{
MemoryStream ms = new MemoryStream();
ms.Write(bytesWorkbook, 0, bytesWorkbook.Length);
Workbook workbook = new Workbook(ms);
return workbook;
}
Thanks man! Works like a charm!
is something like “SerializeWorkbook” available in Java?
Thanks for your query.
ByteArrayInputStream and ByteArrayOutputStream can be used for this purpose. Here is an example where a workbook is saved to byte array and then same byte array is used to create a workbook. You may please give it a try and provide your feedback.
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
worksheet.getCells().get("P30").putValue("This is sample data.");
// Save the workbook in memory stream
ByteArrayOutputStream baout = new ByteArrayOutputStream();
workbook.save(baout, SaveFormat.XLSX);
// Get bytes and create byte array input stream
byte[] bts = baout.toByteArray();
ByteArrayInputStream bain = new ByteArrayInputStream(bts);
LoadOptions opts = new LoadOptions(LoadFormat.XLSX);
workbook = new Workbook(bain, opts);
can we store this in local drive ? because it store in server memory only
See the document with examples on how to save files to some filepath/storage location for your reference:
Hope, this helps a bit.
I mean i want to store workbook object in local drive , dont want to store xlxb file
As my data is very huge like more then 150 MB , if i call workbook.save() method system get crashed , so we are planing to store workbook object instant of xlxb file ,
please suggest if you have better option to deal with that much huge data .
my requirement is create formula based xlxb file(data set would be 1.5 crore ) and save in local folder and same file i need to read during show case to client
I am using aspose java
Well, Aspose.Cells is a server side MS Excel management library. We also provide a light weight approach, i.e., LightCells API in Aspose.Cells APIs where you may read/write data in light weight mode. Aspose.Cells provides the LightCells API, mainly designed to manipulate cell data one by one without building a complete data model block (using the Cell collection etc.) into memory. It works in an event-driven mode. See the document with examples for your reference:
Moreover, if you are only concerned about memory, Aspose.Cells provides an option e.g MemorySetting.MemoryPreference for memory performance consideration, so you may try it. Please see the topic for your complete reference on how to optimize memory usage while reading/rendering bigger files having large data sets etc.:
Hope, this helps a bit.