0

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

このコードで何を修正する必要がありますか? ファイルストリームと応答は初めてです。

4

1 に答える 1

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

上記のコードをテストすることはできません。試してみて、どうなるかお知らせください。

于 2012-12-13T17:29:08.593 に答える