透過陣列轉欄位型態
陣列function可儲存不同的cell
using NPOI.XSSF.UserModel; using NPOI.SS.UserModel; private string saveExcel(string processID, string fileName, string sqlDate) { AbstractEngine engine = NJPublicFunc.GetEngine(); try { if (!File.Exists(Server.MapPath("~\\tempFolder\\" + processID))) //建立資料夾 { System.IO.Directory.CreateDirectory(Server.MapPath("~\\tempFolder\\" + processID)); } string dt = DateTime.Now.ToString("yyyy_MM_dd_hhmmss"); string saveName = fileName + dt + ".xlsx"; // 暫存檔名 string saveFilePath = Server.MapPath("~\\tempFolder\\" + processID + "\\" + saveName); XSSFWorkbook oWorkbook = new XSSFWorkbook(); // 建立.xlsx setISheet oSheet = new setISheet(); oSheet._ISheet = oWorkbook.CreateSheet("sheet1"); // 建立資料表 #region 寫入excel string doubleIndex = ",2,6,7,"; // 需轉為數值的位置 DataSet ds = ; if (ds.Tables[0].Rows.Count > 0) { int i=0; // 標題 foreach (DataColumn column in ds.Tables[0].Columns) { oSheet.Cells[0, i] = column.ColumnName; i++; } // 內容 for (i = 0; i < ds.Tables[0].Rows.Count; i++) { for (int j = 0; j < ds.Tables[0].Columns.Count; j++) { if (doubleIndex.IndexOf("," + j.ToString() + ",") > -1) // 數值 { oSheet.Cells[i + 1, j] = parseDouble(ds.Tables[0].Rows[i][j]); } else // 文字 { oSheet.Cells[i + 1, j] = ds.Tables[0].Rows[i][j].ToString(); } } } } #endregion // 儲存excel FileStream sw = File.Create(saveFilePath); oWorkbook.Write(sw); sw.Close(); } catch (Exception ex) { MessageBox(ex.ToString()); } finally { if (engine != null) { engine.close(); } } return ""; } private string saveCsv(string processID, string fileName, string sqlDate) { AbstractEngine engine = NJPublicFunc.GetEngine(); try { if (!File.Exists(Server.MapPath("~\\tempFolder\\" + processID))) //建立資料夾 { System.IO.Directory.CreateDirectory(Server.MapPath("~\\tempFolder\\" + processID)); } string dt = DateTime.Now.ToString("yyyy_MM_dd_hhmmss"); string saveName = fileName + dt + ".csv"; // 暫存檔名 string saveFilePath = Server.MapPath("~\\tempFolder\\" + processID + "\\" + saveName); StreamWriter sw = new StreamWriter(saveFilePath); // 建立.csv #region 寫入Csv DataSet ds = ; if (ds.Tables[0].Rows.Count > 0) { int i = 0; // 標題 for (i = 0; i < ds.Tables[0].Columns.Count; i++) { if (i != 0) { sw.Write(","); } sw.Write(ds.Tables[0].Columns[i].ColumnName); } // 內容 for (i = 0; i < ds.Tables[0].Rows.Count; i++) { sw.WriteLine(""); for (int j = 0; j < ds.Tables[0].Columns.Count; j++) { if (j != 0) { sw.Write(","); } sw.Write(ds.Tables[0].Rows[i][j].ToString()); } } } #endregion sw.Close(); // 儲存CSV return saveFilePath; } catch (Exception ex) { MessageBox(ex.ToString()); } finally { if (engine != null) { engine.close(); } } return ""; } /// <summary> /// 下載檔案 /// </summary> /// <param name="downloadName">檔案名稱</param> /// <param name="filePath">檔案位置</param> private void downloadFile(string downloadName,string filePath) { string fileExt = System.IO.Path.GetExtension(filePath); // 副檔名 Response.Clear(); Response.ClearHeaders(); Response.Buffer = true; Response.AppendHeader("Content-Disposition", "Attachment;Filename=" + Utility.UrlEncode(downloadName + fileExt)); Response.ContentType = "application/x-download"; Response.ContentEncoding = System.Text.Encoding.UTF8; FileInfo fileInfo = new FileInfo(filePath); Response.AddHeader("Content-Length", fileInfo.Length.ToString()); Response.WriteFile(filePath); Response.Flush(); Response.End(); Response.Close(); } /// <summary> /// 轉型double型態 /// </summary> /// <param name="obj"></param> /// <returns></returns> private double parseDouble(object obj) { string str = NJPublicFunc.objToString(obj); double result; if (double.TryParse(str, out result) == false) { result = 0; } return result; } #region Excel的欄位建立存取方法 /// <summary> /// 存取資料表的Cells /// </summary> private class setISheet { public ISheet _ISheet; public setCell Cells { get { setCell cell = new setCell(); cell._ISheet = _ISheet; return cell; } } } /// <summary> /// 將Cell建立並取值 /// </summary> private class setCell { public ISheet _ISheet; public object this[object rowIndex, object columnIndex] { get { int row = (int)rowIndex; int col = (int)columnIndex; if (_ISheet.GetRow(row) == null || _ISheet.GetRow(row).GetCell(col) == null) { return ""; } return _ISheet.GetRow(row).GetCell(col); } set { int row = (int)rowIndex; int col = (int)columnIndex; if (_ISheet.GetRow(row) == null) { _ISheet.CreateRow(row); } if (_ISheet.GetRow(row).GetCell(col) == null) { _ISheet.GetRow(row).CreateCell(col); _ISheet.GetRow(row).GetCell(col).SetCellType(NPOI.SS.UserModel.CellType.Blank); } if (value.GetType() == typeof(double)) // 數值 { _ISheet.GetRow(row).GetCell(col).SetCellValue((double)value); } else // 文字 { _ISheet.GetRow(row).GetCell(col).SetCellValue(value.ToString()); } } } } #endregion