我正在尝试保存我的图表图像,以便将其放入使用epplus创建的Excel文件中
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
我需要在此代码中修复什么?我是文件流和响应的新手。
答案 0 :(得分:1)
从快速浏览一下,我认为你犯了一些错误。首先,您似乎正在尝试通过响应发送图像和Excel。我不相信你可以发送多个文件到客户端,但你不需要发送图像,因为你只是将它插入excel文件。此外,您正在尝试从不存在的服务器文件“chart.bmp”加载位图。其次,您正在使用将磁盘文件写入响应的函数Response.WriteFile
。我猜这不是你想要做的,因为你已经用Package.SaveAs
将文件写入了回复。请尝试以下代码,
'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
我无法测试上面的代码,所以试一试,让我们知道它是怎么回事。