Bu makalede, bir ASP.NET MVC uygulamasında Excel elektronik tablolarının nasıl oluşturulacağını, okunacağını ve düzenleneceğini öğreneceksiniz. Bunun için, aşağıda gösterildiği gibi, Excel dosyalarını görüntülemek ve düzenlemek için zengin özelliklere sahip bir ızgara kontrolünden oluşan bir elektronik tablo uygulaması oluşturacağız.

ASP.NET MVC Elektronik Tablo Uygulaması Oluşturmak için .NET API

ASP.NET MVC’de elektronik tablo uygulaması oluşturmak için Aspose.Cells.GridJs kullanacağız. API, elektronik tablo belgelerini hızlı ve kolay bir şekilde görüntülemek veya düzenlemek için web tabanlı uygulamalar oluşturmanıza olanak tanır. Ayrıca, popüler e-tablo (XLS, XLSX, XLSM, XLSB, CSV, SpreadsheetML, ODS) dosya biçimlerini (devamını okuyun) içe aktarabilirsiniz. Ayrıca, yalnızca yerleşik işlevleri değil, aynı zamanda özel formülleri de hesaplamak için güçlü ve zengin bir Formül Hesaplama Motoru sağlar. Aspose.Cells.GridJs’yi NuGet‘den kurabilirsiniz.

PM> Install-Package Aspose.Cells.GridJs

ASP.NET MVC Elektronik Tablo Uygulaması Oluşturma Adımları

Aşağıdakiler, ASP.NET MVC’de web tabanlı bir elektronik tablo uygulaması oluşturma adımlarıdır.

  1. Visual Studio’da yeni bir ASP.NET Core Web Uygulaması (Model-View-Controller) oluşturun.
  1. Aspose.Cells.GridJs’yi NuGet’ten kurun.
  1. HomeController.cs içine aşağıdaki kodu ekleyin.
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. Models klasöründe TestConfig.cs adlı yeni bir sınıf oluşturun ve aşağıdaki kodu ekleyin (ortamınıza göre klasör yollarını değiştirin).
public class TestConfig
{
    ///<summary>
    /// çalışma kitabı dosyalarını içeren dizin
    ///</summary>
    internal static String ListDir = @"D:\tmpdel\storage\wb";
    ///<summary>
    /// dosyaları depolamak için temp dizini
    ///</summary>
    internal static String TempDir = @"D:\tmpdel\storage\wb\tmp\";
}
  1. Modeller klasöründe LocalFileCache.cs adlı yeni bir sınıf oluşturun ve aşağıdaki kodu ekleyin.
/* Add the following namespaces as well.
using Aspose.Cells.GridJs;
using System.IO;
*/

public class LocalFileCache : GridCacheForStream
{

    ///<summary>
    /// Önbelleği kaydetmek için bu yöntemi uygulayın, akışı anahtar kimliğiyle önbellek nesnesine kaydedin.
    ///</summary>
    ///<param name="s"> kaynak akışı</param>
    ///<param name="uid"> anahtar kimliği.</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>
    /// Anahtar uid ile önbelleği yüklemek için bu yöntemi uygulayın, akışı önbellek nesnesinden döndürün.
    ///</summary>
    ///<param name="uid"> anahtar kimliği</param>
    ///<returns> önbellekten akış</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>
    /// dosyayı almak için url'yi eylem denetleyicisinde uygulayın
    ///</summary>
    ///<param name="uid"> anahtar kimliği</param>
    ///<returns></returns>
    public override String GetFileUrl(string uid)
    {
        return "/GridJs2/GetFile?id=" + uid;
    }

}
  1. GridJs2Controller.cs adlı yeni bir denetleyici oluşturun ve aşağıdaki kodu ekleyin.
/* 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 = yeni Liste<object> ();
        ArrayList dirlistsss = new ArrayList();
        ArrayList filelistsss = new ArrayList();

        DirectoryInfo dir = new DirectoryInfo(TestConfig.ListDir);

        //dizinin altındaki dosyaları bul
        FileInfo[] fi = dir.GetFiles();
        foreach (FileInfo f in fi)
        {
            String fname = f.FullName.ToString();
            dirlistsss.Add(fname);
            filelistsss.Add(Path.GetFileName(fname));
        }
        //  Veriyi gör.
        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);
        }
        //dönüş Dosyası(akış, "uygulama/sekizli akış", "akış dosyası");
        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]
    // gönderi: /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 kullanıyorsanız, bu api'yi ayarlamanız gerekir
    // 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>
    /// dosyayı indir
    ///</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. Startup.cs’nin Yapılandırma işlevine aşağıdaki kodu ekleyin ve lisans dosyasının yolunu ayarlayın (ücretsiz bir lisans alın).
/* 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 içine aşağıdaki kodu ekleyin.
@{
    ViewData["Title"] = "Home Page";
}
  1. Views/Home/ klasörü altında list.cshtml adlı yeni bir görünüm oluşturun ve aşağıdaki kodu ekleyin.
<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. GitHub’dan xspread klasörünü indirin ve aşağıda gösterildiği gibi wwwroot klasörünün altına yerleştirin.
  1. wwwroot/xspread/index.html’de belirtilen port numarasının projenin port numarası ile aynı olduğundan emin olun.

  2. Uygulamayı oluşturun ve en sevdiğiniz tarayıcıda çalıştırın.

Demo - ASP.NET MVC’de Excel Dosyaları Oluşturun veya Düzenleyin

Aşağıda az önce oluşturduğumuz ASP.NET MVC elektronik tablo uygulamasının gösterimi yer almaktadır.

Kaynak Kodunu İndir

Elektronik tablo uygulamasının tam kaynak kodunu GitHub adresinden indirebilirsiniz.

Ücretsiz Lisans Alın

Geçici lisans kullanarak Aspose.Cells.GridJs’yi değerlendirme sınırlamaları olmaksızın kullanabilirsiniz.

Çözüm

Bu makalede, Excel ve diğer elektronik tablo dosyalarını oluşturmak ve düzenlemek için çeşitli özelliklere sahip bir ASP.NET MVC elektronik tablo uygulaması oluşturmayı öğrendiniz. Bu uygulamayı özelleştirebilir veya kendi web uygulamanıza entegre edebilirsiniz. Herhangi bir sorunuz olursa forumumuza göndermekten çekinmeyin.

Ayrıca bakınız