Search code examples
vb.netexcelasp.net-mvc-4excellibrary

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


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


Solution

  • Well. I figured out solution, I think this problem is the size of the excel file, but I am not sure it. So I found this "solution": when I create my workbook, I fill 200 cells of the first sheet with null values to reach this size.

    Public Function ObtenerExcel() As ActionResult
      Dim stream As New System.IO.MemoryStream
      Dim doc As CompoundDocument = CompoundDocument.Create(stream)
      Dim memStream As New MemoryStream
      Dim workbook As New Workbook()
      Dim worksheet As New Worksheet("Hoja")
      For Index As Integer = 0 To 200
        worksheet.Cells(Index, 0) = New Cell(Nothing)
      Next
      workbook.Worksheets.Add(worksheet)
      workbook.SaveToStream(stream)
        stream.Position = 0
    
      Return File(stream, "application/vnd.ms-excel", "mytestfile.xls")
    End Function