ホームページ >ウェブフロントエンド >htmlチュートリアル >データを EXCEL にエクスポートする MVC の新しい方法: ビューまたは部分ビューを HTML に変換し、FileResult_html/css_WEB-ITnose を直接返します。

データを EXCEL にエクスポートする MVC の新しい方法: ビューまたは部分ビューを HTML に変換し、FileResult_html/css_WEB-ITnose を直接返します。

WBOY
WBOYオリジナル
2016-06-24 11:36:101517ブラウズ

EXCEL メソッドのエクスポートの概要

MVC を使用してデータを EXCEL にエクスポートするには、次のような方法があります。

1. EXCEL COM コンポーネントを使用して、XLS ファイルを動的に生成し、サーバーに保存します。ファイルストレージパスに移動します。 以上です。

利点: 豊富な EXCEL 形式を設定できる、欠点: EXCEL コンポーネントに依存する必要があり、サーバー上で EXCEL プロセスを時間内に閉じることができず、不要な XLS が大量に存在するファイルはサーバー上に残ります。

2. 出力を設定します。 ヘッダーは application/ms-excel であり、結合された HTML TABLE データが出力されます。

利点: コンポーネントは必要なく、いくつかの単純な形式で出力できます。短所: HTML TABLE のスプライシングのプロセスは複雑で、十分に直感的ではありません

3. サードパーティのコンポーネント (NPOI など) を使用する

利点と欠点はすべて、使いやすさに依存します。サードパーティのコンポーネントについては、ここでは説明しません

私が公開した以前のブログ投稿も読むことができます: 私が作成した ExcelHelper 一般クラス、データの読み取りまたは生成に使用できます

MVC での新しいエクスポート EXCEL メソッドの実装

MVC での新しいメソッドは次のとおりです。ビューまたは部分ビューを HTML に変換し、FileResult を直接返します。これは簡単に実装できます。EXCEL 関数をエクスポートするには、以下のコードを直接入力します。

まず部分ビュー (IndexDataList) の内容を見てください:

@model IEnumerable<CCPS.Models.Data.CustomerCommentInfo>@using PagedList.Mvc;<table>    <thead>        <tr>            <th>意见ID</th>            <th>组 织</th>            <th>车牌</th>            <th>车型</th>            <th>皇家版</th>            <th>客户</th>            <th>客户电话</th>            <th>责任部门</th>            <th>责任班组</th>            <th>业务顾问</th>            <th>意见类型</th>            <th>状态</th>            <th>录入员</th>            <th>录入时间</th>        </tr>    </thead>    <tbody id="list-table-body">        @foreach (var item in Model)        {            string className = "";            if (item.Status == "已审核未处理")            {                className = "uncl_yellow";                if (item.AuditDatetime != null && DateTime.Now > ((DateTime)item.AuditDatetime).AddHours(24))                {                    className = "uncl_red";                }            }            <tr class="@className" data-adt="@item.AuditDatetime">                <td><a href="http://oa.pfcn.com/flow/fl_ui_main.aspx?ID=@item.Id&flow_id=147" target="_blank">@item.Id</a></td>                <td>@item.OrgName</td>                <td>@item.PlateNo</td>                <td>@item.Model</td>                <td>@item.IsRoyalVer</td>                <td>@item.CustomerName</td>                <td>@item.CustomerPhoneNo</td>                <td>@item.RelevantDept</td>                <td>@item.RelevantGroup</td>                <td>@item.Consultant</td>                <td>@item.Type</td>                <td>@item.Status</td>                <td>@item.CreateBy</td>                <td>@string.Format("{0:g}", item.CreateDatetime)</td>            </tr>        }    </tbody></table>@if(true!=ViewBag.NoPaging){ <div class="pager">    @Html.PagedListPager(Model as PagedList.IPagedList<CCPS.Models.Data.CustomerCommentInfo>, page => string.Format("javascript:turnPage({0});", page), PagedListRenderOptions.ClassicPlusFirstAndLast)</div>}

ここでの部分ビューは EXCEL をエクスポートするためだけでなく、メイン ビューでデータを表示するときにも使用できるので、ページングにより、EXCEL をエクスポートする場合、ページングは​​まったく必要ありません。

以下は、ビューと部分ビューから HTML を生成するメソッドです。 コードは次のとおりです:

        [NonAction]        protected string RenderViewToString(Controller controller, string viewName, string masterName)        {            IView view = ViewEngines.Engines.FindView(controller.ControllerContext, viewName, masterName).View;            using (StringWriter writer = new StringWriter())            {                ViewContext viewContext = new ViewContext(controller.ControllerContext, view, controller.ViewData, controller.TempData, writer);                viewContext.View.Render(viewContext, writer);                return writer.ToString();            }        }        [NonAction]        protected string RenderPartialViewToString(Controller controller, string partialViewName)        {            IView view = ViewEngines.Engines.FindPartialView(controller.ControllerContext, partialViewName).View;            using (StringWriter writer = new StringWriter())            {                ViewContext viewContext = new ViewContext(controller.ControllerContext, view, controller.ViewData, controller.TempData, writer);                viewContext.View.Render(viewContext, writer);                return writer.ToString();            }        }

これら 2 つのメソッドは、ビューのプレゼンテーションの手順と原則に従って実装されます。 --> ビュー コンテキストをインスタンス化します --> ビューを出力コンテナーに提示します

最後のステップは、EXCEL をエクスポートして FileResult を返す Action メソッドを定義することです。コードは次のとおりです。

        public ActionResult Export(DataFilter<CustomerCommentInfo>[] filters)        {            var resultList = DataProvider.GetCustomerCommentInfos(filters).OrderBy(t => t.CreateDatetime);            ViewBag.NoPaging = true;            ViewData.Model = resultList;            string viewHtml = RenderPartialViewToString(this, "IndexDataList");            return File(System.Text.Encoding.UTF8.GetBytes(viewHtml), "application/ms-excel", string.Format("ccpi_{0}.xls", Guid.NewGuid()));        }

とてもシンプルですね?どのような種類の EXCEL 形式コンテンツをエクスポートするかをビューで直接デザインできます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。