4

こんにちは、ASP.NETMVCでExcelへのエクスポートがどのように行われるかについての最良の方法を探しています

今私はbillsternberger.netからこれを手に入れました

C#を使用してASP.NETMVCからExcelまたはCSVにエクスポートする

        //Export to excel
        public ActionResult Download()
        {

            List<Lookup> lookupList = data,GetLookupList();
            var grid = new System.Web.UI.WebControls.GridView();

            grid.DataSource = lookupList;
            grid.DataBind();

            Response.ClearContent();
            Response.AddHeader("content-disposition", "attachment; filename=YourFileName.xlsx");
            Response.ContentType = "application/vnd.ms-excel";
            StringWriter sw = new StringWriter();
            HtmlTextWriter htw = new HtmlTextWriter(sw);
            grid.RenderControl(htw);
            Response.Write(sw.ToString());
            Response.End();

            return View();
        }

これは、データグリッドへのバインドとExcelへのエクスポートから機能しています。

今私がする必要があるのは、私のhtmlテーブルを取得し、それをExcelにエクスポートすることです。ここで、テーブルデータの操作にjquery datatableを使用したので、クライアント側で行われるため、より軽量になります。

jqueryとajaxを使用してみました。ここで、HTMLテーブルをコントローラーのエンティティに渡します。

function  Export()  
{    

    var details = {};                                        
    details.LookupName = $("#tblLookup").html();

    //Validate details

    var url_ = generateURL("/Home/Download");                    //Call Save Controller  and pass details entities  

    $.ajax({
        type: "POST",
        url: url_,
        data: details,                                            //details will act as the Entities Model
        traditional: true,
        success: function(data) {

        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
                alert("error: " + XMLHttpRequest.responseText);
        },
        dataType: 'json'
    });

};

A potentially dangerous Request.Form value was detected from the clientしかし、それは私などを投げます。

それはMVCでどのように行われますか?私はすでにいくつかの同様のトピックを探していますが、それは常に私の最初の作業サンプルに私を落とします。

よろしくお願いします

4

1 に答える 1

4

最も簡単な解決策は、HTML テーブルを CSV ファイルとしてエクスポートし、サーバーに送信することです。例を見てみましょう。ビューモデルを定義したとします:

public class ExportViewModel
{
    [AllowHtml]
    public string Csv { get; set; }
}

そしてコントローラー:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new ExportViewModel());
    }

    [HttpPost]
    public ActionResult Export(ExportViewModel model)
    {
        var cd = new ContentDisposition
        {
            FileName = "YourFileName.csv",
            Inline = false
        };
        Response.AddHeader("Content-Disposition", cd.ToString());
        return Content(model.Csv, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    }
}

対応するビュー内で、いくつかを生成したとします<table>(このテーブルの生成方法は、ここではあまり興味深いものではありません)。

@model ExportViewModel

<table id="myTable">
    <thead>
        <tr>
            <th>Id</th>
            <th>Name</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1</td>
            <td>Foo</td>
        </tr>
        <tr>
            <td>2</td>
            <td>Bar</td>
        </tr>
    </tbody>
</table>

@using (Html.BeginForm("Export", null, FormMethod.Post, new { id = "export" }))
{
    @Html.HiddenFor(x => x.Csv)
    <button type="submit">Export to Excel</button>
}

<script type="text/javascript" src="http://www.kunalbabre.com/projects/table2CSV.js"></script>
<script type="text/javascript">
    $('#export').submit(function () {
        $('#Csv').val($('#myTable').table2CSV({ delivery: 'value' }));
    });
</script>

を使用してtable2CSV jQuery plugin、HTML テーブルを CSV 形式に変換しています。結果の CSV は、フォームがサーバーに送信される直前に隠しフィールド内に保存されます。

ネイティブ XLSX ファイルを作成する場合は、サーバーでOpenXML SDKを使用する必要があります。HTML テーブルをそのままネイティブの Excel ファイルに変換することはできません。このソリューションは、データのみをサーバーに送信する必要があるため、実践するのがより困難になりますが、結果の Excel ファイルをはるかにカスタマイズできます。

于 2012-12-26T11:05:53.220 に答える