I den här artikeln kommer du att lära dig hur du skapar, läser och redigerar Excel-kalkylblad i en ASP.NET MVC-applikation. För detta kommer vi att skapa en kalkylbladsapplikation som består av en funktionsrik rutnätskontroll för att visa och redigera Excel-filer, som visas nedan.

.NET API för att skapa ASP.NET MVC-kalkylbladsapplikation

För att skapa kalkylbladsapplikationen i ASP.NET MVC kommer vi att använda Aspose.Cells.GridJs. API:et låter dig skapa webbaserade applikationer för att visa eller redigera kalkylarksdokument snabbt och enkelt. Dessutom kan du importera de populära kalkylarket (XLS, XLSX, XLSM, XLSB, CSV, SpreadsheetML, ODS) filformat (läs mer). Dessutom ger den en stark och rik formelberäkningsmotor för att beräkna inte bara de inbyggda funktionerna utan även anpassade formler. Du kan installera Aspose.Cells.GridJs från NuGet.

PM> Install-Package Aspose.Cells.GridJs

Steg för att skapa ASP.NET MVC-kalkylbladsapplikation

Följande är stegen för att skapa en webbaserad kalkylbladsapplikation i ASP.NET MVC.

  1. Skapa en ny ASP.NET Core Web App (Model-View-Controller) i Visual Studio.
  1. Installera Aspose.Cells.GridJs från NuGet.
  1. Infoga följande kod i 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. Skapa en ny klass med namnet TestConfig.cs i Models-mappen och lägg till följande kod (ändra mappsökvägarna enligt din miljö).
public class TestConfig
{
    ///<summary>
    /// katalogen som innehåller arbetsboksfiler
    ///</summary>
    internal static String ListDir = @"D:\tmpdel\storage\wb";
    ///<summary>
    /// temp katalog för att lagra filer
    ///</summary>
    internal static String TempDir = @"D:\tmpdel\storage\wb\tmp\";
}
  1. Skapa en ny klass med namnet LocalFileCache.cs i mappen Models och lägg till följande kod.
/* Add the following namespaces as well.
using Aspose.Cells.GridJs;
using System.IO;
*/

public class LocalFileCache : GridCacheForStream
{

    ///<summary>
    /// Implementera denna metod för att spara cache, spara strömmen till cacheobjektet med nyckel-id.
    ///</summary>
    ///<param name="s"> källströmmen</param>
    ///<param name="uid"> han nyckel-id.</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>
    /// Implementera denna metod för att ladda cache med nyckel-uid, returnera strömmen från cache-objektet.
    ///</summary>
    ///<param name="uid"> nyckel-id</param>
    ///<returns> strömmen från cachen</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>
    /// implementera url in action controller för att hämta filen
    ///</summary>
    ///<param name="uid"> nyckel-id</param>
    ///<returns></returns>
    public override String GetFileUrl(string uid)
    {
        return "/GridJs2/GetFile?id=" + uid;
    }

}
  1. Skapa en ny kontroller som heter GridJs2Controller.cs och lägg till följande kod.
/* 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 = ny lista<object> ();
        ArrayList dirlistsss = new ArrayList();
        ArrayList filelistsss = new ArrayList();

        DirectoryInfo dir = new DirectoryInfo(TestConfig.ListDir);

        //hitta filer under katalogen
        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");
    }

    // Hämta: /GridJs2/DetailJson?filnamn=
    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 File(ström, "applikation/oktett-ström", "strömfil");
        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]
    // inlägg: /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);
    }


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

    // Hämta: /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");
    }

    //om du använder GridCacheForStream måste du ställa in denna 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>
    /// nedladdning fil
    ///</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. Infoga följande kod i konfigureringsfunktionen i Startup.cs och ställ in licensfilens sökväg (få en licens gratis).
/* 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. Infoga följande kod i Views/Home/index.cshtml.
@{
    ViewData["Title"] = "Home Page";
}
  1. Skapa en ny vy med namnet list.cshtml under Views/Home/ folder och infoga följande kod.
<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. Ladda ner mappen xspread från GitHub och placera den under wwwroot-mappen, som visas nedan.
  1. Se till att portnumret som anges i wwwroot/xspread/index.html är detsamma som projektets portnummer.

  2. Bygg applikationen och kör den i din favoritwebbläsare.

Demo - Skapa eller redigera Excel-filer i ASP.NET MVC

Följande är en demonstration av ASP.NET MVC-kalkylprogram som vi just har skapat.

Ladda ner källkod

Du kan ladda ner hela källkoden för kalkylarksapplikationen från GitHub.

Skaffa en gratis licens

Du kan använda Aspose.Cells.GridJs utan utvärderingsbegränsningar med en tillfällig licens.

Slutsats

I den här artikeln har du lärt dig hur du skapar ett ASP.NET MVC-kalkylbladsprogram med en rad funktioner för att skapa och redigera Excel- och andra kalkylbladsfiler. Du kan anpassa denna applikation eller integrera den i din egen webbapplikation. Om du har några frågor, skicka gärna ett inlägg till vårt forum.

Se även