从输出流中打开文件

时间:2012-12-13 16:59:27

标签: asp.net vb.net excel response filestream

我正在尝试保存我的图表图像,以便将其放入使用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

我需要在此代码中修复什么?我是文件流和响应的新手。

1 个答案:

答案 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

我无法测试上面的代码,所以试一试,让我们知道它是怎么回事。