Как экспортировать представление в Excel ASP.NET MVC

Я не эксперт ASP.NET MVC, но мне нужно заниматься небольшим проектом и мне нужна помощь.

По сути, я делаю MVC-проект для отправки или составления списка некоторых текстовых отчетов, и я использовал сначала подход базы данных на модели. Итак, у меня есть эта модель таблиц, которые я создал раньше, без составления хорошего плана. После запуска проекта мне пришлось добавить к нему несколько изображений, чего не было, когда я проектировал модель данных и очень плохо решил эту проблему, отказавшись от философии MVC, но это сработало,

Поэтому я добавил папку "img" в проект и поместил файлы.jpeg внутрь.

... и я показал изображения в виде, как это среди данных, поступающих из модели:

...@foreach (var item in Model) {
<tr>
    <td>            
       <img src="~/img/@string.Format("{0}.jpeg",item.emailid)"/>
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.emailid)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.date)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.task1)
    </td>.......

И затем я экспортировал это представление в файл Excel, используя этот код:

public ActionResult ExportData()
    {
        GridView gv = new GridView();
        gv.DataSource = db.web_weeklyreports.Include(w => w.web_kategori).Include(w => w.web_kategori1).Include(w => w.web_kategori2).Include(w => w.web_kategori3).Include(w => w.web_kategori4).ToList();
        gv.DataBind();
        Response.ClearContent();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment; filename=WeeklyReports.xls");
        Response.ContentType = "application/ms-excel";
        Response.Charset = "";
        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);
        gv.RenderControl(htw);
        Response.Output.Write(sw.ToString());
        Response.Flush();
        Response.End();

        return RedirectToAction("adminreports");
    }

Этот код работал хорошо, за исключением изображения, потому что в DataSource есть только информация о модели, а мои изображения не находятся в Model, они находятся в папке внутри решения, как показано выше.

Таким образом, я могу экспортировать свой вид, за исключением изображений, и мне нужно, чтобы эти изображения тоже были в отчете Excel.

Так что это мой взгляд с изображениями

Любая помощь?

1 ответ

Решение

Я решил это с этим классом

        public ActionResult ExportData()
    {
        GridView gv = new GridView();
        var data = db.web_weeklyreports.Include(w => w.web_kategori).Include(w => w.web_kategori1).Include(w => w.web_kategori2).Include(w => w.web_kategori3).Include(w => w.web_kategori4).ToList();

        gv.AutoGenerateColumns = false;
        gv.Columns.Add(new ImageField { HeaderText="IMG",  DataImageUrlField = "Imagepath", DataImageUrlFormatString = "https://localhost:44353/img/{0}.jpeg",  });
        gv.Columns.Add(new BoundField { HeaderText="ID", DataField = "ID" });
        gv.Columns.Add(new BoundField { HeaderText="Email", DataField = "emailid" });
        gv.Columns.Add(new BoundField { HeaderText="Date", DataField = "date" });
        gv.Columns.Add(new BoundField { HeaderText="Task 1", DataField = "task1" });
        gv.Columns.Add(new BoundField { HeaderText="", DataField = "t1kategoriid" });
        gv.Columns.Add(new BoundField { HeaderText="", DataField = "task2" });
        gv.Columns.Add(new BoundField { HeaderText="", DataField = "t2kategoriid" });
        gv.Columns.Add(new BoundField { HeaderText="", DataField = "task3" });
        gv.Columns.Add(new BoundField { HeaderText="", DataField = "t3kategoriid" });
        gv.Columns.Add(new BoundField { HeaderText="", DataField = "task4" });
        gv.Columns.Add(new BoundField { HeaderText="", DataField = "t4kategoriid" });
        gv.Columns.Add(new BoundField { HeaderText="", DataField = "task5" });
        gv.Columns.Add(new BoundField { HeaderText="", DataField = "t5kategoriid" });

        DataTable dt = new DataTable();
        dt.Columns.Add("Imagepath");
        dt.Columns.Add("ID");
        dt.Columns.Add("emailid");
        dt.Columns.Add("date");
        dt.Columns.Add("task1");
        dt.Columns.Add("t1kategoriid");
        dt.Columns.Add("task2");
        dt.Columns.Add("t2kategoriid");
        dt.Columns.Add("task3");
        dt.Columns.Add("t3kategoriid");
        dt.Columns.Add("task4");
        dt.Columns.Add("t4kategoriid");
        dt.Columns.Add("task5");
        dt.Columns.Add("t5kategoriid");

        foreach (var item in data)
        {                 
            dt.Rows.Add(item.emailid, item.ID, item.emailid, item.date, item.task1, item.t1kategoriid, item.task2, item.t2kategoriid, item.task3, item.t3kategoriid, item.task4, item.t4kategoriid, item.task5, item.t5kategoriid);                
        }

        gv.DataSource = dt;
        gv.DataBind();

        for (int i = 0; i < data.Count; i++)
        {
            gv.Rows[i].Height = 40;
        }

        Response.ClearContent();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment; filename=WeeklyReports.xls");
        Response.ContentType = "application/ms-excel";
        Response.Charset = "";
        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);
        gv.RenderControl(htw);
        Response.Output.Write(sw.ToString());
        Response.Flush();
        Response.End();

        return RedirectToAction("adminreports");
    }

Теперь я могу экспортировать изображения следующим образом:

Другие вопросы по тегам