2013-09-30 26 views
1

嗨,我使用closedxML DLL文件導出到Excel我有這樣的靜態方法如下如何轉換使用封閉的XML創建的Excel文件轉換成字節格式

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);   
    } 

我打電話上述功能中像下面這樣的方法

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());    
} 

,但我需要得到這一結果的Excel工作表以字節爲單位,我需要將其存儲在內存流後,我可以使用進一步的目的..

但我不知道如何我可以以字節格式創建的Excel文件...

會不會有人請給這一個... 很多感謝任何想法或解決方案...

回答

2

請做到這一點: -

//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);