<%@ WebHandler Language="C#" Class="importXlsx" %> using System; using System.Web; using System.Runtime.Serialization.Json; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Web.Services.Protocols; using System.Security.Cryptography; using System.Text; using System.Web.SessionState; using System.Data; using System.Collections.Generic; using NPOI; using NPOI.HPSF; using NPOI.HSSF; using NPOI.HSSF.UserModel; using NPOI.XSSF; using NPOI.XSSF.UserModel; using NPOI.POIFS; using NPOI.Util; using System.IO; public class importXlsx : IHttpHandler { authPermission objAuth = new authPermission(); public void ProcessRequest (HttpContext context) { string xlsxFileCode = globalClass.CreateRandomCode(12); string xlsxFileName = xlsxFileCode + ".xlsx"; string projPath = "uploads/xlsx/"; result objRet = new result(); DataContractJsonSerializer json = new DataContractJsonSerializer(objRet.GetType()); context.Response.ContentType = "application/json;charset=utf-8"; if (objAuth.isLogin() == false) { objRet.ret = "no"; objRet.err_code = "9999"; objRet.message = "尚未登入!"; json.WriteObject(context.Response.OutputStream, objRet); return; } string base64_string = (context.Request["base64"] == null) ? "" : context.Request["base64"].ToString(); if (base64_string == "") { objRet.ret = "no"; objRet.err_code = "0003"; objRet.message = "無base64檔案!"; json.WriteObject(context.Response.OutputStream, objRet); return; } string filePath = string.Format("BackEnd/uploads/xlsx/{0}.xlsx", xlsxFileCode); string path = System.Web.HttpContext.Current.Server.MapPath("~/"); globalClass.Base64ToFile(base64_string, path + filePath); //globalClass.Base64ToAzure(base64_string, projPath + xlsxFileName); XSSFWorkbook workbook = new XSSFWorkbook(globalClass.Base64ToStream(base64_string)); XSSFSheet sheet = (XSSFSheet)workbook.GetSheetAt(0); DataTable dt = new DataTable(xlsxFileCode); XSSFRow headerRow = (XSSFRow)sheet.GetRow(0); int asciiA = 1; foreach (XSSFCell headerCell in headerRow) { dt.Columns.Add("A" + asciiA.ToString()); objRet.columns.Add(headerCell.ToString()); col newCol = new col(); newCol.data = "A" + asciiA.ToString(); newCol.visible = "true"; newCol.title = headerCell.ToString(); objRet.cols.Add(newCol); asciiA++; } int rowIndex = 0; int rowNum = 0; int py = sheet.PhysicalNumberOfRows; foreach (XSSFRow row in sheet) { DataRow dataRow = dt.NewRow(); string hasData = "N"; foreach (XSSFCell cell in row.Cells) { if (cell.ToString() != "") { hasData = "Y"; break; } } if (hasData == "Y" && rowIndex != 0) { dataRow.ItemArray = row.Cells.ToArray(); dt.Rows.Add(dataRow); rowNum++; } rowIndex++; } int totalRowNum = rowNum; DataTable dt2 = dt.Clone(); if (totalRowNum < 6) { foreach (DataRow row in dt.Rows) { dt2.ImportRow(row); } } else { for (int i = 0; i < 3; i++) { dt2.ImportRow(dt.Rows[i]); } for (int i = (totalRowNum - 3); i < totalRowNum; i++) { dt2.ImportRow(dt.Rows[i]); } } string datatableJsonString = ""; datatableJsonString = JsonConvert.SerializeObject(dt2); objRet.data = datatableJsonString; objRet.ret = "yes"; objRet.totalRecNum = totalRowNum; objRet.xlsxSerial = xlsxFileCode; json.WriteObject(context.Response.OutputStream, objRet); return; } public bool IsReusable { get { return false; } } public class result { public string ret = "no"; public string err_code = "0000"; public string message = ""; public string xlsxSerial = ""; public int totalRecNum = 0; public List columns = new List(); public List cols = new List(); public string data = ""; } public class col { public string data = ""; public string visible = ""; public string title = ""; } }