خروجی تصویر به فایل Excel توسط #C در ASP.Net

شنبه 20 تیر 1394

دراین مقاله با یک مثال به نحوه خروجی تصویر به فایل Excel توسط #C در ASP.Net می پردازیم.

خروجی تصویر به فایل Excel توسط #C در ASP.Net

در نسخه متنی html یک دکمه ی button و یک کنترل Image داریم که در کد زیر مشاهده می کنید :

<asp:Image ID="Image1" ImageUrl="~/Images/Koala.jpg" runat="server" Height="300"
    Width="350" />
<br />
<br />
<asp:Button Text="Export" OnClick="ExportExcel" runat="server" />

اضافه کردن فضای نام :

کد فضای نام زیر را در صفحه مورد نظر اضافه کنید.

در صفحه aspx.cs :

using System.IO;

در صفحه aspx.vb :


Imports System.IO

خروجی گرفتن تصویر به فایل Excel در ASP.Net :

وقتی که بر روی دکمه Export کلیک کردیم، رویدادExportExcel اجرا می شودکه در ابتدا آدرس نسبی را به آدرس مطلق با استفاده از تابع GetAbsoluteUrl تبدیل می کند.

آدرس نسبی (relative) :

این آدرس یک مسیر از فایل می باشد که به پوشه Root وب سایت وابسته است. مثال ~/images/Koala.jpg یک آدرس نسبی است. آدرس نسبی در وب سایت خوب کار می کند ولی وقتی که تصویر در فایل Excel نمایش داده می شود، قابل استفاده نیست و وقتی هم که Excel باز می شود، تصویر از سرور دانلود می شود.

آدرس مطلق (Absolute) :

آدرس مطلق یک آدرس کامل به فایل با نام دامنه یا آدرس IP می باشد. مثال http://localhost:9857/Export_Image_Excel/Images/Koala.jpg یک آدرس مطلق است. آدرس مطلق می تواند به عنوان یک برنامه خارجی دیگر مثل Excel مورد استفاده قرار گیرد. سپس یک جدول ASP.Net ایجاد شده است و کنترل تصویر به جدول ASP.Net اضافه می شود.

در نهایت جدول ASP.net به Excel خروجی می دهد.

دستورات کد #C :

protected void ExportExcel(object sender, EventArgs e)
{
    //Convert the Relative Url to Absolute Url and set it to Image control.
    Image1.ImageUrl = this.GetAbsoluteUrl(Image1.ImageUrl);
 
    using (StringWriter sw = new StringWriter())
    {
        using (HtmlTextWriter hw = new HtmlTextWriter(sw))
        {
            //Create a Table.
            Table table = new Table();
 
            //Add Image control to the Table Cell.
            TableRow row = new TableRow();
            row.Cells.Add(new TableCell());
            row.Cells[0].Controls.Add(Image1);
            table.Rows.Add(row);
 
            //Render the Table as HTML.
            table.RenderControl(hw);
 
            //Export the Table to Excel.
            Response.Clear();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment;filename=Images.xls");
            Response.Charset = "";
            Response.ContentType = "application/vnd.ms-excel";
 
            //Write the HTML string to Response.
            Response.Write(sw.ToString());
            Response.Flush();
            Response.End();
        }
    }
}
 
public override void VerifyRenderingInServerForm(Control control)
{
    /* Verifies that the control is rendered */
}
 
private string GetAbsoluteUrl(string relativeUrl)
{
    relativeUrl = relativeUrl.Replace("~/", string.Empty);
    string[] splits = Request.Url.AbsoluteUri.Split('/');
    if (splits.Length >= 2)
    {
        string url = splits[0] + "//";
        for (int i = 2; i < splits.Length - 1; i++)
        {
            url += splits[i];
            url += "/";
        }
 
        return url + relativeUrl;
    }
    return relativeUrl;
}

دستورات کد VB.Net :

Protected Sub ExportExcel(sender As Object, e As EventArgs)
    'Convert the Relative Url to Absolute Url and set it to Image control.
    Image1.ImageUrl = Me.GetAbsoluteUrl(Image1.ImageUrl)
 
    Using sw As New StringWriter()
        Using hw As New HtmlTextWriter(sw)
            'Create a Table.
            Dim table As New Table()
 
            'Add Image control to the Table Cell.
            Dim row As New TableRow()
            row.Cells.Add(New TableCell())
            row.Cells(0).Controls.Add(Image1)
            table.Rows.Add(row)
 
            'Render the Table as HTML.
            table.RenderControl(hw)
 
            'Export the Table to Excel.
            Response.Clear()
            Response.Buffer = True
            Response.AddHeader("content-disposition", "attachment;filename=Images.xls")
            Response.Charset = ""
            Response.ContentType = "application/vnd.ms-excel"
 
            'Write the HTML string to Response.
            Response.Write(sw.ToString())
            Response.Flush()
            Response.End()
        End Using
    End Using
End Sub
 
Public Overrides Sub VerifyRenderingInServerForm(control As Control)
    ' Verifies that the control is rendered
End Sub
 
Private Function GetAbsoluteUrl(relativeUrl As String) As String
    relativeUrl = relativeUrl.Replace("~/", String.Empty)
    Dim splits As String() = Request.Url.AbsoluteUri.Split("/")
    If splits.Length >= 2 Then
        Dim url As String = splits(0) + "//"
        For i As Integer = 2 To splits.Length - 2
            url += splits(i)
            url += "/"
        Next
 
        Return url & relativeUrl
    End If
    Return relativeUrl
End Function

 برنامه را اجرا کنید و بر روی دکمه Export کلیک کنید که در واقع خروجی زیر را مشاهده می کنید:

 

فایل های ضمیمه

نرگس محمدی

نویسنده 36 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید