Hi I am using closedxML DLL for exporting to excel i have static method like this below
public static void WriteToExcel(string fileName, List<CP> pages)
{
var wb = new XLWorkbook();
byte[] file;
var ws = wb.Worksheets.Add("CPs");
WriteCostHeader(ws);
////write all the header columns
//for (int i = 0; i < pages.Count; i++)
int iRow = 2;
foreach(var page in pages)
{
WriteCostPage(ws, page, iRow++);
WriteCostItemHead(ws, iRow++);
foreach(var item in page.Items)
{
WriteCostItem(ws, item, iRow++);
}
iRow++;
}
wb.SaveAs(fileName);
}
I am calling above function in a method like this below
public static List<CP> Init()
{
//binding items to to list
}
static void Main(string[] args)
{
byte[] file;
file = ExcelProvider.WriteToExcel("D:\\Temp\\Test1.xls", Init());
//Console.WriteLine("done");
//Console.ReadLine();
}
public byte[] CreatePackage()
{
string fileName = string.Format("{0}.xlsx", "Generated");
byte[] excelFile;
// getting error here cannot convert void to byte[]
excelFile = ExcelProvider.WriteToExcel(fileName, Init());
}
but i need to get that result excel sheet in bytes, I need to store it in memory stream later i can use for further purpose ..
But I am not sure how can i get the created excel file in bytes format...
Would any one pls give any idea or solutions on this one ... Many thanks In advance ...
Closed XML workbooks are saved to a stream. You can use a memory stream. Then call MemoryStream.ToArray()
to get its bytes. So...
var wb = new XLWorkbook();
//...
var workbookBytes = new byte[0];
using (var ms = new MemoryStream())
{
wb.SaveAs(ms);
workbookBytes = ms.ToArray();
}
kaushik0033
Please do this:-
//Open the File into file stream
FileStream fileStream = new FileStream(Server.MapPath(fileName), FileMode.Open, FileAccess.Read, FileShare.Read);
//Create and populate a memorystream with the contents of the
MemoryStream mstream = StreamToMemory(fileStream);
// delete the file when it is been added to memory stream
File.Delete(Server.MapPath(fileName));
//Convert the memorystream to an array of bytes.
byte[] byteArray = mstream.ToArray();
//Clean up the memory stream
mstream.Flush();
mstream.Close();
// Clear all content output from the buffer stream
Response.Clear();
// Add a HTTP header to the output stream that specifies the default filename
// for the browser's download dialog
Response.AddHeader("Content-Disposition", "attachment; filename=QatargasTimesheet-" + ((DateTime)rdDate.SelectedDate).ToString("MMM yyyy") + ".xls");
// Add a HTTP header to the output stream that contains the
// content length(File Size). This lets the browser know how much data is being transfered
Response.AddHeader("Content-Length", byteArray.Length.ToString());
// Set the HTTP MIME type of the output stream
Response.ContentType = "application/octet-stream";
// Write the data out to the client.
Response.BinaryWrite(byteArray);
来源:https://stackoverflow.com/questions/19091202/how-to-convert-created-excel-file-using-closed-xml-into-bytes-format