در این مقاله با نحوه ایجاد، خواندن و ویرایش صفحات گسترده اکسل در یک برنامه ASP.NET MVC آشنا خواهید شد. برای این کار، ما یک برنامه صفحه گسترده متشکل از یک کنترل شبکه غنی از ویژگی ها برای نمایش و ویرایش فایل های اکسل، همانطور که در زیر نشان داده شده است، ایجاد می کنیم.

NET API برای ایجاد برنامه ASP.NET MVC Spreadsheet

برای ایجاد برنامه صفحه گسترده در ASP.NET MVC، از Aspose.Cells.GridJs استفاده می کنیم. API به شما این امکان را می دهد که برنامه های کاربردی مبتنی بر وب برای نمایش یا ویرایش اسناد صفحه گسترده به سرعت و آسانی ایجاد کنید. علاوه بر این، می توانید فرمت های فایل صفحه گسترده محبوب (XLS، XLSX، XLSM، XLSB، CSV، SpreadsheetML، ODS) را وارد کنید (بیشتر بخوانید). علاوه بر این، یک موتور محاسبات فرمول قوی و غنی برای محاسبه نه تنها توابع داخلی بلکه فرمول های سفارشی فراهم می کند. می توانید Aspose.Cells.GridJs را از NuGet نصب کنید.

PM> Install-Package Aspose.Cells.GridJs

مراحل ایجاد برنامه ASP.NET MVC Spreadsheet

در زیر مراحل ایجاد یک برنامه صفحه گسترده مبتنی بر وب در ASP.NET MVC آمده است.

  1. یک ASP.NET Core Web App (Model-View-Controller) در ویژوال استودیو ایجاد کنید.
  1. Aspose.Cells.GridJs را از NuGet نصب کنید.
  1. کد زیر را در HomeController.cs وارد کنید.
public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return RedirectToRoute("default",
          new { controller = "GridJs2", action = "List" });
        }

        public IActionResult Privacy()
        {
            return Redirect("https://about.aspose.app/legal/privacy-policy");
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
  1. یک کلاس جدید به نام TestConfig.cs در پوشه Models ایجاد کنید و کد زیر را اضافه کنید (مسیرهای پوشه را با توجه به محیط خود تغییر دهید).
public class TestConfig
{
    ///<summary>
    /// دایرکتوری که حاوی فایل های کتاب کار است
    ///</summary>
    internal static String ListDir = @"D:\tmpdel\storage\wb";
    ///<summary>
    //دایرکتوری temp برای ذخیره فایل ها
    ///</summary>
    internal static String TempDir = @"D:\tmpdel\storage\wb\tmp\";
}
  1. یک کلاس جدید به نام LocalFileCache.cs در پوشه Models ایجاد کنید و کد زیر را اضافه کنید.
/* Add the following namespaces as well.
using Aspose.Cells.GridJs;
using System.IO;
*/

public class LocalFileCache : GridCacheForStream
{

    ///<summary>
    /// این روش را برای ذخیره کش اجرا کنید، جریان را با شناسه کلید در شیء کش ذخیره کنید.
    ///</summary>
    ///<param name="s"> جریان منبع</param>
    ///<param name="uid"> او شناسه کلید</param>
    public override void SaveStream(Stream s, String uid)
    {
        String filepath = Path.Combine(Config.FileCacheDirectory + Path.DirectorySeparatorChar + "streamcache", uid.Replace('/', '.'));
        using (FileStream fs = new FileStream(filepath, FileMode.Create))
        {
            s.Position = 0;
            s.CopyTo(fs);
        }

    }

    ///<summary>
    /// این متد را برای بارگیری کش با key uid اجرا کنید، جریان را از شی cache برگردانید.
    ///</summary>
    ///<param name="uid"> شناسه کلید</param>
    ///<returns> جریان از حافظه پنهان</returns>
    public override Stream LoadStream(String uid)
    {
        String filepath = Path.Combine(Config.FileCacheDirectory + Path.DirectorySeparatorChar + "streamcache", uid.Replace('/', '.'));
        FileStream fs = new FileStream(filepath, FileMode.Open);
        return fs;
    }
    ///<summary>
    /// برای دریافت فایل، url را در کنترلر عمل پیاده سازی کنید
    ///</summary>
    ///<param name="uid"> شناسه کلید</param>
    ///<returns></returns>
    public override String GetFileUrl(string uid)
    {
        return "/GridJs2/GetFile?id=" + uid;
    }

}
  1. یک کنترلر جدید به نام GridJs2Controller.cs ایجاد کنید و کد زیر را اضافه کنید.
/* Add the following namespaces as well.
System.IO;
System.Collections;
System.Threading;
Microsoft.AspNetCore.StaticFiles;
Aspose.Cells.GridJs;
*/


[Route("[controller]/[action]")]
[ApiController]
public class GridJs2Controller : Controller
{

    public ActionResult List()
    {
        //this.ViewBag.list = لیست جدید<object> ()؛
        ArrayList dirlistsss = new ArrayList();
        ArrayList filelistsss = new ArrayList();

        DirectoryInfo dir = new DirectoryInfo(TestConfig.ListDir);

        //فایل های زیر دایرکتوری را پیدا کنید
        FileInfo[] fi = dir.GetFiles();
        foreach (FileInfo f in fi)
        {
            String fname = f.FullName.ToString();
            dirlistsss.Add(fname);
            filelistsss.Add(Path.GetFileName(fname));
        }
        //  ViewData.
        ViewBag.dirlist = dirlistsss;
        ViewBag.filelist = filelistsss;
        return View("~/Views/Home/list.cshtml");
    }

    // GET: /GridJs2/DetailJson?filename=
    public ActionResult DetailFileJson(string filename)
    {


        String file = Path.Combine(TestConfig.ListDir, filename);

        return DetailJson(file);
    }



    private ActionResult DetailJson(string path)
    {
        GridJsWorkbook wbj = new GridJsWorkbook();


        try
        {
            GridInterruptMonitor m = new GridInterruptMonitor();
            wbj.SetInterruptMonitorForLoad(m, 50 * 1000);
            Thread t1 = new Thread(new ParameterizedThreadStart(InterruptMonitor));
            t1.Start(new object[] { m, 90 * 1000 });




            using (FileStream fs = new FileStream(path, FileMode.Open))
            {
                wbj.ImportExcelFile(fs, GridJsWorkbook.GetGridLoadFormat(Path.GetExtension(path)));
            }

        }
        catch (Exception ex)
        {

            if (ex is GridCellException)
            {
                return Content(wbj.ErrorJson(((GridCellException)ex).Message + ((GridCellException)ex).Code), "text/plain", System.Text.Encoding.UTF8);
            }
            return Content(wbj.ErrorJson(ex.Message), "text/plain", System.Text.Encoding.UTF8);
        }
        //بازگشت فایل (جریان، "برنامه / جریان هشتگانه"، "استریم فایل");
        return Content(wbj.ExportToJson(), "text/plain", System.Text.Encoding.UTF8);
    }
    private static void InterruptMonitor(object o)
    {
        object[] os = (object[])o;
        try
        {
            Thread.Sleep((int)os[1]);

            ((GridInterruptMonitor)os[0]).Interrupt();
        }
        catch (ThreadInterruptedException e)
        {
            Console.WriteLine("Succeeded for load in give time.");
        }
    }
    [HttpPost]
    // پست: /GridJs2/UpdateCell
    public ActionResult UpdateCell()
    {

        string p = HttpContext.Request.Form["p"];
        string uid = HttpContext.Request.Form["uid"];
        GridJsWorkbook gwb = new GridJsWorkbook();
        String ret = gwb.UpdateCell(p, uid);

        return Content(ret, "text/plain", System.Text.Encoding.UTF8);
    }


    // GET: /GridJs2/Xspreadtml
    public ActionResult Xspreadtml(String filename)
    {
        return Redirect("~/xspread/index.html?file=" + filename);
    }

    // GET: /GridJs2/Image?uid=&id=

    public FileResult Image()
    {

        string fileid = HttpContext.Request.Query["id"];
        string uid = HttpContext.Request.Query["uid"];

        return new FileStreamResult(GridJsWorkbook.GetImageStream(uid, fileid), "image/png");
    }

    //اگر از GridCacheForStream استفاده می کنید، باید این api را تنظیم کنید
    // GET: /GridJs2/ImageUrl?uid=&id=
    public JsonResult ImageUrl(string id, string uid)
    {


        return new JsonResult(GridJsWorkbook.GetImageUrl(uid, id, "."));

    }
    private string GetMimeType(string FileName)
    {
        string contentType;
        new FileExtensionContentTypeProvider().TryGetContentType(FileName, out contentType);
        return contentType ?? "application/octet-stream";
    }




    // GET: /GridJs2/GetFile?id

    public FileResult GetFile(string id)
    {

        string fileid = id;
        string mimeType = GetMimeType(fileid);

        return File(GridJsWorkbook.CacheImp.LoadStream(fileid), mimeType, fileid.Replace('/', '.'));
    }


    ///<summary>
    /// دریافت فایل
    ///</summary>
    ///<returns></returns>
    [HttpPost]

    public JsonResult Download()
    {

        string p = HttpContext.Request.Form["p"];
        string uid = HttpContext.Request.Form["uid"];
        string filename = "123.xlsx";

        GridJsWorkbook wb = new GridJsWorkbook();
        wb.MergeExcelFileFromJson(uid, p);



        GridInterruptMonitor m = new GridInterruptMonitor();
        wb.SetInterruptMonitorForSave(m);
        Thread t1 = new Thread(new ParameterizedThreadStart(InterruptMonitor));
        t1.Start(new object[] { m, 30 * 1000 });
        try
        {
            wb.SaveToCacheWithFileName(uid, filename, null);
        }
        catch (Exception ex)
        {

            if (ex is GridCellException)
            {
                return Json(((GridCellException)ex).Message + ((GridCellException)ex).Code);
            }
        }
        if (filename.EndsWith(".html"))
        {
            filename += ".zip";
        }
        String fileurl = GridJsWorkbook.CacheImp.GetFileUrl(uid + "/" + filename);
        return new JsonResult(fileurl);
    }


}
  1. کد زیر را در تابع Configure Startup.cs وارد کنید و مسیر فایل لایسنس را تنظیم کنید (دریافت مجوز به صورت رایگان).
/* Add the following namespace as well.
using Aspose.Cells.GridJs;
*/

License l = new License();
LocalFileCache mwc = new LocalFileCache();
GridJsWorkbook.CacheImp = mwc;
l.SetLicense(@"D:\licenses\Conholdate.Total.Product.Family.lic");
  1. کد زیر را در Views/Home/index.cshtml وارد کنید.
@{
    ViewData["Title"] = "Home Page";
}
  1. یک نمای جدید به نام list.cshtml در پوشه Views/Home/ ایجاد کنید و کد زیر را وارد کنید.
<div id="body" style="  width: 800px; height: 800px; border: 1px solid; overflow-y: scroll; SCROLLBAR-BASE-COLOR: #8ccc8c;">
    @foreach (var item in ViewBag.filelist)
    {
        <a href="Xspreadtml?filename=@item" target="_blank"><em> @item   </em>  </a> <br />
    }
</div>
  1. پوشه xspread را از GitHub دانلود کنید و مانند تصویر زیر آن را در پوشه wwwroot قرار دهید.
  1. مطمئن شوید که شماره پورت مشخص شده در wwwroot/xspread/index.html با شماره پورت پروژه یکی باشد.

  2. برنامه را بسازید و در مرورگر مورد علاقه خود اجرا کنید.

نسخه ی نمایشی - ایجاد یا ویرایش فایل های اکسل در ASP.NET MVC

در زیر نمایش برنامه صفحه گسترده ASP.NET MVC است که ما به تازگی ایجاد کرده ایم.

کد منبع را دانلود کنید

می توانید کد منبع کامل برنامه صفحه گسترده را از GitHub دانلود کنید.

مجوز رایگان دریافت کنید

شما می توانید از Aspose.Cells.GridJs بدون محدودیت ارزیابی با استفاده از [مجوز موقت] استفاده کنید.

نتیجه

در این مقاله، نحوه ایجاد یک برنامه صفحه گسترده ASP.NET MVC با طیف وسیعی از ویژگی ها برای ایجاد و ویرایش اکسل و سایر فایل های صفحه گسترده را یاد گرفتید. شما می توانید این برنامه را سفارشی کنید یا آن را در برنامه وب خود ادغام کنید. در صورت داشتن هرگونه سوال، در صورت تمایل به [تالار گفتمان7 ما ارسال کنید.

همچنین ببینید