ASP.NET MVC コントロールヘルプ
リモートでロードおよび保存
コントロールの使用 > FlexSheet > FlexSheetの使用 > リモートでロードおよび保存

FlexSheetでは、C1JSONRequestを使用してExcelファイルをリモートでロードおよび保存できます。それには、リモートURLを指定して、ExcelファイルまたはワークブックからFlexSheetコントロールにデータをロードし、FlexSheetデータをExcelファイルまたはワークブックとしてサーバーに保存します。

次の例は、FlexSheetHelperクラスのLoadメソッドを使用して、サーバーにあるExcelファイルをFlexSheetにロードします。

クライアント側でExcelをロードおよび保存するには、FlexSheetにjszip.min.jsファイルが必要です。そのため、このファイルをアプリケーションに追加し、各ビューまたは_Layout.cshtmlファイルの<head>セクションにファイルへの参照を提供する必要があります。

次のコード例は、ExcelファイルまたはワークブックからFlexSheetコントロールにデータをリモートにロードする方法を示します。

コードの場合

RemoteLoadController.cs 

C#
コードのコピー
public class RemoteController : Controller
{
    // GET: /<controller>/
    public ActionResult Index()
    {
        return View();
    }
    public ActionResult RemoteLoadXlsx()
    {
        return this.C1Json(FlexSheetHelper.Load("~/Content/ExcelFiles/WorkBook.xlsx"), null, null, JsonRequestBehavior.AllowGet);
    }
}

ここでは、リモートでロードされるExcelワークブックは、アプリケーションの「Content」フォルダに配置されます。

RemoteLoading.cshtml

Razor
コードのコピー
@using C1.Web.Mvc.Sheet;
<script src="http://cdnjs.cloudflare.com/ajax/libs/jszip/2.5.0/jszip.min.js"></script>

<div>   
@(Html.C1().FlexSheet().CssClass("flexSheet").Height(700).Width(700)
        .RemoteLoad(Url.Action("RemoteLoadXlsx"))
        )
</div>

先頭に戻る

コードの場合

RemoteSaveController.cs 

C#
コードのコピー
public class RemoteSaveController : Controller
{
    // GET: /<controller>/
    public static List<Sale> SALES = Sale.GetData(50).ToList();
    public ActionResult Index()
    {
        return View(SALES);
    }

    private const string FILE_PATH = "\\wwwroot\\uploadFile\\save.xlsx";
    public JsonResult RemoteSaveFile([FlexSheetRequest]FlexSheetSaveRequest request)
    {
        var success = true;
        var error = "";
        var app = GetService<IApplicationEnvironment>();
        var savePath = app.ApplicationBasePath + FILE_PATH;
        try
        {
            Stream st = request.GetFileStream();
            using (FileStream fs = new FileStream(savePath, FileMode.Create))
            {
                if (st != null)
                {
                    st.CopyTo(fs);
                }
            }
        }
        catch (Exception e)
        {
            success = false;
            error = e.ToString();
        }

        return this.C1Json(FlexSheetHelper.Save(success, error));
    }

    public FileResult DownloadFile()
    {
        var app = GetService<IApplicationEnvironment>();
        var savePath = app.ApplicationBasePath + FILE_PATH;
        var name = Path.GetFileName(FILE_PATH);
        return File(new FileStream(savePath, FileMode.Open, FileAccess.Read),
            "application/msexcel", name);
    }

    public static T GetService<T>() where T : class
    {
        var serviceProvider = CallContextServiceLocator.Locator.ServiceProvider;
        return serviceProvider.GetService(typeof(T)) as T;
    }
}


RemoteSaving.cshtml

Razor
コードのコピー
@using C1MvcFSheetNew.Models;
@model IEnumerable<sale>

<script>
        function remoteSave() {
            var flexSheet = wijmo.Control.getControl('#flexSheet');
            flexSheet.remoteSave(c1.mvc.grid.sheet.ContentType.Xlsx);
        }

        function onFileSaved(sender, args) {
            if (args.success) {
             window.location.href = '@Url.Action("DownloadFile")';
            } else {
                alert(args.error);
            }
        }
</script>

<div>
    @(Html.C1().FlexSheet().CssClass("flexSheet").Width("500px")
.Height("700px").RemoteSave(Url.Action("RemoteSaveFile"))
        .OnClientRemoteSaved("onFileSaved")
        .AddBoundSheet(sheet =>
            sheet.Bind(cv =>
                            cv.Bind(Model)))
    )
</div>

先頭に戻る

関連トピック