خروجی تصویر به فایل Excel توسط #C در ASP.Net
شنبه 20 تیر 1394دراین مقاله با یک مثال به نحوه خروجی تصویر به فایل 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 کلیک کنید که در واقع خروجی زیر را مشاهده می کنید:
- ASP.net
- 2k بازدید
- 2 تشکر