Features

リモートロード/保存

リモートロード/保存

何らかのアクションによってxlsxファイルまたはワークブックをロードし、それをサーバーに保存します。

機能

リモートロード/保存

この例は、何らかのアクションによってxlsxファイルまたはワークブックをロードし、それをサーバーに保存する方法を示します。
この例では、[保存]ボタンがクリックされると、
FlexSheetがファイルをサーバーに送信し、そのファイルをブラウザが自動的にサーバーからダウンロードします。

using C1.C1Excel;
using C1.Web.Mvc.Serialization;
using C1.Web.Mvc.Sheet;
using FlexSheetExplorer.Models;
using System;
using System.IO;
using System.Web.Mvc;

namespace FlexSheetExplorer.Controllers
{
    public partial class FlexSheetController : Controller
    {
        private const string _FILE_PATH = "~/Content/uploadFile/save.xlsx";

        public ActionResult RemoteLoadSave(string loadType)
        {
            ViewBag.LoadSaveTypes = new string[] { "Xlsx", "Workbook" };

            if (loadType == "Workbook")
            {
                ViewBag.LoadAction = "RemoteLoadWorkbook";
            }
            else
            {
                loadType = "Xlsx";
                ViewBag.LoadAction = "RemoteLoadXlsx";
            }
            ViewBag.LoadType = loadType;

            return View();
        }

        public ActionResult RemoteLoadWorkbook() {
            return this.C1Json(FlexSheetHelper.Load( WorkbookOM.GetWorkbook()),
                   null, null, JsonRequestBehavior.AllowGet);
        }

        public ActionResult RemoteLoadXlsx() {
            return this.C1Json(FlexSheetHelper.Load("~/Content/xlsxFile/example1.xlsx"),
                   null, null, JsonRequestBehavior.AllowGet);
        }

        public JsonResult RemoteSaveFile([FlexSheetRequest]FlexSheetSaveRequest request)
        {
            var success = true;
            var error = "";
            var savePath = Server.MapPath(_FILE_PATH);
            try
            {
                Stream st = request.GetFileStream();
                Workbook wb = request.Workbook;
                using (FileStream fs = new FileStream(savePath, FileMode.Create))
                {
                    if (st != null)
                    {
                        byte[] byteArray = new Byte[st.Length];
                        st.Read(byteArray, 0, (int)st.Length);
                        fs.Write(byteArray, 0, byteArray.Length);
                    }
                    else if (wb != null)
                    {
                        wb.ToC1XLBook().Save(fs, FileFormat.OpenXml);
                    }
                }
            }
            catch (Exception e)
            {
                success = false;
                error = e.ToString();
            }

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

        public FileResult DownloadFile()
        {
            var name = Path.GetFileName(_FILE_PATH);
            return File(Server.MapPath(_FILE_PATH), "application/msexcel", Url.Encode(name));
        }
    }
}
@section Scripts{
    <script>
        function remoteSave() {
            var combo = wijmo.Control.getControl('#saveType');
            var flexSheet = wijmo.Control.getControl('#flexSheet');
            flexSheet.remoteSave(c1.mvc.grid.sheet.ContentType[combo.selectedValue]);
        }

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

<div>
    <div class="copy">
        <h3>@Html.Raw(Resources.FlexSheet.RemoteLoadSave_Text4)</h3>

        <p>@Html.Raw(Resources.FlexSheet.RemoteLoadSave_Text0)</p>

        <p>
            @using (Html.BeginForm())
            {
                @(Html.C1().ComboBox().Name("loadType").Bind((string[])ViewBag.LoadSaveTypes)
                            .SelectedValue((string)ViewBag.LoadType))
                <button type="submit" class="btn btn-default">@Html.Raw(Resources.FlexSheet.RemoteLoadSave_Text6)</button>
            }
        </p>

        <p>
            @(Html.C1().ComboBox().Id("saveType").Bind((string[])ViewBag.LoadSaveTypes))
            <button type="button" class="btn btn-default" onclick="remoteSave()">@Html.Raw(Resources.FlexSheet.RemoteLoadSave_Text5)</button>
        </p>

    </div>
    <div>
        @(Html.C1().FlexSheet().CssClass("flexSheet").Id("flexSheet")
        .RemoteLoad(Url.Action((string)ViewBag.LoadAction))
        .RemoteSave(Url.Action("RemoteSaveFile"))
        .OnClientRemoteSaved("onFileSaved"))
    </div>
</div>
@section Summary{
<p>@Html.Raw(Resources.FlexSheet.RemoteLoadSave_Text3)</p>

}