In diesem Artikel erfahren Sie, wie Sie Excel-Tabellen in einer ASP.NET MVC Anwendung erstellen, lesen und bearbeiten. Dazu erstellen wir eine Tabellenkalkulationsanwendung, die aus einem funktionsreichen Rastersteuerelement zum Anzeigen und Bearbeiten von Excel Dateien besteht, wie unten gezeigt.

.NET API zum Erstellen einer ASP.NET MVC-Tabellenkalkulationsanwendung

Um die Tabellenkalkulationsanwendung in ASP.NET MVC zu erstellen, verwenden wir Aspose.Cells.GridJs. Mit der API können Sie webbasierte Anwendungen erstellen, um Tabellendokumente schnell und einfach anzuzeigen oder zu bearbeiten. Darüber hinaus können Sie die gängigen Dateiformate für Tabellenkalkulationen (XLS, XLSX, XLSM, XLSB, CSV, SpreadsheetML, ODS) importieren (weiterlesen). Darüber hinaus bietet es eine starke und reichhaltige Formelberechnungs-Engine, um nicht nur die integrierten Funktionen, sondern auch benutzerdefinierte Formeln zu berechnen. Sie können Aspose.Cells.GridJs von NuGet installieren.

PM> Install-Package Aspose.Cells.GridJs

Schritte zum Erstellen einer ASP.NET MVC-Tabellenkalkulationsanwendung

Im Folgenden sind die Schritte zum Erstellen einer webbasierten Tabellenkalkulationsanwendung in ASP.NET MVC aufgeführt.

  1. Erstellen Sie in Visual Studio eine neue ASP.NET Core-Web-App (Model-View-Controller).
  1. Installieren Sie Aspose.Cells.GridJs von NuGet.
  1. Fügen Sie den folgenden Code in HomeController.cs ein.
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. Erstellen Sie eine neue Klasse namens „TestConfig.cs“ im Ordner Models, und fügen Sie den folgenden Code hinzu (ändern Sie die Ordnerpfade entsprechend Ihrer Umgebung).
public class TestConfig
{
    ///<summary>
    /// das Verzeichnis, das Arbeitsmappendateien enthält
    ///</summary>
    internal static String ListDir = @"D:\tmpdel\storage\wb";
    ///<summary>
    /// temp Verzeichnis zum Speichern von Dateien
    ///</summary>
    internal static String TempDir = @"D:\tmpdel\storage\wb\tmp\";
}
  1. Erstellen Sie im Ordner Models eine neue Klasse mit dem Namen LocalFileCache.cs, und fügen Sie den folgenden Code hinzu.
/* Add the following namespaces as well.
using Aspose.Cells.GridJs;
using System.IO;
*/

public class LocalFileCache : GridCacheForStream
{

    ///<summary>
    /// Implementieren Sie diese Methode, um den Cache zu speichern, und speichern Sie den Stream im Cache objekt mit der Schlüssel-ID.
    ///</summary>
    ///<param name="s"> der Quellstrom</param>
    ///<param name="uid"> die Schlüssel-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>
    /// Implementieren Sie diese Methode, um den Cache mit dem Schlüssel uid zu laden und den Stream aus dem Cache objekt zurückzugeben.
    ///</summary>
    ///<param name="uid"> die Schlüssel-ID</param>
    ///<returns> den Stream aus dem Cache</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>
    /// Implementieren Sie die URL im Aktionscontroller, um die Datei abzurufen
    ///</summary>
    ///<param name="uid"> die Schlüssel-ID</param>
    ///<returns></returns>
    public override String GetFileUrl(string uid)
    {
        return "/GridJs2/GetFile?id=" + uid;
    }

}
  1. Erstellen Sie einen neuen Controller namens GridJs2Controller.cs und fügen Sie den folgenden Code hinzu.
/* 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 = neue Liste<object> ();
        ArrayList dirlistsss = new ArrayList();
        ArrayList filelistsss = new ArrayList();

        DirectoryInfo dir = new DirectoryInfo(TestConfig.ListDir);

        //finden Sie Dateien unter dem Verzeichnis
        FileInfo[] fi = dir.GetFiles();
        foreach (FileInfo f in fi)
        {
            String fname = f.FullName.ToString();
            dirlistsss.Add(fname);
            filelistsss.Add(Path.GetFileName(fname));
        }
        //  Daten anzeigen.
        ViewBag.dirlist = dirlistsss;
        ViewBag.filelist = filelistsss;
        return View("~/Views/Home/list.cshtml");
    }

    // ERHALTEN: /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 File(stream, "application/octet-stream", "streamfile");
        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]
    // Beitrag: /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);
    }


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

    // ERHALTEN: /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");
    }

    //Wenn Sie GridCacheForStream verwenden, müssen Sie diese API festlegen
    // ERHALTEN: /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";
    }




    // ERHALTEN: /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>
    /// Download Datei
    ///</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. Fügen Sie den folgenden Code in die Configure Funktion von Startup.cs ein und legen Sie den Pfad der Lizenzdatei fest (kostenlose Lizenz erhalten).
/* 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. Fügen Sie den folgenden Code in Views/Home/index.cshtml ein.
@{
    ViewData["Title"] = "Home Page";
}
  1. Erstellen Sie eine neue Ansicht mit dem Namen list.cshtml im Ordner Views/Home/ und fügen Sie den folgenden Code ein.
<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. Laden Sie den Ordner xspread von GitHub herunter und platzieren Sie ihn wie unten gezeigt im Ordner wwwroot.
  1. Stellen Sie sicher, dass die in wwwroot/xspread/index.html angegebene Portnummer mit der Portnummer des Projekts übereinstimmt.

  2. Erstellen Sie die Anwendung und führen Sie sie in Ihrem bevorzugten Browser aus.

Demo – Erstellen oder Bearbeiten von Excel Dateien in ASP.NET MVC

Das Folgende ist die Demonstration der ASP.NET MVC-Tabellenkalkulationsanwendung, die wir gerade erstellt haben.

Quellcode herunterladen

Sie können den vollständigen Quellcode der Tabellenkalkulationsanwendung von GitHub herunterladen.

Holen Sie sich eine kostenlose Lizenz

Sie können Aspose.Cells.GridJs ohne Evaluierungseinschränkungen mit einer temporären Lizenz verwenden.

Fazit

In diesem Artikel haben Sie gelernt, wie Sie eine ASP.NET MVC-Tabellenkalkulationsanwendung mit einer Reihe von Funktionen zum Erstellen und Bearbeiten von Excel und anderen Tabellenkalkulationsdateien erstellen. Sie können diese Anwendung anpassen oder in Ihre eigene Webanwendung integrieren. Falls Sie Fragen haben, können Sie diese gerne in unserem Forum posten.

Siehe auch