이 기사에서는 ASP.NET MVC 응용 프로그램에서 Excel 스프레드시트를 만들고 읽고 편집하는 방법을 배웁니다. 이를 위해 아래와 같이 Excel 파일을 표시하고 편집하는 기능이 풍부한 그리드 컨트롤로 구성된 스프레드시트 응용 프로그램을 만듭니다.
![](images/ASP.NET-UI.jpg#center)
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에서 웹 기반 스프레드시트 응용 프로그램을 만드는 단계입니다.
- Visual Studio에서 새 ASP.NET Core 웹앱(Model-View-Controller)을 만듭니다.
![](images/Create-Project.jpg#center)
- NuGet에서 Aspose.Cells.GridJ를 설치합니다.
![](images/Install-AsposeCells_GridJs.jpg#center)
- 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 });
}
}
- 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\";
}
- 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;
}
}
- 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);
}
}
- 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");
- Views/Home/index.cshtml에 다음 코드를 삽입합니다.
@{
ViewData["Title"] = "Home Page";
}
- 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>
- 아래 그림과 같이 GitHub에서 xspread 폴더를 다운로드하여 wwwroot 폴더 아래에 배치합니다.
![](images/Import-GridJs-Folder.jpg#center)
wwwroot/xspread/index.html에 지정된 포트 번호가 프로젝트의 포트 번호와 동일한지 확인하십시오.
애플리케이션을 빌드하고 즐겨 사용하는 브라우저에서 실행합니다.
데모 - ASP.NET MVC에서 Excel 파일 생성 또는 편집
다음은 방금 만든 ASP.NET MVC 스프레드시트 응용 프로그램의 데모입니다.
![](images/GridJsDemo.gif#center)
소스 코드 다운로드
GitHub에서 스프레드시트 애플리케이션의 전체 소스 코드를 다운로드할 수 있습니다.
무료 라이선스 받기
임시 라이선스를 사용하여 평가 제한 없이 Aspose.Cells.GridJ를 사용할 수 있습니다.
결론
이 기사에서는 Excel 및 기타 스프레드시트 파일을 만들고 편집하기 위한 다양한 기능이 있는 ASP.NET MVC 스프레드시트 응용 프로그램을 만드는 방법을 배웠습니다. 이 응용 프로그램을 사용자 지정하거나 고유한 웹 응용 프로그램에 통합할 수 있습니다. 질문이 있는 경우 포럼에 자유롭게 게시하십시오.