이 기사에서는 ASP.NET MVC 응용 프로그램에서 Excel 스프레드시트를 만들고 읽고 편집하는 방법을 배웁니다. 이를 위해 아래와 같이 Excel 파일을 표시하고 편집하는 기능이 풍부한 그리드 컨트롤로 구성된 스프레드시트 응용 프로그램을 만듭니다.

ASP.NET MVC 스프레드시트 응용 프로그램을 만드는 .NET API

ASP.NET MVC에서 스프레드시트 응용 프로그램을 만들기 위해 Aspose.Cells.GridJs를 사용합니다. API를 사용하면 스프레드시트 문서를 빠르고 쉽게 표시하거나 편집하는 웹 기반 응용 프로그램을 만들 수 있습니다. 또한 널리 사용되는 스프레드시트(XLS, XLSX, XLSM, XLSB, CSV, SpreadsheetML, ODS) 파일 형식(더 읽기)을 가져올 수 있습니다. 또한 강력하고 풍부한 Formula Calculation Engine을 제공하여 내장 함수뿐만 아니라 사용자 정의 수식까지 계산합니다. NuGet에서 Aspose.Cells.GridJ를 설치할 수 있습니다.

PM> Install-Package Aspose.Cells.GridJs

ASP.NET MVC 스프레드시트 응용 프로그램을 만드는 단계

다음은 ASP.NET MVC에서 웹 기반 스프레드시트 응용 프로그램을 만드는 단계입니다.

  1. Visual Studio에서 새 ASP.NET Core 웹앱(Model-View-Controller)을 만듭니다.
  1. NuGet에서 Aspose.Cells.GridJ를 설치합니다.
  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. Models 폴더에 TestConfig.cs라는 새 클래스를 만들고 다음 코드를 추가합니다(사용자 환경에 따라 폴더 경로 변경).
public class TestConfig
{
    ///<summary>
    /// 통합 문서 파일이 포함된 디렉토리
    ///</summary>
    internal static String ListDir = @"D:\tmpdel\storage\wb";
    ///<summary>
    /// 파일을 저장할 임시 디렉토리
    ///</summary>
    internal static String TempDir = @"D:\tmpdel\storage\wb\tmp\";
}
  1. Models 폴더에 LocalFileCache.cs라는 새 클래스를 만들고 다음 코드를 추가합니다.
/* Add the following namespaces as well.
using Aspose.Cells.GridJs;
using System.IO;
*/

public class LocalFileCache : GridCacheForStream
{

    ///<summary>
    /// 이 메서드를 구현하여 캐시를 저장하고 스트림을 키 ID로 캐시 개체에 저장합니다.
    ///</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>
    /// 이 메서드를 구현하여 uid 키를 사용하여 캐시를 로드하고 캐시 개체에서 스트림을 반환합니다.
    ///</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));
        }
        //  뷰데이터.
        ViewBag.dirlist = dirlistsss;
        ViewBag.filelist = filelistsss;
        return View("~/Views/Home/list.cshtml");
    }

    // GET: /GridJs2/DetailJson?파일 이름=
    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(스트림, "응용 프로그램/옥텟 스트림", "스트림 파일");
        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);
    }

    // 가져오기: /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를 설정해야 합니다.
    // 가져오기: /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. Startup.cs의 Configure 기능에 다음 코드를 삽입하고 라이선스 파일의 경로를 설정합니다(무료로 라이선스 받기).
/* 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. Views/Home/ 폴더 아래에 list.cshtml이라는 새 보기를 만들고 다음 코드를 삽입합니다.
<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에서 xspread 폴더를 다운로드하여 wwwroot 폴더 아래에 배치합니다.
  1. wwwroot/xspread/index.html에 지정된 포트 번호가 프로젝트의 포트 번호와 동일한지 확인하십시오.

  2. 애플리케이션을 빌드하고 즐겨 사용하는 브라우저에서 실행합니다.

데모 - ASP.NET MVC에서 Excel 파일 생성 또는 편집

다음은 방금 만든 ASP.NET MVC 스프레드시트 응용 프로그램의 데모입니다.

소스 코드 다운로드

GitHub에서 스프레드시트 애플리케이션의 전체 소스 코드를 다운로드할 수 있습니다.

무료 라이선스 받기

임시 라이선스를 사용하여 평가 제한 없이 Aspose.Cells.GridJ를 사용할 수 있습니다.

결론

이 기사에서는 Excel 및 기타 스프레드시트 파일을 만들고 편집하기 위한 다양한 기능이 있는 ASP.NET MVC 스프레드시트 응용 프로그램을 만드는 방법을 배웠습니다. 이 응용 프로그램을 사용자 지정하거나 고유한 웹 응용 프로그램에 통합할 수 있습니다. 질문이 있는 경우 포럼에 자유롭게 게시하십시오.

또한보십시오