2013-09-10 78 views
15

Vì vậy, tôi đang sử dụng thư viện EPPlus ưa thích để viết tệp Excel và xuất tệp đó cho người dùng tải xuống. Đối với các phương pháp sau đây tôi chỉ sử dụng một số dữ liệu thử nghiệm để giảm thiểu trên mã, sau đó tôi sẽ thêm mã tôi đang sử dụng để kết nối với cơ sở dữ liệu sau này. Bây giờ tôi có thể tải về một tập tin tất cả tốt, nhưng khi tôi đi để mở tập tin, Excel than phiền rằng nó không phải là một tập tin hợp lệ và có thể bị hỏng. Khi tôi đi xem tập tin, nó nói nó lớn hơn 0KB. Vì vậy, câu hỏi của tôi là, tôi đang đi sai ở đâu? Tôi giả định nó với MemoryStream. Đã không thực hiện nhiều công việc với các luồng trước đây nên tôi không chắc chắn những gì để sử dụng ở đây. Bất kỳ trợ giúp sẽ được đánh giá cao!ASP.NET MVC EPPlus Tải xuống Tệp Excel

[Authorize] 
public ActionResult Download_PERS936AB() 
{ 
    ExcelPackage pck = new ExcelPackage(); 
    var ws = pck.Workbook.Worksheets.Add("Sample1"); 

    ws.Cells["A1"].Value = "Sample 1"; 
    ws.Cells["A1"].Style.Font.Bold = true; 
    var shape = ws.Drawings.AddShape("Shape1", eShapeStyle.Rect); 
    shape.SetPosition(50, 200); 
    shape.SetSize(200, 100); 
    shape.Text = "Sample 1 text text text"; 

    var memorystream = new MemoryStream(); 
    pck.SaveAs(memorystream); 
    return new FileStreamResult(memorystream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = "PERS936AB.xlsx" }; 
} 

Trả lời

35

Đây là những gì tôi đang sử dụng - Tôi đã sử dụng này trong vài tháng nay và đã không có một vấn đề:

public ActionResult ChargeSummaryData(ChargeSummaryRptParams rptParams) 
    { 
     var fileDownloadName = "sample.xlsx"; 
     var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 

     var package = CreatePivotTable(rptParams); 

     var fileStream = new MemoryStream(); 
     package.SaveAs(fileStream); 
     fileStream.Position = 0; 

     var fsr = new FileStreamResult(fileStream, contentType); 
     fsr.FileDownloadName = fileDownloadName; 

     return fsr; 
    } 

Một điều tôi nhận thấy ngay lập tức là bạn không đặt lại vị trí luồng tệp của bạn về 0.

+0

Điều đó cố định nó lên thật tốt, đặt vị trí. Cảm ơn người đàn ông! – Chiggins

Các vấn đề liên quan