<%@ WebHandler Language="C#" Class="importXlsx2" %> 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.SS.UserModel; using NPOI.POIFS; using NPOI.Util; using System.IO; public class importXlsx2 : IHttpHandler { authPermission objAuth = new authPermission(); string shortUrlHeader = HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Authority + "/"; public void ProcessRequest (HttpContext context) { 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 xlsx_serial = (context.Request["xlsx_serial"] == null) ? "" : context.Request["xlsx_serial"].ToString(); string import_col = (context.Request["import_col"] == null) ? "" : context.Request["import_col"].ToString(); string project_uid = (context.Request["project_uid"] == null) ? "" : context.Request["project_uid"].ToString(); if (xlsx_serial == "") { objRet.ret = "no"; objRet.err_code = "0001"; objRet.message = "無xlsx_serial!"; json.WriteObject(context.Response.OutputStream, objRet); return; } if (import_col == "") { objRet.ret = "no"; objRet.err_code = "0001"; objRet.message = "無import_col!"; json.WriteObject(context.Response.OutputStream, objRet); return; } autoBindDataTable projectSQL = new autoBindDataTable(string.Format("select * from projects where project_uid = '{0}'", project_uid)); if (projectSQL.dataRows.Count == 0) { objRet.ret = "no"; objRet.err_code = "0002"; objRet.message = "無此Project!"; json.WriteObject(context.Response.OutputStream, objRet); return; } string table_name = projectSQL.dataRows[0]["project_recTableName"].ToString(); projectSQL.disConnection(); string xlsxFileName = xlsx_serial + ".xlsx"; string filePath = string.Format("BackEnd/uploads/xlsx/{0}", xlsxFileName); string path = System.Web.HttpContext.Current.Server.MapPath("~/"); Stream xlsxStream = new FileStream(path + filePath, FileMode.Open); XSSFWorkbook workbook = new XSSFWorkbook(xlsxStream); workbook.MissingCellPolicy = NPOI.SS.UserModel.MissingCellPolicy.CREATE_NULL_AS_BLANK; XSSFSheet sheet = (XSSFSheet)workbook.GetSheetAt(0); int rowIndex = 0; int importNum = 0; int overNum = 0; int rowNum = 0; foreach (XSSFRow row in sheet) { List cells = row.Cells; List rowData = new List(); for (int colNumber = 0; colNumber < row.LastCellNum; colNumber++) { ICell cell = row.GetCell(colNumber, MissingCellPolicy.CREATE_NULL_AS_BLANK); rowData.Add(cell.ToString()); } rowNum = row.LastCellNum; string url = rowData[int.Parse(import_col)].ToString().Trim(); if (globalClass.isURL(url)) { string findUrlString = string.Format("select * from url where project_uid = '{0}' and url_directToUrl = '{1}' ", project_uid, url); autoBindDataTable findUrlSQL = new autoBindDataTable(findUrlString); string url_code = ""; if (findUrlSQL.dataRows.Count > 0) { urlBase objUrl = new urlBase(findUrlSQL.dataRows[0]); //objRet.urllist.Add(objUrl); url_code = findUrlSQL.dataRows[0]["url_Code"].ToString(); overNum++; } else { DataRow newRow = findUrlSQL.newRow; string shor_Code = globalClass.CreateCaseRandomCode(6); Boolean isCheck = false; url_code = shor_Code; while (isCheck == false) { string checkString = string.Format("select * from url where url_code Collate SQL_Latin1_General_CP1_CS_AS = '{0}'", shor_Code); autoBindDataTable checkSQL = new autoBindDataTable(checkString); if (checkSQL.dataRows.Count == 0) { isCheck = true; } else { shor_Code = globalClass.CreateCaseRandomCode(6); } checkSQL.disConnection(); } url_code = shor_Code; urlObj objUrl = new urlObj(); objUrl.url_uid = globalClass.CreateRandomCode(32); objUrl.project_uid = project_uid; objUrl.url_descript = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + " 透過excel上傳匯入"; objUrl.url_directToUrl = url; objUrl.url_Code = shor_Code; objUrl.url_playBtn = "N"; objUrl.url_fbTag = "N"; objUrl.url_gifTag = "N"; objUrl.url_gifLink = ""; objUrl.url_fbTitle = ""; objUrl.url_fbDescript = ""; objUrl.url_fbPixel = "N"; objUrl.url_fbPixelCode = ""; objUrl.url_googleAds = "N"; objUrl.url_googleAwConversionId = ""; objUrl.url_createUid = objAuth.user_uid; objUrl.url_photoId = ""; objUrl.updateData(); urlBase objb = new urlBase(objUrl.url_uid); objRet.urllist.Add(objb); importNum++; } row.CreateCell(row.LastCellNum).SetCellValue(shortUrlHeader + url_code); } else { row.CreateCell(row.LastCellNum).SetCellValue(""); } rowIndex++; } sheet.AutoSizeColumn(rowNum); MemoryStream ms = new MemoryStream(); //workbook.Write(ms); string xlsxPath = path + string.Format("BackEnd/uploads/xlsx/output_{0}.xlsx", xlsx_serial); using (var fs = new FileStream(xlsxPath, FileMode.Create, FileAccess.Write)) { workbook.Write(fs); fs.Close(); } using (var fs = new FileStream(xlsxPath, FileMode.Open, FileAccess.Read)) { long fileSize = fs.Length; byte[] fileBuffer = new byte[fileSize]; fs.Read(fileBuffer, 0, (int)fileSize); //context.Response.AddHeader("Content-Length", fileSize.ToString()); //context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename=\"{0}.xlsx\"", HttpUtility.UrlEncode(xlsx_serial, Encoding.UTF8))); // context.Response.BinaryWrite(fileBuffer); //context.ApplicationInstance.CompleteRequest(); //context.Response.Output.Flush(); fs.Close(); } //FileStream file = new FileStream(xlsxPath, FileMode.Create, FileAccess.Write); //workbook.Write(file); //ms.WriteTo(file); //file.Flush(); //file.Close(); //ms.Flush(); objRet.outputFile = shortUrlHeader + string.Format("BackEnd/uploads/xlsx/output_{0}.xlsx", xlsx_serial); objRet.ret = "yes"; objRet.overyNum = overNum; objRet.totalImportNum = importNum; 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 outputFile = ""; public int totalImportNum = 0; public int overyNum = 0; public List urllist = new List(); } }