using BLL; using NPOI.SS.UserModel; using NPOI.SS.Util; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.IO; using System.Linq; using System.Web; using System.Web.UI; namespace FineUIPro.Web.ContinuousPrint { public partial class PipingSingleDiagramPrint : PageBase { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindGrid(); } } #region 绑定Grid1 /// /// 绑定Grid1 /// public void BindGrid() { var project = BLL.Base_ProjectService.GetOnProjectListByUserId(this.CurrUser.UserId, "1"); if (!string.IsNullOrEmpty(txtProjectCode.Text)) { project = project.Where(e => e.ProjectCode.Contains(txtProjectCode.Text.Trim())).ToList(); } Grid1.RecordCount = project.Count; var table = this.GetPagedDataTable(Grid1, project); Grid1.DataSource = table; Grid1.DataBind(); } #endregion #region 绑定Grid2 /// /// 绑定Grid2 /// public void BindGrid1(string ProjectId) { string strSql = @"SELECT ProjectId,ISO_ID,STE_ID,SER_ID,SERName,ISO_IsoNo,ISO_TotalDin ,ISO_Insulator,STECode,ISO_Executive,ISO_Specification,ISO_JointQty,IDName ,ISO_DesignPress,ISO_DesignTemperature,ISO_TestPress,ISO_TestTemperature ,ISO_Remark,MaterialStandardId,PressureTestPackageNo,OperatingPressure ,OperatingTemperature,PipeLineClass,PipeLineLength,LeakageTest ,TestCategoryNum,MaterialStandardCode FROM HJGL_View_IsoInfo WHERE ProjectId= @ProjectId"; List listStr = new List(); listStr.Add(new SqlParameter("@ProjectId", ProjectId)); SqlParameter[] parameter = listStr.ToArray(); Grid2.DataSource = SQLHelper.GetDataTableRunText(strSql, parameter); Grid2.DataBind(); Grid2.SelectAllRows(); } #endregion #region 分页、排序 /// /// 分页 /// /// /// protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e) { Grid1.PageIndex = e.NewPageIndex; BindGrid(); } /// /// 分页显示条数下拉框 /// /// /// protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e) { Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue); BindGrid(); } /// /// 排序 /// /// /// protected void Grid1_Sort(object sender, FineUIPro.GridSortEventArgs e) { Grid1.SortDirection = e.SortDirection; Grid1.SortField = e.SortField; BindGrid(); } #endregion #region 选择加载 /// /// 选择加载 /// /// /// protected void Grid1_RowClick(object sender, GridRowClickEventArgs e) { BindGrid1(this.Grid1.SelectedRowID); } #endregion #region 关闭弹出窗口 /// /// 关闭窗口 /// /// /// protected void Window1_Close(object sender, EventArgs e) { BindGrid(); } #endregion #region 查询 /// /// 查询 /// protected void btnSubmit_Click(object sender, EventArgs e) { BindGrid(); } #endregion #region 项目管理管线单线图附页打印 /// /// 项目管理管线单线图附页打印 /// protected void btnPrint_Click(object sender, EventArgs e) { if (Grid2.SelectedRowIndexArray.Length <= 0) { Alert.ShowInTop("最少选中一行!", MessageBoxIcon.Warning); return; } string rootPath = Server.MapPath("~/") + Const.ExcelUrl; //导出文件 string filePath = rootPath + DateTime.Now.ToString("yyyyMMddhhmmss") + "\\"; if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } string ReportFileName = filePath + "out1.xlsx"; if (Grid2.Rows.Count > 0) { int rowIndex = 0; XSSFWorkbook hssfworkbook = new XSSFWorkbook(); XSSFSheet ws = (XSSFSheet)hssfworkbook.CreateSheet("项目管理管线单线图附页"); #region 列宽 ws.SetColumnWidth(0, (10 * 256) + 15);//(9.5)9.55 ws.SetColumnWidth(1, (2 * 256) - 95);//(1.08)1.09 ws.SetColumnWidth(2, (8 * 256) + 50);//(7.58)7.64 ws.SetColumnWidth(3, (8 * 256) + 100);//(7.83)7.82 ws.SetColumnWidth(4, (9 * 256) + 55);//(8.67)8.64 ws.SetColumnWidth(5, (12 * 256) - 15);//(11.33)11.36 ws.SetColumnWidth(6, (12 * 256) - 15);//(11.33)11.36 ws.SetColumnWidth(7, (12 * 256) + 200);//(11.17)11.18 ws.SetColumnWidth(8, (6 * 256) + 100);//(5.83)5.82 ws.SetColumnWidth(9, (3 * 256) - 95);//(2.08)2.09 ws.SetColumnWidth(10, (2 * 256) + 100);//(1.83)1.82 ws.SetColumnWidth(11, (3 * 256) + 55);//(2.67)2.64 ws.SetColumnWidth(12, (3 * 256) + 15);//(2.5)2.55 ws.SetColumnWidth(13, (3 * 256) + 15);//(2.5)2.55 ws.SetColumnWidth(14, (2 * 256) + 55);//(1.67)1.64 #endregion //图片地址 byte[] bytes = File.ReadAllBytes(Server.MapPath("~/") + "Images\\PrintLog.png"); int pictureIdx = hssfworkbook.AddPicture(bytes, PictureType.JPEG); for (int gi = 0; gi < Grid2.Rows.Count; gi++) { if (Grid2.SelectedRowIndexArray.Contains(gi)) { System.Web.UI.WebControls.HiddenField hidISO_ID = Grid2.Rows[gi].FindControl("hidISO_ID") as System.Web.UI.WebControls.HiddenField; #region 其他参数值取值 var isoId = hidISO_ID.Value; string v1 = string.Empty; string v2 = string.Empty; string v3 = string.Empty; string v4 = string.Empty; string v5 = string.Empty; string v6 = string.Empty; string v7 = string.Empty; string v8 = string.Empty; string v9 = string.Empty; string v10 = string.Empty; string v11 = string.Empty; string v12 = string.Empty; string v13 = string.Empty; string v14 = string.Empty; string v15 = string.Empty; string v16 = string.Empty; string ptCount1 = (from x in Funs.DB.HJGL_CH_TrustItem join y in Funs.DB.HJGL_PW_JointInfo on x.JOT_ID equals y.JOT_ID join a in Funs.DB.HJGL_BS_JointType on y.JOTY_ID equals a.JOTY_ID join b in Funs.DB.HJGL_CH_Trust on x.CH_TrustID equals b.CH_TrustID join c in Funs.DB.HJGL_BS_NDTType on b.CH_NDTMethod equals c.NDT_ID where a.JOTY_Group == "2" && y.ISO_ID == isoId && c.NDT_Code == "PT" select x).Distinct().Count().ToString(); string mtCount1 = (from x in Funs.DB.HJGL_CH_TrustItem join y in Funs.DB.HJGL_PW_JointInfo on x.JOT_ID equals y.JOT_ID join a in Funs.DB.HJGL_BS_JointType on y.JOTY_ID equals a.JOTY_ID join b in Funs.DB.HJGL_CH_Trust on x.CH_TrustID equals b.CH_TrustID join c in Funs.DB.HJGL_BS_NDTType on b.CH_NDTMethod equals c.NDT_ID where a.JOTY_Group == "2" && y.ISO_ID == isoId && c.NDT_Code == "MT" select x).Distinct().Count().ToString(); if (ptCount1 != "0") { v1 = "PT"; v2 = ptCount1; if (mtCount1 != "0") { v3 = "MT"; v4 = mtCount1; } } else { if (mtCount1 != "0") { v1 = "MT"; v2 = mtCount1; } } string ptCount2 = (from x in Funs.DB.HJGL_CH_TrustItem join y in Funs.DB.HJGL_PW_JointInfo on x.JOT_ID equals y.JOT_ID join a in Funs.DB.HJGL_BS_JointType on y.JOTY_ID equals a.JOTY_ID join b in Funs.DB.HJGL_CH_Trust on x.CH_TrustID equals b.CH_TrustID join c in Funs.DB.HJGL_BS_NDTType on b.CH_NDTMethod equals c.NDT_ID where a.JOTY_Group == "3" && y.ISO_ID == isoId && c.NDT_Code == "PT" select x).Distinct().Count().ToString(); string mtCount2 = (from x in Funs.DB.HJGL_CH_TrustItem join y in Funs.DB.HJGL_PW_JointInfo on x.JOT_ID equals y.JOT_ID join a in Funs.DB.HJGL_BS_JointType on y.JOTY_ID equals a.JOTY_ID join b in Funs.DB.HJGL_CH_Trust on x.CH_TrustID equals b.CH_TrustID join c in Funs.DB.HJGL_BS_NDTType on b.CH_NDTMethod equals c.NDT_ID where a.JOTY_Group == "3" && y.ISO_ID == isoId && c.NDT_Code == "MT" select x).Distinct().Count().ToString(); if (ptCount2 != "0") { v5 = "PT"; v6 = ptCount2; if (mtCount1 != "0") { v7 = "MT"; v8 = mtCount2; } } else { if (mtCount2 != "0") { v5 = "MT"; v6 = mtCount2; } } string rtCount3 = (from x in Funs.DB.HJGL_CH_TrustItem join y in Funs.DB.HJGL_PW_JointInfo on x.JOT_ID equals y.JOT_ID join a in Funs.DB.HJGL_BS_JointType on y.JOTY_ID equals a.JOTY_ID join b in Funs.DB.HJGL_CH_Trust on x.CH_TrustID equals b.CH_TrustID join c in Funs.DB.HJGL_BS_NDTType on b.CH_NDTMethod equals c.NDT_ID where a.JOTY_Group == "1" && y.ISO_ID == isoId && c.NDT_Code == "RT" select x).Distinct().Count().ToString(); string utCount3 = (from x in Funs.DB.HJGL_CH_TrustItem join y in Funs.DB.HJGL_PW_JointInfo on x.JOT_ID equals y.JOT_ID join a in Funs.DB.HJGL_BS_JointType on y.JOTY_ID equals a.JOTY_ID join b in Funs.DB.HJGL_CH_Trust on x.CH_TrustID equals b.CH_TrustID join c in Funs.DB.HJGL_BS_NDTType on b.CH_NDTMethod equals c.NDT_ID where a.JOTY_Group == "1" && y.ISO_ID == isoId && c.NDT_Code == "UT" select x).Distinct().Count().ToString(); if (rtCount3 != "0") { v9 = "RT"; v10 = rtCount3; if (utCount3 != "0") { v11 = "UT"; v12 = utCount3; } } else { if (utCount3 != "0") { v9 = "UT"; v10 = utCount3; } } string rt4 = "RT"; string rtCount4 = (from x in Funs.DB.HJGL_CH_TrustItem join y in Funs.DB.HJGL_PW_JointInfo on x.JOT_ID equals y.JOT_ID join a in Funs.DB.HJGL_BS_JointType on y.JOTY_ID equals a.JOTY_ID join b in Funs.DB.HJGL_CH_Trust on x.CH_TrustID equals b.CH_TrustID join c in Funs.DB.HJGL_BS_NDTType on b.CH_NDTMethod equals c.NDT_ID where a.JOTY_Group == "1" && y.ISO_ID == isoId && c.NDT_Code == "RT" && y.JOT_JointAttribute == "固定" select x).Distinct().Count().ToString(); string ut4 = "UT"; string utCount4 = (from x in Funs.DB.HJGL_CH_TrustItem join y in Funs.DB.HJGL_PW_JointInfo on x.JOT_ID equals y.JOT_ID join a in Funs.DB.HJGL_BS_JointType on y.JOTY_ID equals a.JOTY_ID join b in Funs.DB.HJGL_CH_Trust on x.CH_TrustID equals b.CH_TrustID join c in Funs.DB.HJGL_BS_NDTType on b.CH_NDTMethod equals c.NDT_ID where a.JOTY_Group == "1" && y.ISO_ID == isoId && c.NDT_Code == "UT" && y.JOT_JointAttribute == "固定" select x).Distinct().Count().ToString(); if (rtCount4 != "0") { v13 = "RT"; v14 = rtCount4; if (utCount4 != "0") { v15 = "UT"; v16 = utCount4; } } else { if (utCount4 != "0") { v13 = "UT"; v14 = utCount4; } } #endregion //列表 var listStr = new List(); listStr.Add(new SqlParameter("@iso_id", hidISO_ID.Value)); listStr.Add(new SqlParameter("@Flag", "0")); SqlParameter[] parameter = listStr.ToArray(); var tb = SQLHelper.GetDataTableRunProc("HJGL_rpt_PipelineAttach", parameter); //头部 var listTitleStr = new List(); listTitleStr.Add(new SqlParameter("@iso_id", hidISO_ID.Value)); SqlParameter[] titleparameter = listTitleStr.ToArray(); var tbTitle = SQLHelper.GetDataTableRunProc("HJGL_rpt_PipelineAttachMain", titleparameter); if (tb.Rows.Count > 0 && tbTitle.Rows.Count > 0) { CellRangeAddress region; var pageNum = tb.Rows.Count < 21 ? 1 : (tb.Rows.Count > 21 && tb.Rows.Count < 55) ? 2 : Math.Ceiling((float)(tb.Rows.Count - 55) / 38) + 2; //公共样式 ICellStyle style = CommonPrint.SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10, true); //无边框文字靠左 ICellStyle leftNoneStyle = CommonPrint.SetExcelStyle(hssfworkbook, BorderStyle.None, BorderStyle.None, BorderStyle.None, BorderStyle.None, VerticalAlignment.Center, HorizontalAlignment.Left, 10, true); //无边框文字靠右 ICellStyle rightNoneStyle = CommonPrint.SetExcelStyle(hssfworkbook, BorderStyle.None, BorderStyle.None, BorderStyle.None, BorderStyle.None, VerticalAlignment.Center, HorizontalAlignment.Right, 10, true); //头部样式 ICellStyle titleStyle = CommonPrint.SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 12, true, true, "黑体"); //循环页 for (int i = 1; i <= pageNum; i++) { //每页数据开始和结束条数 var dStart = 0; var dEnd = 0; //数据开始行和结束行 var tStart = 0; var tEnd = 0; #region 头部和每页数据参数 //第一页和第二页需要创建头 if (i == 1) { //创建头部行和列 ws = ExcelCreateRowTitle(ws, hssfworkbook, rowIndex, rowIndex + 13, style, 0, 14); //取数据开始和结束条数 dStart = 0; dEnd = 21; //数据开始行和结束行 tStart = rowIndex + 14; tEnd = rowIndex + 34; #region 头部 //行1 ws.GetRow(rowIndex).GetCell(0).SetCellValue("文件版本:1"); ws.GetRow(rowIndex).GetCell(0).CellStyle = leftNoneStyle; region = new CellRangeAddress(rowIndex, rowIndex, 8, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex).GetCell(8).SetCellValue("保管期限:5年"); ws.GetRow(rowIndex).GetCell(8).CellStyle = rightNoneStyle; //行2 region = new CellRangeAddress(rowIndex + 1, rowIndex + 3, 0, 1); ws.AddMergedRegion(region); IDrawing patriarch = ws.CreateDrawingPatriarch(); IClientAnchor anchor = patriarch.CreateAnchor(0, 0, 0, 0, 0, rowIndex + 1, 1, rowIndex + 4); IPicture pict = patriarch.CreatePicture(anchor, pictureIdx); //pict.Resize(); //行3 region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 2, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 1).GetCell(2).SetCellValue("中国石油化工股份有限公司镇海炼化分公司管理体系"); region = new CellRangeAddress(rowIndex + 2, rowIndex + 2, 2, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 2).GetCell(2).SetCellValue("项目管理部管道单线图附页"); ws.GetRow(rowIndex + 2).GetCell(2).CellStyle = titleStyle; //行4 ws.GetRow(rowIndex + 3).GetCell(2).SetCellValue("记录编号"); region = new CellRangeAddress(rowIndex + 3, rowIndex + 3, 3, 5); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 3).GetCell(3).SetCellValue("PMT-T10.326.06.039.2016"); ws.GetRow(rowIndex + 3).GetCell(6).SetCellValue("使用单位"); region = new CellRangeAddress(rowIndex + 3, rowIndex + 3, 7, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 3).GetCell(7).SetCellValue("镇海石化建安工程有限公司"); //行5 ws.GetRow(rowIndex + 4).GetCell(0).SetCellValue("工程名称"); region = new CellRangeAddress(rowIndex + 4, rowIndex + 4, 1, 5); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 4).GetCell(1).SetCellValue(tbTitle.Rows[0]["ProjectName"].ToString()); ws.GetRow(rowIndex + 4).GetCell(6).SetCellValue("管道级别"); region = new CellRangeAddress(rowIndex + 4, rowIndex + 4, 7, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 4).GetCell(7).SetCellValue(tbTitle.Rows[0]["ISC_IsoName"].ToString()); //行6 ws.GetRow(rowIndex + 5).GetCell(0).SetCellValue("单线号"); region = new CellRangeAddress(rowIndex + 5, rowIndex + 5, 1, 3); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 5).GetCell(1).SetCellValue(tbTitle.Rows[0]["ISO_IsoNo"].ToString()); ws.GetRow(rowIndex + 5).GetCell(4).SetCellValue("设计压力"); ws.GetRow(rowIndex + 5).GetCell(5).SetCellValue(tbTitle.Rows[0]["ISO_DesignPress"].ToString()); ws.GetRow(rowIndex + 5).GetCell(6).SetCellValue("管道主规格"); region = new CellRangeAddress(rowIndex + 5, rowIndex + 5, 7, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 5).GetCell(7).SetCellValue(tbTitle.Rows[0]["Specification"].ToString()); //行7 ws.GetRow(rowIndex + 6).GetCell(0).SetCellValue("管道编号"); region = new CellRangeAddress(rowIndex + 6, rowIndex + 6, 1, 3); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 6).GetCell(1).SetCellValue(tbTitle.Rows[0]["ISO_Code"].ToString()); ws.GetRow(rowIndex + 6).GetCell(4).SetCellValue("设计温度"); ws.GetRow(rowIndex + 6).GetCell(5).SetCellValue(tbTitle.Rows[0]["ISO_DesignTemperature"].ToString()); ws.GetRow(rowIndex + 6).GetCell(6).SetCellValue("管道主材质"); region = new CellRangeAddress(rowIndex + 6, rowIndex + 6, 7, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 6).GetCell(7).SetCellValue(tbTitle.Rows[0]["STE_Code"].ToString()); //行8 ws.GetRow(rowIndex + 7).GetCell(0).SetCellValue("检测类别号"); region = new CellRangeAddress(rowIndex + 7, rowIndex + 7, 1, 3); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 7).GetCell(1).SetCellValue(tbTitle.Rows[0]["TestCategoryNum"].ToString()); ws.GetRow(rowIndex + 7).GetCell(4).SetCellValue("验收规范"); ws.GetRow(rowIndex + 7).GetCell(5).SetCellValue(tbTitle.Rows[0]["ExecStandardName"].ToString()); ws.GetRow(rowIndex + 7).GetCell(6).SetCellValue("介质"); region = new CellRangeAddress(rowIndex + 7, rowIndex + 7, 7, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 7).GetCell(7).SetCellValue(tbTitle.Rows[0]["SER_Name"].ToString()); //行9 ws.GetRow(rowIndex + 8).GetCell(0).SetCellValue("焊缝类型"); region = new CellRangeAddress(rowIndex + 8, rowIndex + 8, 1, 3); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 8).GetCell(1).SetCellValue("角焊接头"); region = new CellRangeAddress(rowIndex + 8, rowIndex + 8, 4, 5); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 8).GetCell(4).SetCellValue("支管连接接头"); region = new CellRangeAddress(rowIndex + 8, rowIndex + 8, 6, 7); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 8).GetCell(6).SetCellValue("对焊接头"); region = new CellRangeAddress(rowIndex + 8, rowIndex + 8, 8, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 8).GetCell(8).SetCellValue("其中对焊接头固定口"); //行10 ws.GetRow(rowIndex + 9).GetCell(0).SetCellValue("总焊口数"); region = new CellRangeAddress(rowIndex + 9, rowIndex + 9, 1, 3); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 9).GetCell(1).SetCellValue(tbTitle.Rows[0]["Joty_C_Num"].ToString()); region = new CellRangeAddress(rowIndex + 9, rowIndex + 9, 4, 5); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 9).GetCell(4).SetCellValue(tbTitle.Rows[0]["Joty_D_Num"].ToString()); region = new CellRangeAddress(rowIndex + 9, rowIndex + 9, 6, 7); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 9).GetCell(6).SetCellValue(tbTitle.Rows[0]["Joty_Num"].ToString()); region = new CellRangeAddress(rowIndex + 9, rowIndex + 9, 8, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 9).GetCell(8).SetCellValue(tbTitle.Rows[0]["Joty_G_Num"].ToString()); //行11 ws.GetRow(rowIndex + 10).GetCell(0).SetCellValue("检测比例"); region = new CellRangeAddress(rowIndex + 10, rowIndex + 10, 1, 3); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 10).GetCell(1).SetCellValue(tbTitle.Rows[0]["Joty_C_Rate"].ToString()); region = new CellRangeAddress(rowIndex + 10, rowIndex + 10, 4, 5); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 10).GetCell(4).SetCellValue(tbTitle.Rows[0]["Joty_D_Rate"].ToString()); region = new CellRangeAddress(rowIndex + 10, rowIndex + 10, 6, 7); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 10).GetCell(6).SetCellValue(tbTitle.Rows[0]["JotyRate"].ToString()); region = new CellRangeAddress(rowIndex + 10, rowIndex + 10, 8, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 10).GetCell(8).SetCellValue("40%"); //行12 ws.GetRow(rowIndex + 11).GetCell(0).SetCellValue("检测方法"); region = new CellRangeAddress(rowIndex + 11, rowIndex + 11, 1, 2); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 11).GetCell(1).SetCellValue(v1); ws.GetRow(rowIndex + 11).GetCell(3).SetCellValue(v3); ws.GetRow(rowIndex + 11).GetCell(4).SetCellValue(v5); ws.GetRow(rowIndex + 11).GetCell(5).SetCellValue(v7); ws.GetRow(rowIndex + 11).GetCell(6).SetCellValue(v9); ws.GetRow(rowIndex + 11).GetCell(7).SetCellValue(v11); region = new CellRangeAddress(rowIndex + 11, rowIndex + 11, 8, 9); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 11).GetCell(8).SetCellValue(v13); region = new CellRangeAddress(rowIndex + 11, rowIndex + 11, 10, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 11).GetCell(10).SetCellValue(v15); //行13 ws.GetRow(rowIndex + 12).GetCell(0).SetCellValue("实检焊口数"); region = new CellRangeAddress(rowIndex + 12, rowIndex + 12, 1, 2); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 12).GetCell(1).SetCellValue(v2); ws.GetRow(rowIndex + 12).GetCell(3).SetCellValue(v4); ws.GetRow(rowIndex + 12).GetCell(4).SetCellValue(v6); ws.GetRow(rowIndex + 12).GetCell(5).SetCellValue(v8); ws.GetRow(rowIndex + 12).GetCell(6).SetCellValue(v10); ws.GetRow(rowIndex + 12).GetCell(7).SetCellValue(v12); region = new CellRangeAddress(rowIndex + 12, rowIndex + 12, 8, 9); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 12).GetCell(8).SetCellValue(v14); region = new CellRangeAddress(rowIndex + 12, rowIndex + 12, 10, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 12).GetCell(10).SetCellValue(v16); //行14 ws.GetRow(rowIndex + 13).GetCell(0).SetCellValue("焊口编号"); region = new CellRangeAddress(rowIndex + 13, rowIndex + 13, 1, 2); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 13).GetCell(1).SetCellValue("焊工号"); ws.GetRow(rowIndex + 13).GetCell(3).SetCellValue("焊接位置"); ws.GetRow(rowIndex + 13).GetCell(4).SetCellValue("焊接时间"); ws.GetRow(rowIndex + 13).GetCell(5).SetCellValue("热处理时间"); ws.GetRow(rowIndex + 13).GetCell(6).SetCellValue("硬度试验时间"); ws.GetRow(rowIndex + 13).GetCell(7).SetCellValue("委托检测时间"); region = new CellRangeAddress(rowIndex + 13, rowIndex + 13, 8, 9); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 13).GetCell(8).SetCellValue("检测结果"); region = new CellRangeAddress(rowIndex + 13, rowIndex + 13, 10, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 13).GetCell(10).SetCellValue("备注"); #endregion } else if (i == 2) { //创建头部行和列 ws = ExcelCreateRowTitle(ws, hssfworkbook, rowIndex, rowIndex + 5, style, 0, 14, true); //取数据开始和结束条数 dStart = 21; dEnd = 52; //数据开始行和结束行 tStart = rowIndex + 6; tEnd = rowIndex + 36; #region 头部(续) //行1 ws.GetRow(rowIndex).GetCell(0).SetCellValue("文件版本:1"); ws.GetRow(rowIndex).GetCell(0).CellStyle = leftNoneStyle; region = new CellRangeAddress(rowIndex, rowIndex, 8, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex).GetCell(8).SetCellValue("保管期限:5年"); ws.GetRow(rowIndex).GetCell(8).CellStyle = rightNoneStyle; //行2 region = new CellRangeAddress(rowIndex + 1, rowIndex + 3, 0, 1); ws.AddMergedRegion(region); IDrawing patriarch = ws.CreateDrawingPatriarch(); IClientAnchor anchor = patriarch.CreateAnchor(0, 0, 0, 0, 0, rowIndex + 1, 1, rowIndex + 4); IPicture pict = patriarch.CreatePicture(anchor, pictureIdx); //pict.Resize(); //行3 region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 2, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 1).GetCell(2).SetCellValue("中国石油化工股份有限公司镇海炼化分公司管理体系"); region = new CellRangeAddress(rowIndex + 2, rowIndex + 2, 2, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 2).GetCell(2).SetCellValue("管道单线图附页(续)"); ws.GetRow(rowIndex + 2).GetCell(2).CellStyle = titleStyle; //行4 ws.GetRow(rowIndex + 3).GetCell(2).SetCellValue("记录编号"); region = new CellRangeAddress(rowIndex + 3, rowIndex + 3, 3, 5); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 3).GetCell(3).SetCellValue("PMT-T10.326.06.039.2016"); ws.GetRow(rowIndex + 3).GetCell(6).SetCellValue("使用单位"); region = new CellRangeAddress(rowIndex + 3, rowIndex + 3, 7, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 3).GetCell(7).SetCellValue("镇海石化建安工程有限公司"); //行5 ws.GetRow(rowIndex + 4).GetCell(0).SetCellValue("工程名称"); region = new CellRangeAddress(rowIndex + 4, rowIndex + 4, 1, 5); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 4).GetCell(1).SetCellValue(tbTitle.Rows[0]["ProjectName"].ToString()); ws.GetRow(rowIndex + 4).GetCell(6).SetCellValue("管道级别"); region = new CellRangeAddress(rowIndex + 4, rowIndex + 4, 7, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 4).GetCell(7).SetCellValue(tbTitle.Rows[0]["ISO_IsoNo"].ToString()); //行6 ws.GetRow(rowIndex + 5).GetCell(0).SetCellValue("焊口编号"); region = new CellRangeAddress(rowIndex + 5, rowIndex + 5, 1, 2); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 5).GetCell(1).SetCellValue("焊工号"); ws.GetRow(rowIndex + 5).GetCell(3).SetCellValue("焊接位置"); ws.GetRow(rowIndex + 5).GetCell(4).SetCellValue("焊接时间"); ws.GetRow(rowIndex + 5).GetCell(5).SetCellValue("热处理时间"); ws.GetRow(rowIndex + 5).GetCell(6).SetCellValue("硬度试验时间"); ws.GetRow(rowIndex + 5).GetCell(7).SetCellValue("委托检测时间"); region = new CellRangeAddress(rowIndex + 5, rowIndex + 5, 8, 9); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 5).GetCell(8).SetCellValue("检测结果"); region = new CellRangeAddress(rowIndex + 5, rowIndex + 5, 10, 14); ws.AddMergedRegion(region); ws.GetRow(rowIndex + 5).GetCell(10).SetCellValue("备注"); #endregion } else { var pNum = (i - 2) * 38; //取数据开始和结束条数 dStart = 52 + ((i - 3) * 38); dEnd = 52 + pNum; //数据开始行和结束行 tStart = rowIndex; tEnd = rowIndex + 37; } #endregion #region 数据 //创建数据行和列 ws = ExcelCreateRow(ws, hssfworkbook, tStart, tEnd, style, 0, 14); //获取当前页数据 var pageTb = GetPageToTable(tb, dStart, dEnd); //遍历数据 for (int j = 0; j < pageTb.Rows.Count; j++) { var dataRow = tStart + j; ws.GetRow(dataRow).GetCell(0).SetCellValue(pageTb.Rows[j]["JOT_JointNo"].ToString()); ws.GetRow(dataRow).GetCell(1).SetCellValue(pageTb.Rows[j]["WED_Code"].ToString()); ws.GetRow(dataRow).GetCell(3).SetCellValue(pageTb.Rows[j]["JOT_Location"].ToString()); ws.GetRow(dataRow).GetCell(4).SetCellValue(pageTb.Rows[j]["JOT_WeldDate"].ToString()); ws.GetRow(dataRow).GetCell(5).SetCellValue(pageTb.Rows[j]["TrustDate"].ToString()); ws.GetRow(dataRow).GetCell(6).SetCellValue(pageTb.Rows[j]["TestDate"].ToString()); ws.GetRow(dataRow).GetCell(7).SetCellValue(pageTb.Rows[j]["CH_TrustDate"].ToString()); ws.GetRow(dataRow).GetCell(8).SetCellValue(pageTb.Rows[j]["IsOK"].ToString()); ws.GetRow(dataRow).GetCell(10).SetCellValue(pageTb.Rows[j]["Remark"].ToString()); } #endregion #region 尾部 //尾部页码 ws.CreateRow(tEnd + 1); ws.GetRow(tEnd + 1).HeightInPoints = 16.5f; //尾部样式 ICellStyle pageStyle = CommonPrint.SetExcelStyle(hssfworkbook, BorderStyle.None, BorderStyle.None, BorderStyle.None, BorderStyle.None, VerticalAlignment.Center, HorizontalAlignment.Center, 10); for (int eIndex = 0; eIndex <= 14; eIndex++) { ws.GetRow(tEnd + 1).CreateCell(eIndex); ws.GetRow(tEnd + 1).GetCell(eIndex).CellStyle = pageStyle; } ws.GetRow(tEnd + 1).GetCell(9).SetCellValue("第"); ws.GetRow(tEnd + 1).GetCell(10).SetCellValue(i.ToString()); ws.GetRow(tEnd + 1).GetCell(11).SetCellValue("页"); ws.GetRow(tEnd + 1).GetCell(12).SetCellValue("共"); ws.GetRow(tEnd + 1).GetCell(13).SetCellValue(pageNum.ToString()); ws.GetRow(tEnd + 1).GetCell(14).SetCellValue("页"); #endregion rowIndex = tEnd + 2; } } } } ws.SetMargin(MarginType.LeftMargin, 0.2); ws.SetMargin(MarginType.RightMargin, 0.2); //ws.SetMargin(MarginType.BottomMargin, 1); //ws.SetMargin(MarginType.TopMargin, 1); //ws.SetMargin(MarginType.FooterMargin, 0.5); //ws.SetMargin(MarginType.HeaderMargin, 0.5); ws.PrintSetup.Landscape = false; ws.PrintSetup.PaperSize = 9; ws.ForceFormulaRecalculation = true; using (FileStream filess = File.OpenWrite(ReportFileName)) { hssfworkbook.Write(filess); } FileInfo filet = new FileInfo(ReportFileName); Response.Clear(); Response.Charset = "GB2312"; Response.ContentEncoding = System.Text.Encoding.UTF8; // 添加头信息,为"文件下载/另存为"对话框指定默认文件名 Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode("项目管理管线单线图附页.xlsx")); // 添加头信息,指定文件大小,让浏览器能够显示下载进度 Response.AddHeader("Content-Length", filet.Length.ToString()); // 指定返回的是一个不能被客户端读取的流,必须被下载 Response.ContentType = "application/ms-excel"; // 把文件流发送到客户端 Response.WriteFile(filet.FullName); // 停止页面的执行 Response.End(); } } #endregion #region 私有方法 /// /// 数据行和列 /// /// private XSSFSheet ExcelCreateRow(XSSFSheet ws, XSSFWorkbook hssfworkbook, int sRows, int eRows, ICellStyle style, int cStart, int cEnd) { CellRangeAddress region; for (int i = sRows; i <= eRows; i++) { ws.CreateRow(i); ws.GetRow(i).HeightInPoints = 18.8f; for (int j = cStart; j <= cEnd; j++) { ws.GetRow(i).CreateCell(j); ws.GetRow(i).GetCell(j).CellStyle = style; } //合并数据 region = new CellRangeAddress(i, i, 1, 2); ws.AddMergedRegion(region); region = new CellRangeAddress(i, i, 8, 9); ws.AddMergedRegion(region); region = new CellRangeAddress(i, i, 10, 14); ws.AddMergedRegion(region); } return ws; } /// /// 创建头部 /// /// private XSSFSheet ExcelCreateRowTitle(XSSFSheet ws, XSSFWorkbook hssfworkbook, int sRows, int eRows, ICellStyle style, int cStart, int cEnd, bool xuTitle = false) { var noneStyle = CommonPrint.SetExcelStyle(hssfworkbook, BorderStyle.None, BorderStyle.None, BorderStyle.None, BorderStyle.None, VerticalAlignment.Center, HorizontalAlignment.Center, 7, true); for (int i = sRows; i <= eRows; i++) { ws.CreateRow(i); if (xuTitle) { ws.GetRow(i).HeightInPoints = i == sRows ? 16.5f : i == (sRows + 1) ? 17.3f : i == (sRows + 2) ? 27.8f : i == (sRows + 3) ? 20.3f : i == (sRows + 4) ? 20.3f : i == (sRows + 5) ? 28.5f : 18.8f; } else { ws.GetRow(i).HeightInPoints = i == sRows ? 16.5f : i == (sRows + 1) ? 18f : i == (sRows + 2) ? 27.8f : i == (sRows + 3) ? 20.3f : i == (sRows + 4) ? 20.3f : i == (sRows + 5) ? 21.8f : i == (sRows + 6) ? 28.5f : i == (sRows + 7) ? 21f : i == (sRows + 8) ? 24.8f : i == (sRows + 9) ? 21f : i == (sRows + 10) ? 21f : i == (sRows + 11) ? 21.8f : i == (sRows + 12) ? 21f : i == (sRows + 13) ? 27f : 18.8f; } for (int j = cStart; j <= cEnd; j++) { ws.GetRow(i).CreateCell(j); ws.GetRow(i).GetCell(j).CellStyle = i == sRows ? noneStyle : style; } } return ws; } /// /// 查询指定条数分页 /// /// public static DataTable GetPageToTable(DataTable dt, int StartNum, int EndNum) { //0页代表每页数据,直接返回 if (EndNum == 0) return dt; //数据源为空返回空DataTable if (dt == null) return new DataTable(); DataTable newdt = dt.Copy(); newdt.Clear();//copy dt的框架 if (StartNum >= dt.Rows.Count) return newdt;//源数据记录数小于等于要显示的记录,直接返回dt if (EndNum > dt.Rows.Count) EndNum = dt.Rows.Count; for (int i = StartNum; i <= EndNum - 1; i++) { DataRow newdr = newdt.NewRow(); DataRow dr = dt.Rows[i]; foreach (DataColumn column in dt.Columns) { newdr[column.ColumnName] = dr[column.ColumnName]; } newdt.Rows.Add(newdr); } return newdt; } #endregion } }