使用NPOI导出Excel文档

新建一个ExcelService类,编写共用程式


public class ExcelService
{
        /// <summary>
        /// 設置Excel單元格樣式
        /// </summary>
        /// <param name="book"></param>
        /// <param name="strFontName"></param>
        /// <param name="align"></param>
        /// <param name="valign"></param>
        /// <param name="border">實線</param>
        /// <param name="topThin">上邊框實線</param>
        /// <param name="topDot">上邊框虛線</param>
        /// <param name="leftright">左右實線</param>
        /// <returns></returns>
        public HSSFCellStyle SetExcelCellStyle(NPOI.HSSF.UserModel.HSSFWorkbook book, string strFontName = "新細明體", int align = 0, int valign = 0, int border = 0, int topThin = 0, int topDot = 0, int leftright = 0, short FontHeightInPoints = 12, short fontFontWeight = 0)
        {
            HSSFCellStyle style = book.CreateCellStyle() as HSSFCellStyle;
            if (align == 1)
                style.Alignment = HorizontalAlignment.Center; // 水平居中
            else if (align == 2)
                style.Alignment = HorizontalAlignment.Right;
            else
                style.Alignment = HorizontalAlignment.Left;
            if (valign == 1)
                style.VerticalAlignment = VerticalAlignment.Center; // 垂直居中
            if (border != 0) // 所有邊框為實線
            {
                style.BorderTop = BorderStyle.Thin; // 實線
                style.BorderRight = BorderStyle.Thin;
                style.BorderLeft = BorderStyle.Thin;
                style.BorderBottom = BorderStyle.Thin;
            }


            if (topThin != 0) // 上邊框實線
                style.BorderTop = BorderStyle.Thin; // 虛線
            if (topDot != 0) // 上邊框虛線
                style.BorderTop = BorderStyle.Dotted; // 虛線
            if (leftright != 0) // 左右實線
            {
                style.BorderRight = BorderStyle.Thin;
                style.BorderLeft = BorderStyle.Thin;
            }
            NPOI.SS.UserModel.IFont font = book.CreateFont(); // 創建字體
            style.SetFont(font);
            font.FontHeightInPoints = FontHeightInPoints;
            if (fontFontWeight != 0)   // 字體加粗
                // font.Boldweight = Font.BOLD; // 没效果
                font.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold; //  Bold = 700
            font.FontName = strFontName;
            return style;
        }


        /// <summary>
        /// 設置單元格樣式
        /// </summary>
        /// <param name="row"></param>
        /// <param name="colNum"></param>
        /// <param name="strCellValue"></param>
        /// <param name="style"></param>
        /// <returns></returns>
        public ICell GetExcelCell(IRow row, int colNum, string strCellValue, HSSFCellStyle style, HSSFSheet sheet = null, int colWitdht = 0,int iType=0)
        {
            ICell rowHeader = row.CreateCell(colNum);
            //iType == 0時是字符, 其他為數字
            if (iType == 0 || strCellValue == "") rowHeader.SetCellValue(strCellValue == null ? " " : strCellValue);
            else
            {
                int iValue=0;
                if (strCellValue == null || strCellValue=="") strCellValue = "0";
                int.TryParse(strCellValue, out iValue);
                rowHeader.SetCellValue(iValue);
            }
            rowHeader.CellStyle = style;
            if (sheet != null)
                sheet.SetColumnWidth(colNum, colWitdht * 256);
            return rowHeader;
        }


        /// <summary>
        /// 貨幣格式的單元格
        /// </summary>
        /// <param name="row"></param>
        /// <param name="colNum"></param>
        /// <param name="strCellValue"></param>
        /// <param name="style"></param>
        /// <param name="sheet"></param>
        /// <param name="colWitdht"></param>
        /// <param name="iType"></param>
        /// <returns></returns>
        public ICell GetExcelCellAm(IRow row, int colNum, int dCellValue, ICellStyle style, HSSFSheet sheet = null, int colWitdht = 0, int iType = 0)
        {
            ICell rowHeader = row.CreateCell(colNum);
            rowHeader.SetCellValue(dCellValue);
            rowHeader.CellStyle = style;
            if (sheet != null)
                sheet.SetColumnWidth(colNum, colWitdht * 256);
            return rowHeader;
        }


        /// <summary>
        /// 給一定範圍的區域設定樣式
        /// </summary>  
        /// <param name="sheet"></param>
        /// <param name="region">設定樣式語氣 HSSFSheet region = new NPOI.SS.Util.CellRangeAddress(row1, row2, col1, col2)</param>
        /// <param name="style"></param>
        public void SetExcelRegionBorder(HSSFSheet sheet, CellRangeAddress region, HSSFCellStyle style)
        {
            sheet.AddMergedRegion(region); // 合併單元格
            for (int i = region.FirstRow; i <= region.LastRow; i++)
            {
                IRow row = HSSFCellUtil.GetRow(i, sheet);
                for (int j = region.FirstColumn; j <= region.LastColumn; j++)
                {
                    ICell singleCell = HSSFCellUtil.GetCell(row, (short)j);
                    singleCell.CellStyle = style;
                }
            }
        }


        /// <summary>
        ///  設置文件名稱 與文件存放路徑
        /// </summary>
        /// <param name="path"></param>
        /// <param name="extName"></param>
        /// <returns></returns>
        public string GetFileName(string path, string extName = ".pdf")
        {
            string strDateTime = System.DateTime.Now.ToString("yyyyMMddHHmmss");
            if (!System.IO.Directory.Exists(path))  // 判斷文件夾是否存在 ,若不存在,則創建
                System.IO.Directory.CreateDirectory(path);
            string strWebId = "";
            string fileStrB = strWebId + strDateTime; // 加密前
            byte[] result = Encoding.Default.GetBytes(fileStrB);
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] output = md5.ComputeHash(result);
            string fileName = BitConverter.ToString(output).ToString().Replace("-", "") + extName;//加密后
            return fileName;
        }
    }


页面代码


<div style="display:none;" >
    <a id="GrntlSalesP12_Open" href="#" target="_blank" style="display:none;"></a>
</div>



function funGcntlCpaxP12Ok()
{
    var GRUP_CD_B = document.getElementById("GRUP_CD_B").value;//團號
    var GRUP_CD_E = document.getElementById("GRUP_CD_E").value;
    var LEAV_DT_B1 = document.getElementById("LEAV_DT_B").value;//時間
    var LEAV_DT_E1 = document.getElementById("LEAV_DT_E").value;
    var LEAV_DT_B = LEAV_DT_B1.replace('/', '-').replace('/', '-');
    var LEAV_DT_E = LEAV_DT_E1.replace('/', '-').replace('/', '-');
    var url = "ExportExcelP12" + '/'
        + GRUP_CD_B + escape(";")
        + GRUP_CD_E + escape(";")
        + LEAV_DT_B + escape(";")
        + LEAV_DT_E
    document.getElementById("GrntlSalesP12_Open").href = "/GroupSalesMag/" + url;
    document.getElementById("GrntlSalesP12_Open").click();
}


数据处理


public GroupPresentationDataViewModel GcntlSalesP12Data(string id)
        {
            var dataModel = new GroupPresentationDataViewModel();
            string GRUP_CD_B = "";
            string GRUP_CD_E = "";
            string LEAV_DT_B = "";
            string LEAV_DT_E = "";
            var ids = id.Split(';');
            //檢核報文合法性
            if (ids.Length == 4)
            {
                GRUP_CD_B = ids[0];
                GRUP_CD_E = ids[1];
                LEAV_DT_B = ids[2].Replace('-', '/');
                LEAV_DT_E = ids[3].Replace('-', '/');
            }
            dataModel.GRUP_CD_B = GRUP_CD_B;//團號
            dataModel.GRUP_CD_E = GRUP_CD_E;//旅行社名称
            dataModel.LEAV_DT_B = LEAV_DT_B;//起始序號
            dataModel.LEAV_DT_E = LEAV_DT_E;//結束序號
            //查詢旅行團資料
            DataTable dtGetTrgrupList = this._trGrupService.GetTrgrupGrupData(GRUP_CD_B, GRUP_CD_E, LEAV_DT_B, LEAV_DT_E);
            List<TrgrupListP22> trgrupListP22 = (List<TrgrupListP22>)ModelConvertHelper<TrgrupListP22>.ConvertToModel(dtGetTrgrupList);
            if (dtGetTrgrupList != null && dtGetTrgrupList.Rows.Count > 0)
            {
                for (int i = 0, j = dtGetTrgrupList.Rows.Count; i < j; i++)
                {


                    string strPaxCd = dtGetTrgrupList.Rows[i]["PAX_CD"].ToString();
                    if (strPaxCd != null && strPaxCd != "")
                    {
                        DataTable dtTrcntaT3 = this._trcntaService.QueryCntaByCntaGetTop1(strPaxCd, "P", "T3', 'T4", "CNTA_TP, MAIL_FG DESC");
                        DataTable dtTrcntaT1 = this._trcntaService.QueryCntaByCntaGetTop1(strPaxCd, "P", "T1', 'T2", "CNTA_TP, MAIL_FG DESC");
                        DataTable dtTrcntaA5 = this._trcntaService.QueryCntaByCntaGetTop1(strPaxCd, "P", "A5', 'A6", "MAIL_FG DESC, CNTA_TP");
                        if (dtTrcntaT3 != null && dtTrcntaT3.Rows.Count > 0)
                        {
                            string srtT3CityCcd = dtTrcntaT3.Rows[0]["CITY_CCD"].ToString();
                            string srtT3CntaDr = dtTrcntaT3.Rows[0]["CNTA_DR"].ToString();
                            string srtT3CntaZip = dtTrcntaT3.Rows[0]["CNTA_ZIP"].ToString();
                            trgrupListP22[i].T3_CITY_CCD = srtT3CityCcd;
                            trgrupListP22[i].T3_CNTA_DR = srtT3CntaDr;
                            trgrupListP22[i].T3_CNTA_ZIP = srtT3CntaZip;
                        }
                        if (dtTrcntaT1 != null && dtTrcntaT1.Rows.Count > 0)
                        {
                            string srtT1CityCcd = dtTrcntaT1.Rows[0]["CITY_CCD"].ToString();
                            string srtT1CntaDr = dtTrcntaT1.Rows[0]["CNTA_DR"].ToString();
                            string srtT1CntaZip = dtTrcntaT1.Rows[0]["CNTA_ZIP"].ToString();


                            trgrupListP22[i].T1_CITY_CCD = srtT1CityCcd;
                            trgrupListP22[i].T1_CNTA_DR = srtT1CntaDr; ;
                        }
                        if (dtTrcntaA5 != null && dtTrcntaA5.Rows.Count > 0)
                        {
                            string srtA5CityCcd = dtTrcntaA5.Rows[0]["CITY_CCD"].ToString();
                            string srtA5CntaDr = dtTrcntaA5.Rows[0]["CNTA_DR"].ToString();
                            string srtA5CntaZip = dtTrcntaA5.Rows[0]["CNTA_ZIP"].ToString();
                            trgrupListP22[i].A5_CNTA_DR = srtA5CntaDr;
                            trgrupListP22[i].A5_CNTA_ZIP = srtA5CntaZip;
                        }
                    }
                    string strItNatn = dtGetTrgrupList.Rows[i]["ITN_NATN"].ToString();
                    if (strItNatn != null && strItNatn != "")
                    {
                        DataTable dtGetTrNatn = this._trnatnService.GetTrNatnBySql(strItNatn.Replace("/", "','"), "", "");
                        string NATN_NM = "";
                        string strSymbol = "";
                        if (dtGetTrNatn != null && dtGetTrNatn.Rows.Count > 0)
                        {
                            for (int a = 0, b = dtGetTrNatn.Rows.Count; a < b; a++)
                            {
                                string strNatnCnm = dtGetTrNatn.Rows[a]["NATN_CNM"] == null ? "" : dtGetTrNatn.Rows[a]["NATN_CNM"].ToString();
                                string strNatnEnm = dtGetTrNatn.Rows[a]["NATN_ENM"] == null ? "" : dtGetTrNatn.Rows[a]["NATN_ENM"].ToString();
                                if (strNatnCnm != null && strNatnCnm != "")
                                {
                                    NATN_NM = NATN_NM + strSymbol + strNatnCnm;
                                }
                                else
                                {
                                    NATN_NM = NATN_NM + strSymbol + strNatnEnm;
                                }
                                strSymbol = "/";
                            }
                        }
                        trgrupListP22[i].NATN_NM = NATN_NM;
                    }
                    string strIdNo = dtGetTrgrupList.Rows[i]["ID_NO"] == null ? "" : dtGetTrgrupList.Rows[i]["ID_NO"].ToString();
                    string strOIdNo = dtGetTrgrupList.Rows[i]["OID_NO"] == null ? "" : dtGetTrgrupList.Rows[i]["OID_NO"].ToString();
                    string strNo = strIdNo == "" ? strOIdNo : strIdNo;
                    trgrupListP22[i].ID_NO = strNo;
                }
            }
            dataModel.trgrupListP22 = trgrupListP22;
            return dataModel;
        }


导出文件


public void ExportExcelP12(string id)
        {
            var dataModel = this.GcntlSalesP12Data(id);
            try
            {
                if (dataModel != null && dataModel.trgrupListP22 != null && dataModel.trgrupListP22.Count > 0)
                {
                    ExcelService excelService = new ExcelService();
                    string path = Server.MapPath(@"~\upload\");
                    string strDate = System.DateTime.Now.ToString("yyyMMddHHmmss");
                    string strName = "happy_travel_csv_" + strDate;
                    if (!System.IO.Directory.Exists(path))  // 判斷文件夾是否存在 ,若不存在,則創建
                        System.IO.Directory.CreateDirectory(path);
                    byte[] result = Encoding.Default.GetBytes(strName);//文件名——EXP_ + 系统时间+
                    MD5 md5 = new MD5CryptoServiceProvider();
                    byte[] output = md5.ComputeHash(result);
                    string fileName = BitConverter.ToString(output).ToString().Replace("-", "").ToLower() + ".csv";//加密后
                    FileStream fileStream = new FileStream(path + fileName, FileMode.Create);


                    HSSFWorkbook workBook = new HSSFWorkbook(); // 創建Excel表
                    ISheet sheet = workBook.CreateSheet("團體保險旅客明細表");
                    // sheet列表
                    List<NPOI.SS.UserModel.ISheet> sheetList = new List<NPOI.SS.UserModel.ISheet>();
                    sheetList.Add(sheet);
                    sheet.DefaultColumnWidth = 10;
                    sheet.DefaultRowHeight = 300;
                    this.ExportExcel(sheet, workBook, dataModel);
                    // 写入到客户端 
                    System.IO.MemoryStream ms = new System.IO.MemoryStream();
                    Response.ContentType = "application/vnd.ms-csv";
                    workBook.Write(ms);
                    workBook.Write(fileStream);
                    ms.Close();
                    ms.Dispose();
                    Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", fileName));
                    Response.BinaryWrite(ms.ToArray());
                    Response.OutputStream.Flush();
                    Response.OutputStream.Close();
                    Response.Flush();
                    Response.End();
                }
                else
                {
                    string strMsg = "查無相關團員名冊資料";
                    ReturnError(strMsg);
                }
            }
            catch (Exception ex)
            {
                logger.Error(LogUtility.GetExceptionDetails(ex));
            }


        }


画出表格

 protected void ExportExcel(NPOI.SS.UserModel.ISheet sheet, NPOI.HSSF.UserModel.HSSFWorkbook workBook, GroupPresentationDataViewModel dataModel)
        {
            ExcelService excelService = new ExcelService();
            HSSFCellStyle style = excelService.SetExcelCellStyle(workBook);
            HSSFCellStyle styleRight = excelService.SetExcelCellStyle(workBook, "宋體", 2, 1);
            if (dataModel.trgrupListP22 != null && dataModel.trgrupListP22.Count > 0)
            {
                // 第一行——表头
                NPOI.SS.UserModel.IRow row = sheet.CreateRow(0);
                excelService.GetExcelCell(row, 0, "旅行社名稱", style);
                excelService.GetExcelCell(row, 1, "旅行社團名", style);
                excelService.GetExcelCell(row, 2, "中文姓名", style);
                excelService.GetExcelCell(row, 3, "身分證字號", style);
                excelService.GetExcelCell(row, 4, "西元生日", style);
                excelService.GetExcelCell(row, 5, "辦公電話區碼", style);
                excelService.GetExcelCell(row, 6, "辦公電話", style);
                excelService.GetExcelCell(row, 7, " 辦公分機", style);
                excelService.GetExcelCell(row, 8, "住家電話區碼", style);
                excelService.GetExcelCell(row, 9, "住家電話", style);
                excelService.GetExcelCell(row, 10, "手機號碼", style);
                excelService.GetExcelCell(row, 11, "郵遞區號", style);
                excelService.GetExcelCell(row, 12, " 通訊地址", style);
                excelService.GetExcelCell(row, 13, "工作內容", style);
                excelService.GetExcelCell(row, 14, " 旅遊地區", style);
                excelService.GetExcelCell(row, 15, "出發日", style);
                excelService.GetExcelCell(row, 16, "旅遊天數", style);
                excelService.GetExcelCell(row, 17, "去程航班", style);
                excelService.GetExcelCell(row, 18, " 回程航班", style);
                for (int i = 0, j = dataModel.trgrupListP22.Count; i < j; i++)
                {
                    NPOI.SS.UserModel.IRow rowBody = sheet.CreateRow(i + 1);
                    excelService.GetExcelCell(rowBody, 0, dataModel.trgrupListP22[i].COMP_FNM, style);
                    excelService.GetExcelCell(rowBody, 1, dataModel.trgrupListP22[i].GRUP_NM, style);
                    excelService.GetExcelCell(rowBody, 2, dataModel.trgrupListP22[i].PAX_CNM, style);
                    excelService.GetExcelCell(rowBody, 3, dataModel.trgrupListP22[i].ID_NO, style);
                    excelService.GetExcelCell(rowBody, 4, dataModel.trgrupListP22[i].BRTH_DT, style);


                    excelService.GetExcelCell(rowBody, 5, dataModel.trgrupListP22[i].T3_CITY_CCD, style);
                    excelService.GetExcelCell(rowBody, 6, dataModel.trgrupListP22[i].T3_CNTA_DR, style);
                    excelService.GetExcelCell(rowBody, 7, dataModel.trgrupListP22[i].T3_CNTA_ZIP, style);
                    excelService.GetExcelCell(rowBody, 8, dataModel.trgrupListP22[i].T1_CITY_CCD, style);
                    excelService.GetExcelCell(rowBody, 9, dataModel.trgrupListP22[i].T1_CNTA_DR, style);
                    excelService.GetExcelCell(rowBody, 10, "", style);//手機號碼


                    excelService.GetExcelCell(rowBody, 11, dataModel.trgrupListP22[i].A5_CNTA_ZIP, style);
                    excelService.GetExcelCell(rowBody, 12, dataModel.trgrupListP22[i].A5_CNTA_DR, style);
                    excelService.GetExcelCell(rowBody, 13, "", styleRight);//工作內容
                    excelService.GetExcelCell(rowBody, 14, dataModel.trgrupListP22[i].NATN_NM, style);
                    excelService.GetExcelCell(rowBody, 15, dataModel.trgrupListP22[i].LEAV_DT, style);
                    excelService.GetExcelCell(rowBody, 16, dataModel.trgrupListP22[i].GRUP_LN.ToString(), styleRight);
                    excelService.GetExcelCell(rowBody, 17, dataModel.trgrupListP22[i].FLT_NO1, style);
                    excelService.GetExcelCell(rowBody, 18, dataModel.trgrupListP22[i].FLT_NO2, style);
                }
            }
        }


重复循环表头


private void TableHead(int iStart, NPOI.SS.UserModel.ISheet sheet1, NPOI.HSSF.UserModel.HSSFWorkbook book, GroupSalesMagVivianViewModel dataModel)
        {
            // 设置表格样式 
            HSSFCellStyle styleHeadeLeft = SetExcelCellStyleP21(book, 0, 1, 1);//左對齊有邊框
            HSSFCellStyle styleHeadeRight = SetExcelCellStyleP21(book, 2, 0, 0);//右對齊無邊框
            HSSFCellStyle styleHeadeCenter = SetExcelCellStyleP21(book, 1, 1, 0);//居中無邊框
            HSSFCellStyle styleDataCenter = SetExcelCellStyleP21(book, 1, 1, 1);//居中有邊框
            HSSFCellStyle styleDataCenterWrap = SetExcelCellStyleP21(book, 1, 1, 1, true);//居中有邊框換行
            NPOI.SS.UserModel.IRow rowHeader1 = sheet1.CreateRow(iStart); // CreateRow 下標從0開始 第一行
            ICell rowHeader2 = rowHeader1.CreateCell(0);
            rowHeader2.CellStyle = styleHeadeLeft;
            //旅行社名稱
            ICell rowHeader3 = rowHeader1.CreateCell(1);
            rowHeader3.CellStyle = styleHeadeLeft;
            rowHeader3.SetCellValue(" 旅行社名稱:");
            //旅行社名稱——賦值
            ICell rowHeader4 = rowHeader1.CreateCell(2);
            rowHeader4.CellStyle = styleHeadeLeft;
            rowHeader4.SetCellValue(dataModel.gcnltSalesP21Data.COMP_FNM);
            ICell rowHeader5 = rowHeader1.CreateCell(3);
            rowHeader5.CellStyle = styleHeadeLeft;
            sheet1.SetColumnWidth(3, 10 * 256); //設置某一列的寬度
            ICell rowHeader6 = rowHeader1.CreateCell(4);
            rowHeader6.CellStyle = styleHeadeLeft;
            sheet1.SetColumnWidth(4, 10 * 256); //設置某一列的寬度
            ICell rowHeader7 = rowHeader1.CreateCell(5);
            rowHeader7.CellStyle = styleHeadeLeft;
            ICell rowHeader8 = rowHeader1.CreateCell(6);
            rowHeader8.CellStyle = styleHeadeLeft;


            NPOI.SS.UserModel.IRow rowHeader9 = sheet1.CreateRow(iStart + 1); // CreateRow 下標從0開始 第二行
            ICell rowHeader10 = rowHeader9.CreateCell(0);
            rowHeader10.CellStyle = styleHeadeLeft;
            //聯絡人
            ICell rowHeader11 = rowHeader9.CreateCell(1);
            rowHeader11.CellStyle = styleHeadeLeft;
            rowHeader11.SetCellValue(" 聯絡人:");
            //聯絡人——賦值
            ICell rowHeader12 = rowHeader9.CreateCell(2);
            rowHeader12.CellStyle = styleHeadeLeft;
            rowHeader12.SetCellValue(dataModel.gcnltSalesP21Data.EMP_CNM);
            //電話
            ICell rowHeader13 = rowHeader9.CreateCell(3);
            rowHeader13.CellStyle = styleHeadeLeft;
            rowHeader13.SetCellValue(" 電話:");
            //電話——賦值
            ICell rowHeader14 = rowHeader9.CreateCell(4);
            rowHeader14.CellStyle = styleHeadeLeft;
            rowHeader14.SetCellValue(dataModel.gcnltSalesP21Data.COMP_TEL);
            ICell rowHeader15 = rowHeader9.CreateCell(5);
            rowHeader15.CellStyle = styleHeadeLeft;
            ICell rowHeader16 = rowHeader9.CreateCell(6);
            rowHeader16.CellStyle = styleHeadeLeft;


            NPOI.SS.UserModel.IRow rowHeader17 = sheet1.CreateRow(iStart + 2); // CreateRow 下標從0開始 第三行
            ICell rowHeader18 = rowHeader17.CreateCell(0);
            rowHeader18.CellStyle = styleHeadeLeft;
            //出發日期
            ICell rowHeader19 = rowHeader17.CreateCell(1);
            rowHeader19.CellStyle = styleHeadeLeft;
            rowHeader19.SetCellValue(" 出發日期:");
            //出發日期——賦值
            ICell rowHeader20 = rowHeader17.CreateCell(2);
            rowHeader20.CellStyle = styleHeadeLeft;
            rowHeader20.SetCellValue(dataModel.gcnltSalesP21Data.LEAV_DT);
            //航班
            ICell rowHeader21 = rowHeader17.CreateCell(3);
            rowHeader21.CellStyle = styleHeadeLeft;
            rowHeader21.SetCellValue(" 航班:");
            //航班——賦值
            ICell rowHeader22 = rowHeader17.CreateCell(4);
            rowHeader22.CellStyle = styleHeadeLeft;
            rowHeader22.SetCellValue(dataModel.gcnltSalesP21Data.FLT_NO);
            ICell rowHeader23 = rowHeader17.CreateCell(5);
            rowHeader23.CellStyle = styleHeadeLeft;
            ICell rowHeader24 = rowHeader17.CreateCell(6);
            rowHeader24.CellStyle = styleHeadeLeft;


            NPOI.SS.UserModel.IRow rowHeader25 = sheet1.CreateRow(iStart + 3); // CreateRow 下標從0開始 第四行
            ICell rowHeader26 = rowHeader25.CreateCell(0);
            rowHeader26.CellStyle = styleHeadeLeft;
            ICell rowHeader27 = rowHeader25.CreateCell(1);
            rowHeader27.CellStyle = styleHeadeLeft;
            rowHeader27.SetCellValue(" 電腦代號:");
            ICell rowHeader28 = rowHeader25.CreateCell(2);
            rowHeader28.CellStyle = styleHeadeLeft;
            rowHeader28.SetCellValue(dataModel.gcnltSalesP21Data.PNR_CD);
            ICell rowHeader29 = rowHeader25.CreateCell(3);
            sheet1.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(iStart + 3, iStart + 3, 3, 4));//合并单元格
            rowHeader29.CellStyle = styleHeadeLeft;
            ICell rowHeader31 = rowHeader25.CreateCell(5);
            rowHeader31.CellStyle = styleHeadeLeft;
            ICell rowHeader32 = rowHeader25.CreateCell(6);
            rowHeader32.CellStyle = styleHeadeLeft;


            NPOI.SS.UserModel.IRow rowHeader33 = sheet1.CreateRow(iStart + 4); // CreateRow 下標從0開始 第五行
            ICell rowHeader34 = rowHeader33.CreateCell(0);
            rowHeader34.CellStyle = styleHeadeLeft;
            ICell rowHeader35 = rowHeader33.CreateCell(1);
            rowHeader35.CellStyle = styleHeadeLeft;
            ICell rowHeader36 = rowHeader33.CreateCell(2);
            rowHeader36.CellStyle = styleHeadeLeft;
            ICell rowHeader37 = rowHeader33.CreateCell(3);
            var region = new NPOI.SS.Util.CellRangeAddress(iStart + 4, iStart + 4, 3, 4);
            this.SetRegionBorder((HSSFSheet)sheet1, region, styleHeadeLeft);
            //sheet1.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(4, 4, 3, 4));
            ICell rowHeader38 = rowHeader33.CreateCell(5);
            rowHeader38.CellStyle = styleHeadeLeft;
            ICell rowHeader39 = rowHeader33.CreateCell(6);
            rowHeader39.CellStyle = styleHeadeLeft;




            NPOI.SS.UserModel.IRow rowHeader40 = sheet1.CreateRow(iStart + 5); // CreateRow 下標從0開始 第六行
            rowHeader40.Height = (short)(330 * 2);//设置行高
            ICell rowHeader41 = rowHeader40.CreateCell(0);
            rowHeader41.CellStyle = styleHeadeLeft;
            sheet1.SetColumnWidth(0, 5 * 256); //設置某一列的寬度
            rowHeader41.SetCellValue(" NO ");
            ICell rowHeader42 = rowHeader40.CreateCell(1);
            rowHeader42.CellStyle = styleHeadeLeft;
            rowHeader42.SetCellValue(" 中文姓名 ");
            ICell rowHeader43 = rowHeader40.CreateCell(2);
            rowHeader43.CellStyle = styleHeadeLeft;
            rowHeader43.SetCellValue(" 英文姓名 ");
            ICell rowHeader44 = rowHeader40.CreateCell(3);
            rowHeader44.CellStyle = styleHeadeLeft;
            sheet1.SetColumnWidth(2, 40 * 256); //設置某一列的寬度
            rowHeader44.SetCellValue(" 身份證號碼");
            //sheet1.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(iStart + 5, iStart+5, 3, 4));
            var region1 = new NPOI.SS.Util.CellRangeAddress(iStart + 5, iStart + 5, 3, 4);
            this.SetRegionBorder((HSSFSheet)sheet1, region1, styleHeadeLeft);
            ICell rowHeader46 = rowHeader40.CreateCell(5);
            rowHeader46.CellStyle = styleHeadeLeft;
            rowHeader46.SetCellValue(" 出生年月日 ");
            ICell rowHeader47 = rowHeader40.CreateCell(6);
            rowHeader47.CellStyle = styleHeadeLeft;
            sheet1.SetColumnWidth(6, 8 * 256); //設置某一列的寬度
            rowHeader47.SetCellValue(" 備註 ");
        }


        /// <summary>
        /// jin
        /// </summary>
        /// <param name="sheet1"> excel中的頁簽</param>
        /// <param name="book">excel實體</param>
        /// <param name="dataModel">數據Model</param>
        protected void ExportExcelP21(NPOI.SS.UserModel.ISheet sheet1, NPOI.HSSF.UserModel.HSSFWorkbook book, GroupSalesMagVivianViewModel dataModel)
        {
            // 设置表格样式 
            HSSFCellStyle styleHeadeLeft = SetExcelCellStyleP21(book, 0, 1, 1);//左對齊有邊框
            HSSFCellStyle styleHeadeRight = SetExcelCellStyleP21(book, 2, 0, 0);//右對齊無邊框
            HSSFCellStyle styleHeadeCenter = SetExcelCellStyleP21(book, 1, 1, 0);//居中無邊框
            HSSFCellStyle styleDataCenter = SetExcelCellStyleP21(book, 1, 1, 1);//居中有邊框
            HSSFCellStyle styleDataCenterWrap = SetExcelCellStyleP21(book, 1, 1, 1, true);//居中有邊框換行




            if (dataModel.gcnltSalesP21Data.paxList21 != null && dataModel.gcnltSalesP21Data.paxList21.Count > 0)
            {
                int k = 0;
                for (int i = 0, j = dataModel.gcnltSalesP21Data.paxList21.Count; i < j; i++)
                {
                    if (i % 38 == 0)
                    {
                        if (i != 0)
                        {
                            for (int n = 1; n <= 6; n++)
                            {
                                sheet1.CreateRow(6 + k++);
                            }
                        }
                        this.TableHead(k, sheet1, book, dataModel);


                    }
                    NPOI.SS.UserModel.IRow rowHeader48 = sheet1.CreateRow(k + 6); // CreateRow 下標從0開始 第七行
                    var strNo = "";
                    if (dataModel.gcnltSalesP21Data.paxList21[i].FAKE_FG == false)
                    {
                        strNo = "* " + (i + 1).ToString();//序號的計算,從1開始
                    }
                    else if (dataModel.gcnltSalesP21Data.paxList21[i].FAKE_FG == true)
                    {
                        strNo = "" + (i + 1).ToString();//序號的計算,從1開始
                    }
                    //NO
                    ICell rowHeader49 = rowHeader48.CreateCell(0);
                    rowHeader49.CellStyle = styleHeadeLeft;
                    rowHeader49.SetCellValue(strNo);
                    //中文姓名
                    ICell rowHeader50 = rowHeader48.CreateCell(1);
                    rowHeader50.CellStyle = styleHeadeLeft;
                    rowHeader50.SetCellValue(dataModel.gcnltSalesP21Data.paxList21[i].PAX_CNM);


                    var PAX_ENM = "";
                    if (dataModel.gcnltSalesP21Data.paxList21[i].FAKE_FG == true)
                    {
                        PAX_ENM = dataModel.gcnltSalesP21Data.paxList21[i].PAX_ENML + dataModel.gcnltSalesP21Data.paxList21[i].PAX_ENMF;
                    }
                    else if (dataModel.gcnltSalesP21Data.paxList21[i].FAKE_FG == false)
                    {
                        PAX_ENM = dataModel.gcnltSalesP21Data.paxList21[i].PAX_ENMF + dataModel.gcnltSalesP21Data.paxList21[i].PAX_ENML;
                    }
                    //英文姓名
                    ICell rowHeader51 = rowHeader48.CreateCell(2);
                    rowHeader51.CellStyle = styleHeadeLeft;//對齊方式
                    rowHeader51.SetCellValue(PAX_ENM);//賦值
                    //身份證號碼
                    ICell rowHeader52 = rowHeader48.CreateCell(3);
                    rowHeader52.CellStyle = styleHeadeLeft;
                    rowHeader52.SetCellValue(dataModel.gcnltSalesP21Data.paxList21[i].ID_NO);
                    //sheet1.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(k + 6, k + 6, 3, 4));
                    var region1 = new NPOI.SS.Util.CellRangeAddress(k + 6, k + 6, 3, 4);
                    this.SetRegionBorder((HSSFSheet)sheet1, region1, styleHeadeLeft);
                    //出生年月日
                    ICell rowHeader53 = rowHeader48.CreateCell(5);
                    rowHeader53.CellStyle = styleHeadeLeft;
                    rowHeader53.SetCellValue(dataModel.gcnltSalesP21Data.paxList21[i].BRTH_DT);
                    //備註
                    ICell rowHeader54 = rowHeader48.CreateCell(6);
                    rowHeader54.CellStyle = styleHeadeLeft;
                    rowHeader54.SetCellValue("");
                    k++;
                }
            }
        }


        /// <summary>
        /// 給單元格設定邊框樣式
        /// </summary>
        /// <param name="book"> excel實體</param>
        /// <param name="align"> 0:左對齊 1:水平居中 2:右對齊</param>
        /// <param name="valign">1:垂直居中 其他默認頂部對齊</param>
        /// <param name="border"> 0:無邊框 其他四周有1個寬度的邊框</param>
        /// <returns></returns>
        public HSSFCellStyle SetExcelCellStyleP21(NPOI.HSSF.UserModel.HSSFWorkbook book, int align, int valign, int border, bool wrapText = false)
        {
            HSSFCellStyle style = book.CreateCellStyle() as HSSFCellStyle;
            if (align == 1)
                style.Alignment = HorizontalAlignment.Center; // 水平居中
            else if (align == 2)
                style.Alignment = HorizontalAlignment.Right; // 右對齊
            else
                style.Alignment = HorizontalAlignment.Left; // 左對齊
            if (valign == 1)
                style.VerticalAlignment = VerticalAlignment.Center; // 垂直居中
            if (border == 0)
            {
                style.BorderTop = BorderStyle.None;
                style.BorderRight = BorderStyle.None;
                style.BorderLeft = BorderStyle.None;
                style.BorderBottom = BorderStyle.None;
            }
            else
            {
                style.BorderTop = BorderStyle.Thin;
                style.BorderRight = BorderStyle.Thin;
                style.BorderLeft = BorderStyle.Thin;
                style.BorderBottom = BorderStyle.Thin;
            }
            if (wrapText)
                style.WrapText = true;
            NPOI.SS.UserModel.IFont font = book.CreateFont(); // 創建字體
            style.SetFont(font);
            font.FontHeightInPoints = 12;
            font.FontName = "simsun";
            return style;
        }





猜你喜欢

转载自blog.csdn.net/qq_33556442/article/details/78256675