亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

asp.net 利用NPOI導出Excel通用類的方法

2024-07-10 13:32:28
字體:
來源:轉載
供稿:網友

解決中文文件名保存Excel亂碼問題,主要是判斷火狐或者IE瀏覽器,然后做對應的判斷處理,核心代碼如下:

 System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";  //設置下載的Excel文件名/  if (System.Web.HttpContext.Current.Request.ServerVariables["http_user_agent"].ToString().IndexOf("Firefox") != -1)  {     //火狐瀏覽器        System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "=?UTF-8?B?" + Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(fileName)) + "?=")); } else {     //IE等瀏覽器     System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8))); } 

廢話不多說,直接上類庫代碼,ATNPOIHelper.cs:

using System; using System.Linq; using System.Web; using System.IO; using NPOI; using NPOI.SS.Util; using NPOI.HSSF.Util; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using System.Data; using System.Collections.Generic; using System.Text;  namespace AT.Utility.DotNetFile {   /*   導出Excel包含的功能:   1.多表頭導出最多支持到三行,表頭格式說明   相鄰父列頭之間用'#'分隔,父列頭與子列頭用空格(' ‘)分隔,相鄰子列頭用逗號分隔(‘,')   兩行:序號#分公司#組別#本日成功簽約單數 預警,續約,流失,合計#累計成功簽約單數 預警,續約,流失,合計#任務數#完成比例#排名   三行:等級#級別#上期結存 件數,重量,比例#本期調入 收購調入 件數,重量,比例#本期發出 車間投料 件數,重量,比例#本期發出 產品外銷百分比 件數,重量,比例#平均值   三行時請注意:列頭要重復   2.添加表頭標題功能   3.添加序號功能   4.根據數據設置列寬    缺陷:   數據內容不能合并列合并行    改進思路:   添加一屬性:設置要合并的列,為了實現多列合并可以這樣設置{“列1,列2”,”列4”}     */   /// <summary>   /// 利用NPOI實現導出Excel   /// </summary>   public class ATNPOIHelper   {      #region 初始化      /// <summary>     /// 聲明 HSSFWorkbook 對象     /// </summary>     private static HSSFWorkbook _workbook;      /// <summary>     /// 聲明 HSSFSheet 對象     /// </summary>     private static HSSFSheet _sheet;      #endregion      #region Excel導出      /// <summary>     /// Excel導出     /// </summary>     /// <param name="fileName">文件名稱 如果為空或NULL,則默認“新建Excel.xls”</param>     /// <param name="list"></param>     /// <param name="ColMergeNum">合計:末行合計時,合并的列數</param>     /// <param name="method">導出方式 1:WEB導出(默認)2:按文件路徑導出</param>     /// <param name="filePath">文件路徑 如果WEB導出,則可以為空;如果按文件路徑導出,則默認桌面路徑</param>     public static void Export(string fileName, IList<NPOIModel> list, int ColMergeNum, int method = 1, string filePath = null)     {       // 文件名稱       if (!string.IsNullOrEmpty(fileName))       {         if (fileName.IndexOf('.') == -1)         {           fileName += ".xls";         }         else         {           fileName = fileName.Substring(1, fileName.IndexOf('.')) + ".xls";         }       }       else       {         fileName = "新建Excel.xls";       }       // 文件路徑       if (2 == method && string.IsNullOrEmpty(filePath))       {         filePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);       }       // 調用導出處理程序       Export(list, ColMergeNum);       // WEB導出       if (1 == method)       {         System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";         //設置下載的Excel文件名/         if (System.Web.HttpContext.Current.Request.ServerVariables["http_user_agent"].ToString().IndexOf("Firefox") != -1)         {           //火狐瀏覽器              System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "=?UTF-8?B?" + Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(fileName)) + "?="));         }         else         {           //IE等瀏覽器           System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)));         }         using (MemoryStream ms = new MemoryStream())         {           //將工作簿的內容放到內存流中           _workbook.Write(ms);           //將內存流轉換成字節數組發送到客戶端           System.Web.HttpContext.Current.Response.BinaryWrite(ms.GetBuffer());           System.Web.HttpContext.Current.Response.End();           _sheet = null;           _workbook = null;         }       }       else if (2 == method)       {         using (FileStream fs = File.Open(filePath, FileMode.Append))         {           _workbook.Write(fs);           _sheet = null;           _workbook = null;         }       }     }      /// <summary>     /// 導出方法實現     /// </summary>     /// <param name="list"></param>     private static void Export(IList<NPOIModel> list, int ColMergeNum)     {        #region 變量聲明        // 初始化       _workbook = new HSSFWorkbook();       // 聲明 Row 對象       IRow _row;       // 聲明 Cell 對象       ICell _cell;       // 總列數       int cols = 0;       // 總行數       int rows = 0;       // 行數計數器       int rowIndex = 0;       // 單元格值       string drValue = null;        #endregion        foreach (NPOIModel model in list)       {         // 工作薄命名         if (model.sheetName != null)           _sheet = (HSSFSheet)_workbook.CreateSheet(model.sheetName);         else           _sheet = (HSSFSheet)_workbook.CreateSheet();          // 獲取數據源         DataTable dt = model.dataSource;         // 初始化         rowIndex = 0;         // 獲取總行數         rows = GetRowCount(model.headerName);         // 獲取總列數         cols = GetColCount(model.headerName);          //合計:合并表格末行N列,rows為表頭行數,dt.Rows.Count為數據行數         if (ColMergeNum > 1)         {           CellRangeAddress region_Merge = new CellRangeAddress(rows + dt.Rows.Count, rows + dt.Rows.Count, 0, ColMergeNum - 1);           _sheet.AddMergedRegion(region_Merge);         }          ICellStyle myBodyStyle = bodyStyle;         ICellStyle myTitleStyle = titleStyle;         ICellStyle myDateStyle = dateStyle;         ICellStyle myBodyRightStyle = bodyRightStyle;         // 循環行數         foreach (DataRow row in dt.Rows)         {            #region 新建表,填充表頭,填充列頭,樣式            if (rowIndex == 65535 || rowIndex == 0)           {             if (rowIndex != 0)               _sheet = (HSSFSheet)_workbook.CreateSheet();              // 構建行             for (int i = 0; i < rows + model.isTitle; i++)             {               _row = _sheet.GetRow(i);               // 創建行               if (_row == null)                 _row = _sheet.CreateRow(i);                for (int j = 0; j < cols; j++)                 _row.CreateCell(j).CellStyle = myBodyStyle;             }              // 如果存在表標題             if (model.isTitle > 0)             {               // 獲取行               _row = _sheet.GetRow(0);               // 合并單元格               CellRangeAddress region = new CellRangeAddress(0, 0, 0, (cols - 1));               _sheet.AddMergedRegion(region);               // 填充值               _row.CreateCell(0).SetCellValue(model.tableTitle);               // 設置樣式               _row.GetCell(0).CellStyle = myTitleStyle;               // 設置行高               _row.HeightInPoints = 20;             }              // 取得上一個實體             NPOIHeader lastRow = null;             IList<NPOIHeader> hList = GetHeaders(model.headerName, rows, model.isTitle);             // 創建表頭             foreach (NPOIHeader m in hList)             {               var data = hList.Where(c => c.firstRow == m.firstRow && c.lastCol == m.firstCol - 1);               if (data.Count() > 0)               {                 lastRow = data.First();                 if (m.headerName == lastRow.headerName)                   m.firstCol = lastRow.firstCol;               }                // 獲取行               _row = _sheet.GetRow(m.firstRow);               // 合并單元格               CellRangeAddress region = new CellRangeAddress(m.firstRow, m.lastRow, m.firstCol, m.lastCol);                _sheet.AddMergedRegion(region);               // 填充值               _row.CreateCell(m.firstCol).SetCellValue(m.headerName);             }             // 填充表頭樣式             for (int i = 0; i < rows + model.isTitle; i++)             {               _row = _sheet.GetRow(i);               for (int j = 0; j < cols; j++)               {                 _row.GetCell(j).CellStyle = myBodyStyle;                 //設置列寬                 _sheet.SetColumnWidth(j, (model.colWidths[j] + 1) * 450);               }             }              rowIndex = (rows + model.isTitle);           }            #endregion            #region 填充內容            // 構建列           _row = _sheet.CreateRow(rowIndex);           foreach (DataColumn column in dt.Columns)           {             // 添加序號列             if (1 == model.isOrderby && column.Ordinal == 0)             {               _cell = _row.CreateCell(0);               _cell.SetCellValue(rowIndex - rows);               _cell.CellStyle = myBodyStyle;             }              // 創建列             _cell = _row.CreateCell(column.Ordinal + model.isOrderby);              // 獲取值             drValue = row[column].ToString();              switch (column.DataType.ToString())             {               case "System.String"://字符串類型                 _cell.SetCellValue(drValue);                 _cell.CellStyle = myBodyStyle;                 break;               case "System.DateTime"://日期類型                 DateTime dateV;                 DateTime.TryParse(drValue, out dateV);                 _cell.SetCellValue(dateV);                  _cell.CellStyle = myDateStyle;//格式化顯示                 break;               case "System.Boolean"://布爾型                 bool boolV = false;                 bool.TryParse(drValue, out boolV);                 _cell.SetCellValue(boolV);                 _cell.CellStyle = myBodyStyle;                 break;               case "System.Int16"://整型               case "System.Int32":               case "System.Int64":               case "System.Byte":                 int intV = 0;                 int.TryParse(drValue, out intV);                 _cell.SetCellValue(intV);                 _cell.CellStyle = myBodyRightStyle;                 break;               case "System.Decimal"://浮點型               case "System.Double":                 double doubV = 0;                 double.TryParse(drValue, out doubV);                 _cell.SetCellValue(doubV.ToString("f2"));                 _cell.CellStyle = myBodyRightStyle;                 break;               case "System.DBNull"://空值處理                 _cell.SetCellValue("");                 break;               default:                 _cell.SetCellValue("");                 break;             }            }            #endregion            rowIndex++;         }       }     }      #region 輔助方法      /// <summary>     /// 表頭解析     /// </summary>     /// <remarks>     /// </remarks>     /// <param name="header">表頭</param>     /// <param name="rows">總行數</param>     /// <param name="addRows">外加行</param>     /// <param name="addCols">外加列</param>     /// <returns></returns>     private static IList<NPOIHeader> GetHeaders(string header, int rows, int addRows)     {       // 臨時表頭數組       string[] tempHeader;       string[] tempHeader2;       // 所跨列數       int colSpan = 0;       // 所跨行數       int rowSpan = 0;       // 單元格對象       NPOIHeader model = null;       // 行數計數器       int rowIndex = 0;       // 列數計數器       int colIndex = 0;       //        IList<NPOIHeader> list = new List<NPOIHeader>();       // 初步解析       string[] headers = header.Split(new string[] { "#" }, StringSplitOptions.RemoveEmptyEntries);       // 表頭遍歷       for (int i = 0; i < headers.Length; i++)       {         // 行數計數器清零         rowIndex = 0;         // 列數計數器清零         colIndex = 0;         // 獲取所跨行數         rowSpan = GetRowSpan(headers[i], rows);         // 獲取所跨列數         colSpan = GetColSpan(headers[i]);          // 如果所跨行數與總行數相等,則不考慮是否合并單元格問題         if (rows == rowSpan)         {           colIndex = GetMaxCol(list);           model = new NPOIHeader(headers[i],             addRows,             (rowSpan - 1 + addRows),             colIndex,             (colSpan - 1 + colIndex),             addRows);           list.Add(model);           rowIndex += (rowSpan - 1) + addRows;         }         else         {           // 列索引           colIndex = GetMaxCol(list);           // 如果所跨行數不相等,則考慮是否包含多行           tempHeader = headers[i].Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);           for (int j = 0; j < tempHeader.Length; j++)           {              // 如果總行數=數組長度             if (1 == GetColSpan(tempHeader[j]))             {               if (j == tempHeader.Length - 1 && tempHeader.Length < rows)               {                 model = new NPOIHeader(tempHeader[j],                   (j + addRows),                   (j + addRows) + (rows - tempHeader.Length),                   colIndex,                   (colIndex + colSpan - 1),                   addRows);                 list.Add(model);               }               else               {                 model = new NPOIHeader(tempHeader[j],                     (j + addRows),                     (j + addRows),                     colIndex,                     (colIndex + colSpan - 1),                     addRows);                 list.Add(model);               }             }             else             {               // 如果所跨列數不相等,則考慮是否包含多列               tempHeader2 = tempHeader[j].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);               for (int m = 0; m < tempHeader2.Length; m++)               {                 // 列索引                 colIndex = GetMaxCol(list) - colSpan + m;                 if (j == tempHeader.Length - 1 && tempHeader.Length < rows)                 {                   model = new NPOIHeader(tempHeader2[m],                     (j + addRows),                     (j + addRows) + (rows - tempHeader.Length),                     colIndex,                     colIndex,                     addRows);                   list.Add(model);                 }                 else                 {                   model = new NPOIHeader(tempHeader2[m],                       (j + addRows),                       (j + addRows),                       colIndex,                       colIndex,                       addRows);                   list.Add(model);                 }               }             }             rowIndex += j + addRows;           }         }       }       return list;     }      /// <summary>     /// 獲取最大列     /// </summary>     /// <param name="list"></param>     /// <returns></returns>     private static int GetMaxCol(IList<NPOIHeader> list)     {       int maxCol = 0;       if (list.Count > 0)       {         foreach (NPOIHeader model in list)         {           if (maxCol < model.lastCol)             maxCol = model.lastCol;         }         maxCol += 1;       }        return maxCol;     }      /// <summary>     /// 獲取表頭行數     /// </summary>     /// <param name="newHeaders">表頭文字</param>     /// <returns></returns>     private static int GetRowCount(string newHeaders)     {       string[] ColumnNames = newHeaders.Split(new char[] { '@' });       int Count = 0;       if (ColumnNames.Length <= 1)         ColumnNames = newHeaders.Split(new char[] { '#' });       foreach (string name in ColumnNames)       {         int TempCount = name.Split(new char[] { ' ' }).Length;         if (TempCount > Count)           Count = TempCount;       }       return Count;     }      /// <summary>     /// 獲取表頭列數     /// </summary>     /// <param name="newHeaders">表頭文字</param>     /// <returns></returns>     private static int GetColCount(string newHeaders)     {       string[] ColumnNames = newHeaders.Split(new char[] { '@' });       int Count = 0;       if (ColumnNames.Length <= 1)         ColumnNames = newHeaders.Split(new char[] { '#' });       Count = ColumnNames.Length;       foreach (string name in ColumnNames)       {         int TempCount = name.Split(new char[] { ',' }).Length;         if (TempCount > 1)           Count += TempCount - 1;       }       return Count;     }      /// <summary>     /// 列頭跨列數     /// </summary>     /// <remarks>     /// </remarks>     /// <param name="newHeaders">表頭文字</param>     /// <returns></returns>     private static int GetColSpan(string newHeaders)     {       return newHeaders.Split(',').Count();     }      /// <summary>     /// 列頭跨行數     /// </summary>      /// <remarks>     /// </remarks>     /// <param name="newHeaders">列頭文本</param>     /// <param name="rows">表頭總行數</param>     /// <returns></returns>     private static int GetRowSpan(string newHeaders, int rows)     {       int Count = newHeaders.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries).Length;       // 如果總行數與當前表頭所擁有行數相等       if (rows == Count)         Count = 1;       else if (Count < rows)         Count = 1 + (rows - Count);       else         throw new Exception("表頭格式不正確!");       return Count;     }      #endregion      #region 單元格樣式      /// <summary>     /// 數據單元格樣式     /// </summary>     private static ICellStyle bodyStyle     {       get       {         ICellStyle style = _workbook.CreateCellStyle();         style.Alignment = HorizontalAlignment.CENTER; //居中         style.VerticalAlignment = VerticalAlignment.CENTER;//垂直居中          style.WrapText = true;//自動換行         // 邊框         style.BorderBottom = BorderStyle.THIN;         style.BorderLeft = BorderStyle.THIN;         style.BorderRight = BorderStyle.THIN;         style.BorderTop = BorderStyle.THIN;         // 字體         //IFont font = _workbook.CreateFont();         //font.FontHeightInPoints = 10;         //font.FontName = "宋體";         //style.SetFont(font);          return style;       }     }      /// <summary>     /// 數據單元格樣式     /// </summary>     private static ICellStyle bodyRightStyle     {       get       {         ICellStyle style = _workbook.CreateCellStyle();         style.Alignment = HorizontalAlignment.RIGHT; //居中         style.VerticalAlignment = VerticalAlignment.CENTER;//垂直居中          style.WrapText = true;//自動換行         // 邊框         style.BorderBottom = BorderStyle.THIN;         style.BorderLeft = BorderStyle.THIN;         style.BorderRight = BorderStyle.THIN;         style.BorderTop = BorderStyle.THIN;         // 字體         //IFont font = _workbook.CreateFont();         //font.FontHeightInPoints = 10;         //font.FontName = "宋體";         //style.SetFont(font);          return style;       }     }      /// <summary>     /// 標題單元格樣式     /// </summary>     private static ICellStyle titleStyle     {       get       {         ICellStyle style = _workbook.CreateCellStyle();         style.Alignment = HorizontalAlignment.CENTER; //居中         style.VerticalAlignment = VerticalAlignment.CENTER;//垂直居中          style.WrapText = true;//自動換行           //IFont font = _workbook.CreateFont();         //font.FontHeightInPoints = 14;         //font.FontName = "宋體";         //font.Boldweight = (short)FontBoldWeight.BOLD;         //style.SetFont(font);          return style;       }     }      /// <summary>     /// 日期單元格樣式     /// </summary>     private static ICellStyle dateStyle     {       get       {         ICellStyle style = _workbook.CreateCellStyle();         style.Alignment = HorizontalAlignment.CENTER; //居中         style.VerticalAlignment = VerticalAlignment.CENTER;//垂直居中          style.WrapText = true;//自動換行         // 邊框         style.BorderBottom = BorderStyle.THIN;         style.BorderLeft = BorderStyle.THIN;         style.BorderRight = BorderStyle.THIN;         style.BorderTop = BorderStyle.THIN;         // 字體         //IFont font = _workbook.CreateFont();         //font.FontHeightInPoints = 10;         //font.FontName = "宋體";         //style.SetFont(font);          IDataFormat format = _workbook.CreateDataFormat();         style.DataFormat = format.GetFormat("yyyy-MM-dd");         return style;       }     }      #endregion      #endregion   }    /// <summary>   /// 實體類   /// </summary>   public class NPOIModel   {     /// <summary>     /// 數據源     /// </summary>     public DataTable dataSource { get; private set; }     /// <summary>     /// 要導出的數據列數組     /// </summary>     public string[] fileds { get; private set; }     /// <summary>     /// 工作薄名稱數組     /// </summary>     public string sheetName { get; private set; }     /// <summary>     /// 表標題     /// </summary>     public string tableTitle { get; private set; }     /// <summary>     /// 表標題是否存在 1:存在 0:不存在     /// </summary>     public int isTitle { get; private set; }     /// <summary>     /// 是否添加序號     /// </summary>     public int isOrderby { get; private set; }     /// <summary>     /// 表頭     /// </summary>     public string headerName { get; private set; }     /// <summary>     /// 取得列寬     /// </summary>     public int[] colWidths { get; private set; }     /// <summary>     /// 構造函數     /// </summary>     /// <remarks>     /// </remarks>     /// <param name="dataSource">數據來源 DataTable</param>     /// <param name="filed">要導出的字段,如果為空或NULL,則默認全部</param>      /// <param name="sheetName">工作薄名稱</param>     /// <param name="headerName">表頭名稱 如果為空或NULL,則默認數據列字段     /// 相鄰父列頭之間用'#'分隔,父列頭與子列頭用空格(' ')分隔,相鄰子列頭用逗號分隔(',')     /// 兩行:序號#分公司#組別#本日成功簽約單數 預警,續約,流失,合計#累計成功簽約單數 預警,續約,流失,合計#任務數#完成比例#排名      /// 三行:等級#級別#上期結存 件數,重量,比例#本期調入 收購調入 件數,重量,比例#本期發出 車間投料 件數,重量,比例#本期發出 產品外銷百分比 件數,重量,比例#平均值      /// 三行時請注意:列頭要重復     /// </param>     /// <param name="tableTitle">表標題</param>      /// <param name="isOrderby">是否添加序號 0:不添加 1:添加</param>     public NPOIModel(DataTable dataSource, string filed, string sheetName, string headerName, string tableTitle = null, int isOrderby = 0)     {       if (!string.IsNullOrEmpty(filed))       {         this.fileds = filed.ToUpper().Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);          // 移除多余數據列         for (int i = dataSource.Columns.Count - 1; i >= 0; i--)         {           DataColumn dc = dataSource.Columns[i];           if (!this.fileds.Contains(dataSource.Columns[i].Caption.ToUpper()))           {             dataSource.Columns.Remove(dataSource.Columns[i]);           }         }          // 列索引         int colIndex = 0;         // 循環排序         for (int i = 0; i < dataSource.Columns.Count; i++)         {           // 獲取索引           colIndex = GetColIndex(dataSource.Columns[i].Caption.ToUpper());           // 設置下標           dataSource.Columns[i].SetOrdinal(colIndex);         }       }       else       {         this.fileds = new string[dataSource.Columns.Count];         for (int i = 0; i < dataSource.Columns.Count; i++)         {           this.fileds[i] = dataSource.Columns[i].ColumnName;         }       }       this.dataSource = dataSource;        if (!string.IsNullOrEmpty(sheetName))       {         this.sheetName = sheetName;       }       if (!string.IsNullOrEmpty(headerName))       {         this.headerName = headerName;       }       else       {         this.headerName = string.Join("#", this.fileds);       }       if (!string.IsNullOrEmpty(tableTitle))       {         this.tableTitle = tableTitle;         this.isTitle = 1;       }       // 取得數據列寬 數據列寬可以和表頭列寬比較,采取最長寬度        colWidths = new int[this.dataSource.Columns.Count];       foreach (DataColumn item in this.dataSource.Columns)       {         colWidths[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length;       }       // 循環比較最大寬度       for (int i = 0; i < this.dataSource.Rows.Count; i++)       {         for (int j = 0; j < this.dataSource.Columns.Count; j++)         {           int intTemp = Encoding.GetEncoding(936).GetBytes(this.dataSource.Rows[i][j].ToString()).Length;           if (intTemp > colWidths[j])           {             colWidths[j] = intTemp;           }         }       }       if (isOrderby > 0)       {         this.isOrderby = isOrderby;         this.headerName = "序號#" + this.headerName;       }     }      /// <summary>     /// 獲取列名下標     /// </summary>     /// <param name="colName">列名稱</param>     /// <returns></returns>     private int GetColIndex(string colName)     {       for (int i = 0; i < this.fileds.Length; i++)       {         if (colName == this.fileds[i])           return i;       }       return 0;     }   }    /// <summary>   /// 表頭構建類   /// </summary>   public class NPOIHeader   {     /// <summary>     /// 表頭     /// </summary>     public string headerName { get; set; }     /// <summary>     /// 起始行     /// </summary>     public int firstRow { get; set; }     /// <summary>     /// 結束行     /// </summary>     public int lastRow { get; set; }     /// <summary>     /// 起始列     /// </summary>     public int firstCol { get; set; }     /// <summary>     /// 結束列     /// </summary>     public int lastCol { get; set; }     /// <summary>     /// 是否跨行     /// </summary>     public int isRowSpan { get; private set; }     /// <summary>     /// 是否跨列     /// </summary>     public int isColSpan { get; private set; }     /// <summary>     /// 外加行     /// </summary>     public int rows { get; set; }      public NPOIHeader() { }     /// <summary>     /// 構造函數     /// </summary>     /// <param name="headerName">表頭</param>     /// <param name="firstRow">起始行</param>     /// <param name="lastRow">結束行</param>     /// <param name="firstCol">起始列</param>     /// <param name="lastCol">結束列</param>     /// <param name="rows">外加行</param>     /// <param name="cols">外加列</param>     public NPOIHeader(string headerName, int firstRow, int lastRow, int firstCol, int lastCol, int rows = 0)     {       this.headerName = headerName;       this.firstRow = firstRow;       this.lastRow = lastRow;       this.firstCol = firstCol;       this.lastCol = lastCol;       // 是否跨行判斷       if (firstRow != lastRow)         isRowSpan = 1;       if (firstCol != lastCol)         isColSpan = 1;        this.rows = rows;     }   } } 

3、導出代碼示例如下:

/// <summary> /// 導出測點列表表格 /// </summary> [HttpGet] [AllowAnonymous] public void ExportMeasurePointData(string TreeID, string TreeType) {   DataTable dtResult = new DataTable();   DataTable dtExcel = new DataTable();   try   {     string sql = string.Format("EXEC P_GET_ZXJG_TagList '{0}','{1}'", TreeID, TreeType);     dtResult = QuerySQL.GetDataTable(sql);     dtExcel = dtResult.Copy();     dtExcel.Columns.Add("xuhao", typeof(string));     dtExcel.Columns.Add("StrValueTime", typeof(string));     dtExcel.Columns["xuhao"].SetOrdinal(0);     dtExcel.Columns["StrValueTime"].SetOrdinal(2);     for (int i = 0; i < dtResult.Rows.Count; i++)     {       dtExcel.Rows[i]["xuhao"] = (i + 1).ToString();       dtExcel.Rows[i]["StrValueTime"] = Convert.ToDateTime(dtResult.Rows[i]["F_ValueTime"]).ToString("yyyy-MM-dd HH:mm:ss");     }     List<NPOIModel> list = new List<NPOIModel>();     list.Add(new NPOIModel(dtExcel, "xuhao;F_Description;StrValueTime;F_Value;F_Unit;F_AlmLow;F_AlmUp", "sheet", "序號#監測點#采集時間#當前數值#工程單位#報警下限#報警上限"));     ATNPOIHelper.Export("測點列表", list, 0);   }   catch (Exception ex)   {    } } 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩激情视频在线| 日本精品久久中文字幕佐佐木| 欧美日韩国产一中文字不卡| 亚洲欧美国产精品久久久久久久| 国语自产精品视频在线看抢先版图片| 亚洲午夜未满十八勿入免费观看全集| 国产这里只有精品| 欧美国产精品日韩| 久久久久女教师免费一区| 国产免费久久av| 日韩有码片在线观看| 国产精品自产拍高潮在线观看| 欧美日韩中文字幕在线| 人九九综合九九宗合| 亚洲japanese制服美女| 中文字幕久精品免费视频| 欧美激情欧美狂野欧美精品| 姬川优奈aav一区二区| 亚洲福利视频网| 亚洲成人激情图| 日韩精品在线影院| 久久亚洲精品网站| 成人午夜黄色影院| 久久99视频免费| 国产精品吊钟奶在线| 成人妇女免费播放久久久| 亚洲精品www| 精品久久久久久久久国产字幕| 国产精品久久久久久久久久东京| 欧美夜福利tv在线| 美乳少妇欧美精品| 欧美性猛交xxxx乱大交3| 欧美视频13p| 亚洲女在线观看| 中文字幕久久久av一区| 青青在线视频一区二区三区| 国产精品露脸自拍| 精品成人在线视频| 中文字幕国产精品| 欧美人与性动交a欧美精品| 午夜精品蜜臀一区二区三区免费| 中文字幕国产精品久久| 亚洲成人a**站| 国内精品模特av私拍在线观看| 久久精品精品电影网| 国产中文欧美精品| 色av吧综合网| 午夜精品久久久久久久久久久久久| 日韩精品在线影院| 国产精品一区二区三区成人| 91美女福利视频高清| 久久久精品国产网站| 九九九热精品免费视频观看网站| 日韩美女av在线免费观看| 亚洲精品久久久久久久久久久久| 亚洲精品欧美极品| 久久精品电影网站| 尤物yw午夜国产精品视频明星| 久久韩剧网电视剧| 国产丝袜一区视频在线观看| 亚洲美女久久久| 亚洲人成人99网站| 久久精品久久久久久| 日本一区二区三区在线播放| 国产日韩欧美电影在线观看| 国模视频一区二区| 97成人精品视频在线观看| 久久精品中文字幕免费mv| 庆余年2免费日韩剧观看大牛| 欧美成人精品一区二区| 欧美激情亚洲激情| 亚洲免费影视第一页| 欧美精品激情视频| 亚洲美女免费精品视频在线观看| 欧美午夜精品久久久久久人妖| 国产精品久久久久久av下载红粉| 亚洲丝袜在线视频| 国产久一一精品| 免费97视频在线精品国自产拍| 91久久国产综合久久91精品网站| 国产精品精品视频一区二区三区| 欧美久久精品午夜青青大伊人| 大胆人体色综合| 国产99久久精品一区二区永久免费| 国产精品99久久99久久久二8| 日韩高清人体午夜| 国产美女搞久久| 亚洲**2019国产| 黄网动漫久久久| 精品久久久久久久久久| 欧美高清在线播放| 欧美大片欧美激情性色a∨久久| 日韩av色综合| 亚洲欧美精品伊人久久| 伊人久久久久久久久久| 97在线看免费观看视频在线观看| 久久久精品2019中文字幕神马| 欧美黄色性视频| 日韩高清免费观看| 亚洲一级片在线看| 精品国产1区2区| 精品久久中文字幕久久av| 国产欧美精品一区二区三区-老狼| 国产精品91久久久久久| 亚洲毛茸茸少妇高潮呻吟| 国产成人精品久久| 插插插亚洲综合网| 欧美性猛交丰臀xxxxx网站| 国产精品永久免费观看| 亚洲xxx自由成熟| 全色精品综合影院| 这里只有视频精品| 欧美激情网站在线观看| 日韩国产激情在线| 欧美黑人性猛交| 中文字幕精品www乱入免费视频| 麻豆国产精品va在线观看不卡| 欧美日韩午夜剧场| 17婷婷久久www| 欧美做受高潮1| 久久久国产精品免费| 久久精品欧美视频| 日韩av快播网址| 亚洲一区二区中文字幕| 高清日韩电视剧大全免费播放在线观看| 亚洲第一区第二区| 欧美性在线视频| 国产不卡av在线免费观看| 欧美性xxxxxx| 久久精品91久久香蕉加勒比| 98精品国产高清在线xxxx天堂| 成人国产精品久久久久久亚洲| 中文字幕亚洲色图| 九色精品免费永久在线| 狠狠爱在线视频一区| 亚洲韩国欧洲国产日产av| 欧美一级视频免费在线观看| 精品欧美aⅴ在线网站| 精品福利在线视频| 精品一区二区三区三区| 国产精品免费电影| 久久久精品亚洲| 亚洲欧美中文字幕在线一区| 亚洲a区在线视频| 麻豆国产va免费精品高清在线| 国产精品91在线观看| 国产精品视频在线播放| 亚洲电影免费观看高清| 精品国产91久久久久久老师| 91欧美视频网站| 国产成人久久久| 久久香蕉国产线看观看网| 国产一区玩具在线观看| 国产成人一区二区在线| 最近2019免费中文字幕视频三| 欧美精品在线观看91| 国产在线播放不卡| 中文字幕综合一区| 亚洲三级 欧美三级| 久久免费视频在线观看| 成人久久久久久| 亚洲高清福利视频| 日本韩国欧美精品大片卡二| 久久综合久中文字幕青草|