How to I create and return an Excel File with a controller in MVC 4 in vb.net?

EduardoUstarez picture EduardoUstarez · Jul 30, 2014 · Viewed 9.2k times · Source

I am using ExcelLibrary enter link description here because I don't want to install Microsoft Office Excel (microsoft.interop.office.excel)

 Public Function ObtenerExcel() As ActionResult
      Dim workbook As New Workbook()
      Dim worksheet As New Worksheet("Sheet1")
      worksheet.Cells(5, 5) = New Cell(999999)
      worksheet.Cells(10, 10) = New Cell(12354)
      workbook.Worksheets.Add(worksheet)

      Dim stream As New System.IO.MemoryStream
      workbook.SaveToStream(stream)
      stream.Position = 0

      Dim buffer(4096) As Byte
      stream.Read(buffer, 0, buffer.Length)

      Return File(buffer, "application/vnd.ms-excel", "mytestfile.xls")
    End Function

This code return an excel file, but when I try to open this file, It shows an error message (Excel found unreadable content in 'text.xls'. Do you want to recover the contents of this workbook? If you trust the source of this workbook, click Yes.) and it doesn't shows anything.

I working on Windows 8.1 (64 bits) and Microsoft Office 2013

Answer

Michael Dunlap picture Michael Dunlap · Jul 31, 2014

You should use the Stream overload of File(...). The code you have written appears to only return the first 4096 bytes of the file, the amount you copied into the buffer. You should use the stream directly instead.

Dim stream As New System.IO.MemoryStream
workbook.SaveToStream(stream)
stream.Position = 0

Return File(stream, "application/vnd.ms-excel", "mytestfile.xls")