Reputation: 404
I'm trying to save my chart image so that I can put it into an excel file created using epplus
Response.ContentType = "image/bmp"
Response.AppendHeader("Content-Disposition", "attachment;filename=chart.bmp")
Chart1.SaveImage(Response.OutputStream)
Dim imgchart As Bitmap
imgchart = New Bitmap("chart.bmp")
Using package As New ExcelPackage(newFile)
' add a new worksheet to the empty workbook
Dim worksheet As ExcelWorksheet = package.Workbook.Worksheets.Add("LIMS")
'Add the headers
worksheet.Cells(1, 1).Value = "Analyzer Time"
worksheet.Cells(1, 2).Value = "Analyzer Data"
worksheet.Cells(1, 3).Value = "Lab Date"
worksheet.Cells(1, 4).Value = "Lab Data"
Dim row
row = 2
For i = 0 To count1 - 1
worksheet.Cells(row, 1).Value = col1(i)
worksheet.Cells(row, 2).Value = col2(i)
row = row + 1
Next
row = 2
For i = 0 To labcount - 1
worksheet.Cells(row, 3).Value = col3(i)
worksheet.Cells(row, 4).Value = col4(i)
row = row + 1
Next
worksheet.Drawings.AddPicture("chart", imgchart)
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AppendHeader("Content-Disposition", "attachment;filename=chart.xlsx")
package.SaveAs(Response.OutputStream)
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AppendHeader("Content-Disposition", "attachment;filename=chart.xlsx")
Response.WriteFile("chart.xlsx")
Response.End()
End Using
What do I need to fix in this code? I'm new to file streams and response.
Upvotes: 0
Views: 1051
Reputation: 4330
From a quick glance, I think you are making a couple mistakes. First it seems you are trying to send the image and the excel through the response. I don't believe you can send multiple files to the client, but you don't need to send the image anyways since you are just inserting it into the excel file. Also with the image you are attempting to load the bitmap from the non-existent server file "chart.bmp". Second, you are using the function Response.WriteFile
which writes a disk file to the response. I'm guessing that's not what you are trying to do since you have already written the file to the response with Package.SaveAs
. Try this code below,
'Save the chart to a memory stream instead of a file
Dim BitMapMS As New MemoryStream
Chart1.SaveImage(BitMapMS)
'Load bitmap from memory stream
Dim imgchart As Bitmap
imgchart = New Bitmap(BitMapMS)
Using package As New ExcelPackage(newFile)
' add a new worksheet to the empty workbook
Dim worksheet As ExcelWorksheet = package.Workbook.Worksheets.Add("LIMS")
'Add the headers
worksheet.Cells(1, 1).Value = "Analyzer Time"
worksheet.Cells(1, 2).Value = "Analyzer Data"
worksheet.Cells(1, 3).Value = "Lab Date"
worksheet.Cells(1, 4).Value = "Lab Data"
Dim row
row = 2
For i = 0 To count1 - 1
worksheet.Cells(row, 1).Value = col1(i)
worksheet.Cells(row, 2).Value = col2(i)
row = row + 1
Next
row = 2
For i = 0 To labcount - 1
worksheet.Cells(row, 3).Value = col3(i)
worksheet.Cells(row, 4).Value = col4(i)
row = row + 1
Next
worksheet.Drawings.AddPicture("chart", imgchart)
'Clear the response
Response.Clear()
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AppendHeader("Content-Disposition", "attachment;filename=chart.xlsx")
'This call looks like it will write the data to the stream.
package.SaveAs(Response.OutputStream)
Response.End()
End Using
I can't test the above code, so give it a try and let us know how it goes.
Upvotes: 1