static void Main(string[] args) { XWPFDocument document = new XWPFDocument(); XWPFTable tableOne = document.CreateTable(); XWPFTableRow tableOneRow1 = tableOne.GetRow(0); XWPFTableRow tableOneRow2 = tableOne.CreateRow(); tableOneRow1.GetCell(0).SetText("Test11"); tableOneRow1.AddNewTableCell(); tableOneRow1.GetCell(1).SetText("Test12"); tableOneRow2.GetCell(0).SetText("Test21"); tableOneRow2.AddNewTableCell(); XWPFTableCell cell = tableOneRow2.GetCell(1); var ctTbl = cell.GetCTTc().AddNewTbl(); //to remove the line from the cell, you can call cell.removeParagraph(0) instead cell.SetText("line1"); cell.GetCTTc().AddNewP(); XWPFTable tableTwo = new XWPFTable(ctTbl, cell); XWPFTableRow tableTwoRow1 = tableTwo.GetRow(0); tableTwoRow1.GetCell(0).SetText("nestedTable11"); tableTwoRow1.AddNewTableCell(); tableTwoRow1.GetCell(1).SetText("nestedTable12"); using (FileStream fs = new FileStream("nestedTable.docx", FileMode.Create)) { document.Write(fs); } }
private void MergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) { for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) { XWPFTableCell cell = table.GetRow(row).GetCell(cellIndex); if (cellIndex == fromCell) { cell.GetCTTc().AddNewTcPr().AddNewHMerge().val = ST_Merge.restart; } else { cell.GetCTTc().AddNewTcPr().AddNewHMerge().val = ST_Merge.@continue; } } }
void CreateExceptionRecordsCell(ReportDownloadModel Datas, XWPFTable table, out CT_Row m_NewRow, out XWPFTableRow m_Row, out XWPFTableCell cell, out CT_Tc cttc, out CT_TcPr ctPr) { DealWithMergeCell(table, out m_NewRow, out m_Row, out cell, out cttc, out ctPr); StartMergeRow(cttc, ctPr, "异常记录"); cell = m_Row.CreateCell(); SetBoldFontCell(cell, "检测类型"); SetAlign(cell); cell = m_Row.CreateCell(); SetBoldFontCell(cell, "测点编号"); SetAlign(cell); cell = m_Row.CreateCell(); SetBoldFontCell(cell, "测点位置"); SetAlign(cell); cell = m_Row.CreateCell(); SetBoldFontCell(cell, "异常次数"); SetAlign(cell); for (int i = 1; i <= Datas.ExceptionRecordNumber; i++) { m_NewRow = new CT_Row(); m_Row = new XWPFTableRow(m_NewRow, table); table.AddRow(m_Row); cell = m_Row.CreateCell(); cttc = cell.GetCTTc(); ctPr = cttc.AddNewTcPr(); ctPr.AddNewVMerge().val = ST_Merge.@continue;//合并行 //横向创建4个单元格 for (int k = 1; k < 5; k++) { cell = m_Row.CreateCell(); SetAlign(cell); } } }
/// <summary> /// 合并行、垂直合并列单元格 /// </summary> /// <param name="table"></param> /// <param name="fromRow"></param> /// <param name="toRow"></param> /// <param name="colIndex"></param> public void MYMergeRows(XWPFTable table, int fromRow, int toRow, int colIndex) { for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) { XWPFTableCell rowcell = table.GetRow(rowIndex).GetCell(colIndex); rowcell.SetVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); CT_Tc cttc = rowcell.GetCTTc(); CT_TcPr ctTcPr = cttc.tcPr; if (ctTcPr == null) { ctTcPr = cttc.AddNewTcPr(); } if (rowIndex == fromRow) { // The first merged cell is set with RESTART merge value ctTcPr.AddNewVMerge().val = ST_Merge.restart; } else { // Cells which join (merge) the first one, are set with CONTINUE ctTcPr.AddNewVMerge().val = ST_Merge.@continue; //继续合并行 } ctTcPr.AddNewVAlign().val = ST_VerticalJc.center; //垂直 } }
/// <summary> /// 为XWPFDocument文档复制指定索引的表 /// </summary> /// <param name="readDoc">模板文件</param> /// <param name="tableIndex">需要复制模板的table的索引</param> /// <param name="targetIndex">复制到目标位置的table索引(如果目标位置原来有表格,会被覆盖)</param> /// <param name="myDoc">新创建的文件</param> public static void CopyTable(XWPFDocument readDoc, int tableIndex, int targetIndex, XWPFDocument myDoc) { var sourceTable = readDoc.Tables[tableIndex]; CT_Tbl sourceCTTbl = readDoc.Document.body.GetTblArray(8); var targetTable = myDoc.CreateTable(); myDoc.SetTable(targetIndex, targetTable); var targetCTTbl = myDoc.Document.body.GetTblArray()[myDoc.Document.body.GetTblArray().Length - 1]; targetCTTbl.tblPr = sourceCTTbl.tblPr; targetCTTbl.tblPr.jc.val = ST_Jc.left;//表格在页面水平位置 //targetCTTbl.tblGrid = sourceCTTbl.tblGrid; for (int i = 0; i < sourceTable.Rows.Count; i++) { var tbRow = targetTable.CreateRow(); var targetRow = tbRow.GetCTRow(); tbRow.RemoveCell(0); XWPFTableRow row = sourceTable.Rows[i]; targetRow.trPr = row.GetCTRow().trPr; for (int c = 0; c < row.GetTableCells().Count; c++) { var tbCell = tbRow.CreateCell(); tbCell.RemoveParagraph(0); var targetCell = tbCell.GetCTTc(); XWPFTableCell cell = row.GetTableCells()[c]; targetCell.tcPr = cell.GetCTTc().tcPr; for (int p = 0; p < cell.Paragraphs.Count; p++) { var tbPhs = tbCell.AddParagraph(); CT_P targetPhs = tbPhs.GetCTP(); XWPFParagraph para = cell.Paragraphs[p]; var paraCTP = para.GetCTP(); targetPhs.pPr = paraCTP.pPr; targetPhs.rsidR = paraCTP.rsidR; targetPhs.rsidRPr = paraCTP.rsidRPr; targetPhs.rsidRDefault = paraCTP.rsidRDefault; targetPhs.rsidP = paraCTP.rsidP; for (int r = 0; r < para.Runs.Count; r++) { var tbRun = tbPhs.CreateRun(); CT_R targetRun = tbRun.GetCTR(); XWPFRun run = para.Runs[r]; var runCTR = run.GetCTR(); targetRun.rPr = runCTR.rPr; targetRun.rsidRPr = runCTR.rsidRPr; targetRun.rsidR = runCTR.rsidR; CT_Text text = targetRun.AddNewT(); text.Value = run.Text; } } } } targetTable.RemoveRow(0); }
///// <summary> ///// 组合搜索条件 ///// </summary> ///// <returns></returns> //private Expression<Func<RepetitivePlan, bool>> GetWhere() //{ // Expression<Func<RepetitivePlan, bool>> predicate = PredicateBuilder.True<RepetitivePlan>(); // predicate = predicate.And(m => m.PlanState == "0"); // predicate = predicate.And(m => m.Creator == User.ID); // if (!string.IsNullOrEmpty(Request.QueryString["plancode"])) // { // var val = Request.QueryString["plancode"].Trim(); // predicate = predicate.And(m => m.PlanCode == val); // } // return predicate; //} ///* //private void MyUnSubmitCurrentPlanExport() //{ // AjaxResult result = new AjaxResult(); // result.IsSuccess = true; // var listData = currPlanBll.GetList(GetWhere1()); // #region // var hssfworkbook = new HSSFWorkbook(); // var sheet1 = hssfworkbook.CreateSheet("Sheet1"); // sheet1.DefaultRowHeight = 15 * 20; // sheet1.DefaultColumnWidth = 18; // //设置样式 // var styleTop = hssfworkbook.CreateCellStyle(); // var fontTop = hssfworkbook.CreateFont(); // fontTop.FontHeightInPoints = 11; // fontTop.FontName = "宋体"; // fontTop.Boldweight = (short)FontBoldWeight.Bold; // styleTop.Alignment = HorizontalAlignment.Center; // styleTop.SetFont(fontTop); // //设置样式 // var style = hssfworkbook.CreateCellStyle(); // var font = hssfworkbook.CreateFont(); // font.FontName = "宋体"; // font.FontHeightInPoints = 11; // style.SetFont(font); // var headerRow = sheet1.CreateRow(0); // headerRow.CreateCell(0).SetCellValue("申请单号"); // headerRow.CreateCell(1).SetCellValue("任务类型"); // headerRow.CreateCell(2).SetCellValue("注册号"); // headerRow.CreateCell(3).SetCellValue("使用机型"); // headerRow.CreateCell(4).SetCellValue("航线走向和飞行高度"); // headerRow.CreateCell(5).SetCellValue("预计开始时间"); // headerRow.CreateCell(6).SetCellValue("预计结束时间"); // headerRow.CreateCell(7).SetCellValue("起飞时刻"); // headerRow.CreateCell(8).SetCellValue("降落时刻"); // headerRow.CreateCell(9).SetCellValue("起飞点"); // headerRow.CreateCell(10).SetCellValue("降落点"); // headerRow.CreateCell(11).SetCellValue("周执行计划"); // headerRow.CreateCell(12).SetCellValue("其他需要说明的事项"); // int rowIndex = 1; // if (listData != null && listData.Count > 0) // { // foreach (var item in listData) // { // var dataRow = sheet1.CreateRow(rowIndex); // dataRow.CreateCell(0).SetCellValue(item.PlanCode); // dataRow.CreateCell(1).SetCellValue(item.FlightType); // dataRow.CreateCell(2).SetCellValue(item.CallSign); // dataRow.CreateCell(3).SetCellValue(item.AircraftType); // dataRow.CreateCell(4).SetCellValue(item.FlightDirHeight); // dataRow.CreateCell(5).SetCellValue(item.StartDate.ToString()); // dataRow.CreateCell(6).SetCellValue(item.EndDate.ToString()); // dataRow.CreateCell(7).SetCellValue(item.SOBT.ToString()); // dataRow.CreateCell(8).SetCellValue(item.SIBT.ToString()); // dataRow.CreateCell(9).SetCellValue(item.ADEP); // dataRow.CreateCell(10).SetCellValue(item.ADES); // dataRow.CreateCell(11).SetCellValue(item.WeekSchedule); // dataRow.CreateCell(12).SetCellValue(item.Remark); // rowIndex++; // } // var dr = sheet1.CreateRow(rowIndex); // rowIndex++; // } // #endregion // var file = new MemoryStream(); // hssfworkbook.Write(file); // Response.ContentType = "application/vnd.ms-excel"; // Response.ContentEncoding = Encoding.UTF8; // Response.Charset = ""; // Response.Clear(); // Response.AppendHeader("Content-Disposition", // "attachment;filename=" + // HttpUtility.UrlEncode("当日计划未提交列表" + ".xls", System.Text.Encoding.UTF8)); // file.WriteTo(Response.OutputStream); // file.Close(); // Response.End(); //} //private Expression<Func<V_CurrentPlan, bool>> GetWhere1() //{ // Expression<Func<V_CurrentPlan, bool>> predicate = PredicateBuilder.True<V_CurrentPlan>(); // var currDate = DateTime.Now.Date; // predicate = predicate.And(m => m.PlanState == "0" && m.Creator == User.ID && m.SOBT == currDate); // return predicate; //} public void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) { for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) { XWPFTableCell cell = table.GetRow(row).GetCell(cellIndex); if (cellIndex == fromCell) { // The first merged cell is set with RESTART merge value cell.GetCTTc().AddNewTcPr().AddNewHMerge().val = ST_Merge.restart; } else { // Cells which join (merge) the first one, are set with CONTINUE cell.GetCTTc().AddNewTcPr().AddNewHMerge().val = ST_Merge.@continue; } } }
// word跨行并单元格 public void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) { for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) { XWPFTableCell cell = table.GetRow(rowIndex).GetCell(col); if (rowIndex == fromRow) { // The first merged cell is set with RESTART merge value cell.GetCTTc().AddNewTcPr().AddNewVMerge().val = ST_Merge.restart; } else { // Cells which join (merge) the first one, are set with CONTINUE cell.GetCTTc().AddNewTcPr().AddNewVMerge().val = ST_Merge.@continue; } } }
/// <summary> /// 单元格居中对齐 /// </summary> /// <param name="cell"></param> void SetAlign(XWPFTableCell cell) { var cttc = cell.GetCTTc(); var ctPr = cttc.AddNewTcPr(); ctPr.AddNewVAlign().val = ST_VerticalJc.center;//垂直居中 cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center; }
/// <summary> /// 对合并单元格进行前处理 /// </summary> /// <param name="table"></param> /// <param name="m_NewRow"></param> /// <param name="m_Row"></param> /// <param name="cell"></param> /// <param name="cttc"></param> /// <param name="ctPr"></param> static void DealWithMergeCell(XWPFTable table, out CT_Row m_NewRow, out XWPFTableRow m_Row, out XWPFTableCell cell, out CT_Tc cttc, out CT_TcPr ctPr) { m_NewRow = new CT_Row(); m_Row = new XWPFTableRow(m_NewRow, table); table.AddRow(m_Row); cell = m_Row.CreateCell(); cttc = cell.GetCTTc(); ctPr = cttc.AddNewTcPr(); }
/// <summary> /// word 插入表格功能(13行2列) /// </summary> /// <param name="m_Docx">根文档</param> /// <param name="device_type">设备类型</param> /// <param name="kilometer_mark">公里标</param> /// <param name="side_direction">下行侧向</param> /// <param name="longitude">经度</param> /// <param name="latitude">纬度</param> private static void word_inster_table(XWPFDocument m_Docx, DbBean bean, int i = 1) { XWPFTable table = m_Docx.CreateTable(12, 2); CT_Tbl ctbl = m_Docx.Document.body.GetTblArray()[i]; CT_TblPr ctblpr = ctbl.AddNewTblPr(); ctblpr.jc = new CT_Jc(); ctblpr.jc.val = ST_Jc.center; table.Width = 3500; table.GetRow(0).GetCell(0).SetText("设备类型"); table.GetRow(0).GetCell(1).SetText(bean.DeviceType); table.GetRow(1).GetCell(0).SetText("公里标"); table.GetRow(1).GetCell(1).SetText(bean.KilometerMark); table.GetRow(2).GetCell(0).SetText("下行侧向"); table.GetRow(2).GetCell(1).SetText(bean.SideDirection); table.GetRow(3).GetCell(0).SetText("距线路中心距离(m)"); table.GetRow(4).GetCell(0).SetText("经度"); table.GetRow(4).GetCell(1).SetText(bean.Longitude); table.GetRow(5).GetCell(0).SetText("纬度"); table.GetRow(5).GetCell(1).SetText(bean.Latitude); table.GetRow(6).GetCell(0).SetText("杆塔类型"); table.GetRow(6).GetCell(1).SetText(bean.TowerType); table.GetRow(7).GetCell(0).SetText("杆塔高度"); table.GetRow(7).GetCell(1).SetText(bean.TowerHeight); table.GetRow(8).GetCell(0).SetText("天线1方向角"); table.GetRow(8).GetCell(1).SetText(bean.AntennaDirection1); table.GetRow(9).GetCell(0).SetText("天线2方向角"); table.GetRow(9).GetCell(1).SetText(bean.AntennaDirection2); table.GetRow(10).GetCell(0).SetText("天线3方向角"); table.GetRow(10).GetCell(1).SetText(bean.AntennaDirection3); table.GetRow(11).GetCell(0).SetText("天线4方向角"); table.GetRow(11).GetCell(1).SetText(bean.AntennaDirection4); CT_TcPr m_Pr = table.GetRow(2).GetCell(1).GetCTTc().AddNewTcPr(); m_Pr.tcW = new CT_TblWidth(); m_Pr.tcW.w = "3500"; m_Pr.tcW.type = ST_TblWidth.dxa; //设置单元格宽度 XWPFTableRow m_Row = table.InsertNewTableRow(0); XWPFTableCell cell = m_Row.CreateCell(); CT_Tc cttc = cell.GetCTTc(); CT_TcPr ctPr = cttc.AddNewTcPr(); ctPr.gridSpan = new CT_DecimalNumber(); ctPr.gridSpan.val = "2"; cttc.GetPList()[0].AddNewR().AddNewT().Value = "SITE 【序号】"; word_insert_space(1, m_Docx, 100); word_insert_text(m_Docx, "宋体", 11, "SITE 【序号】勘站照片"); word_insert_text(m_Docx, "宋体", 11, "(3-10张照片)"); word_insert_space(1, m_Docx, 100); }
public void Test54099() { XWPFDocument doc = new XWPFDocument(); CT_Tbl ctTable = new CT_Tbl(); XWPFTable table = new XWPFTable(ctTable, doc); XWPFTableRow tr = table.GetRow(0); XWPFTableCell cell = tr.GetCell(0); CT_Tc ctTc = cell.GetCTTc(); CT_TcPr tcPr = ctTc.AddNewTcPr(); CT_HMerge hMerge = tcPr.AddNewHMerge(); hMerge.val = (ST_Merge.restart); CT_TcBorders tblBorders = tcPr.AddNewTcBorders(); CT_VMerge vMerge = tcPr.AddNewVMerge(); }
private static XWPFTableCell SetCell(XWPFTableCell cell, string text, int width, string color = "", bool isCenter = true, int fontSize = 0, bool isBold = false) { CT_Tc cttc = cell.GetCTTc(); CT_TcPr ctpr = cttc.AddNewTcPr(); //垂直居中 ctpr.AddNewVAlign().val = ST_VerticalJc.center; //设置单元格列宽 ctpr.tcW = new CT_TblWidth(); ctpr.tcW.w = width.ToString(); ctpr.tcW.type = ST_TblWidth.dxa; //设置单元格背景色 if (!string.IsNullOrEmpty(color)) { cell.SetColor(color); } //设置文本 text = text == "PRI" ? "Y" : text; text = text == "YES" ? "Y" : text; text = text == "NO" ? "N" : text; text = text == "CURRENT_TIMESTAMP" ? "now()" : text; cell.RemoveParagraph(0); XWPFParagraph gp = cell.AddParagraph(); if (isCenter) { //水平居中 gp.Alignment = ParagraphAlignment.CENTER; } //文字格式 gp.Style = "NoSpacing"; XWPFRun gr = gp.CreateRun(); if (fontSize > 0) { gr.FontSize = fontSize; } gr.IsBold = isBold; gr.SetText(text); return(cell); }
private static void CopyCell(XWPFTableCell templateCell, XWPFTableCell cell) { cell.SetColor(templateCell.GetColor()); CT_TcBorders templateBorders = templateCell.GetCTTc().tcPr.tcBorders; if (templateBorders != null) { CT_TcBorders borders = cell.GetCTTc().AddNewTcPr().AddNewTcBorders(); WordGenerator.CopyBorders(templateBorders, borders); } for (int i = 0; i < cell.Paragraphs.Count; i++) { cell.RemoveParagraph(0); } foreach (XWPFParagraph templateph in templateCell.Paragraphs) { XWPFParagraph ph = cell.AddParagraph(); WordGenerator.CopyParagraph(templateph, ph); } }
/// <summary> /// 测试合并单元格 /// </summary> /// <param name="file"></param> private void NPOITestMerge(string file) { #region XWPFDocument doc; using (FileStream fileread = File.OpenRead(file)) { doc = new XWPFDocument(fileread); } #endregion foreach (XWPFTable table in doc.Tables) { XWPFTableRow row = table.GetRow(0); #region 老版NPOI(2.0)行合并【所有行】 for (int c = 0; c < row.GetTableCells().Count; c++) { XWPFTableCell cell = row.GetTableCells()[c]; CT_Tc tc = cell.GetCTTc(); if (tc.tcPr == null) { tc.AddNewTcPr(); } if (c == 0) { tc.tcPr.AddNewHMerge().val = ST_Merge.restart; } else { tc.tcPr.AddNewHMerge().val = ST_Merge.@continue; } } #endregion #region //行合并【0~2列】(有错?) //row.MergeCells(0, 2); #endregion #region //列合并【0~2行】(有错?) //for (int r = 0; r < 2; r++) //{ // XWPFTableCell cell = table.GetRow(r).GetTableCells()[0]; // CT_Tc tc = cell.GetCTTc(); // if (tc.tcPr == null) // { // tc.AddNewTcPr(); // } // if (r == 0) // { // tc.tcPr.AddNewVMerge().val = ST_Merge.restart; // } // else // { // tc.tcPr.AddNewVMerge().val = ST_Merge.@continue; // } //} #endregion } #region 保存Word FileStream filewrite = new FileStream(file, FileMode.Create, FileAccess.Write); try { doc.Write(filewrite); } catch (Exception x) { lblStatus.Text = x.Message; } finally { filewrite.Close(); } #endregion }
private static void word_inster_table(XWPFDocument m_Docx, OutputData bean, int i, String photoPathName) { XWPFTable table = m_Docx.CreateTable(12, 2); CT_Tbl ctbl = m_Docx.Document.body.GetTblArray()[i]; CT_TblPr ctblpr = ctbl.AddNewTblPr(); ctblpr.jc = new CT_Jc(); ctblpr.jc.val = ST_Jc.center; table.Width = 3500; table.GetRow(0).GetCell(0).SetText("设备类型"); table.GetRow(0).GetCell(1).SetText(bean.DeviceType); table.GetRow(1).GetCell(0).SetText("公里标"); table.GetRow(1).GetCell(1).SetText(bean.KilometerMark); table.GetRow(2).GetCell(0).SetText("下行侧向"); table.GetRow(2).GetCell(1).SetText(bean.SideDirection); table.GetRow(3).GetCell(0).SetText("距线路中心距离(m)"); table.GetRow(4).GetCell(0).SetText("经度"); table.GetRow(4).GetCell(1).SetText(bean.Longitude); table.GetRow(5).GetCell(0).SetText("纬度"); table.GetRow(5).GetCell(1).SetText(bean.Latitude); table.GetRow(6).GetCell(0).SetText("杆塔类型"); table.GetRow(6).GetCell(1).SetText(bean.TowerType); table.GetRow(7).GetCell(0).SetText("杆塔高度"); table.GetRow(7).GetCell(1).SetText(bean.TowerHeight); table.GetRow(8).GetCell(0).SetText("天线1方向角"); table.GetRow(8).GetCell(1).SetText(bean.AntennaDirection1); table.GetRow(9).GetCell(0).SetText("天线2方向角"); table.GetRow(9).GetCell(1).SetText(bean.AntennaDirection2); table.GetRow(10).GetCell(0).SetText("天线3方向角"); table.GetRow(10).GetCell(1).SetText(bean.AntennaDirection3); table.GetRow(11).GetCell(0).SetText("天线4方向角"); table.GetRow(11).GetCell(1).SetText(bean.AntennaDirection4); CT_TcPr m_Pr = table.GetRow(2).GetCell(1).GetCTTc().AddNewTcPr(); m_Pr.tcW = new CT_TblWidth(); m_Pr.tcW.w = "3500"; m_Pr.tcW.type = ST_TblWidth.dxa; //设置单元格宽度 XWPFTableRow m_Row = table.InsertNewTableRow(0); XWPFTableCell cell = m_Row.CreateCell(); CT_Tc cttc = cell.GetCTTc(); CT_TcPr ctPr = cttc.AddNewTcPr(); ctPr.gridSpan = new CT_DecimalNumber(); ctPr.gridSpan.val = "2"; cttc.GetPList()[0].AddNewR().AddNewT().Value = "SITE: " + bean.MarkerId; System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(photoPathName); System.IO.FileInfo[] files = dir.GetFiles(); foreach (System.IO.FileInfo file in files) { FileStream gfs = new FileStream(photoPathName + "\\" + file.Name, FileMode.Open, FileAccess.Read); Image image = Image.FromFile(photoPathName + "\\" + file.Name); Double ratio = (Double)image.Width / (Double)image.Height; image.Dispose(); XWPFParagraph gp = m_Docx.CreateParagraph(); gp.SetAlignment(ParagraphAlignment.CENTER); XWPFRun gr = gp.CreateRun(); if (ratio > 1) { gr.AddPicture(gfs, (int)PictureType.JPEG, file.Name, 3555556, 2000000); } else { gr.AddPicture(gfs, (int)PictureType.JPEG, file.Name, 2000000, 3555556); } gfs.Close(); } word_insert_space(3, m_Docx, 100); }
private void NPOITestFillData(string file) { #region 读取Word XWPFDocument doc; using (FileStream fileread = File.OpenRead(file)) { doc = new XWPFDocument(fileread); } #endregion List <string>[] data = new List <string> [3]; #region 组织填充数据 List <string> a = new List <string>(); List <string> b = new List <string>(); List <string> c = new List <string>(); a.Add("1.1"); a.Add("1.2"); a.Add("1.3"); a.Add("1.4"); a.Add("1.5"); a.Add("1.6"); a.Add("1.7"); b.Add("2.1"); b.Add("2.2"); b.Add("2.3"); b.Add("2.4"); b.Add("2.5"); b.Add("2.6"); c.Add("3.1"); c.Add("3.2"); c.Add("3.3"); c.Add("3.4"); c.Add("3.5"); c.Add("3.6"); c.Add("3.7"); c.Add("3.8"); c.Add("3.9"); data[0] = a; data[1] = b; data[2] = c; #endregion WordTable wt = new WordTable(data); wt.CaptionLineCount = 2; //标题行数 XWPFTable table = LocationTable(doc, "本年发生的非同一控制下企业合并情况"); if (wt.ObjectData != null) { for (int i = 0; i < wt.ObjectData.Length + wt.CaptionLineCount; i++) { if (i >= wt.CaptionLineCount) { XWPFTableRow row; string[] rowdata = wt.ObjectData[i - wt.CaptionLineCount].ToArray <string>(); if (i < table.Rows.Count) { row = table.GetRow(i); row.GetCTRow().AddNewTrPr().AddNewTrHeight().val = 397; row.GetCTRow().trPr.GetTrHeightArray(0); for (int n = 0; n < rowdata.Length; n++) { XWPFTableCell cell = row.GetCell(n); //模板中的单元格少时,接收数据将会部分丢失 //也可以在下边if后添加else在该行后补充单元格 //按接收数据循环,所以单元格数多于接收数据时不需要另做处理,该行后边的部分单元格无法补填充 if (cell != null) { //SetText是追加内容,所以要先删除单元格内容(删除单元格内所有段落)再写入 for (int p = 0; p < cell.Paragraphs.Count; p++) { cell.RemoveParagraph(p); } for (int t = 0; t < cell.Tables.Count; t++) { //表格删除 //cell.RemoveTable(t); } cell.SetText(rowdata[n]); } } } else { //添加新行 //row = table.InsertNewTableRow(table.Rows.Count - 1); row = new XWPFTableRow(new CT_Row(), table); row.GetCTRow().AddNewTrPr().AddNewTrHeight().val = 100; table.AddRow(row); for (int n = 0; n < rowdata.Length; n++) { XWPFTableCell cell = row.CreateCell(); CT_Tc tc = cell.GetCTTc(); CT_TcPr pr = tc.AddNewTcPr(); tc.GetPList()[0].AddNewR().AddNewT().Value = rowdata[n]; } } } } } #region 保存Word FileStream filewrite = new FileStream(file, FileMode.Create, FileAccess.Write); try { doc.Write(filewrite); } catch (Exception x) { lblStatus.Text = x.Message; } finally { filewrite.Close(); } #endregion }
/// <summary> /// 处理表格 /// </summary> /// <param name="tableCell"></param> /// <param name="list"></param> private void ProcessTableCell(TableCell tableCell, IEnumerable <DynamicEntity> list) { var newList = list.ToList(); list = list.ToList(); //if (tableCell.Paragraph.Runs.Count != 1) return; //Regex reg = new Regex(matchDouble, RegexOptions.Multiline | RegexOptions.Singleline); //MatchCollection matchs = reg.Matches(tableCell.Paragraph.ParagraphText); //if (matchs == null || matchs.Count != 1) return; //string propertyName = Regex.Replace(matchs[0].Value, repDouble, ""); string propertyName = Regex.Replace(tableCell.Paragraph.Text, repDouble, ""); var runs = tableCell.Paragraph.Runs.Where(t => t.Text.Contains(propertyName.Trim())); if (runs == null || runs.Any() == false) { return; } var run = runs.FirstOrDefault(); int index = tableCell.Paragraph.Runs.IndexOf(run); CT_RPr oldStyle = tableCell.Paragraph.Runs[index].GetCTR().rPr; DealSurlusRun(tableCell.Paragraph, run, validDouble); index = tableCell.Paragraph.Runs.IndexOf(run); //int num = 0; //if (index >= 1) //{ // var frontRun = tableCell.Paragraph.Runs[index - 1]; // if (frontRun.Text.Contains(validDouble)) // { // tableCell.Paragraph.RemoveRun(index - 1); // num += 1; // } //} //var afterRun = tableCell.Paragraph.Runs[index + 1 - num]; //if (afterRun.Text.TrimStart().StartsWith("}")) //{ // tableCell.Paragraph.RemoveRun(index + 1 - num); //} int rowIndex = tableCell.RowIndex; var rowPr = tableCell.Table.GetRow(tableCell.RowIndex).GetCTRow().trPr; var cellPr = tableCell.Cell.GetCTTc().tcPr; for (var i = 0; i < list.Count(); i++) { DynamicEntity entity = newList[i]; //if (entity.IsEntityProperty(propertyName.Trim()) == false) continue; object value = entity.GetPropertyValue(propertyName.Trim(), false); if (value == null) { value = string.Empty; } if (i == 0) { tableCell.Paragraph.RemoveRun(index); XWPFRun newRun = tableCell.Paragraph.CreateRun(); if (value != null) { if (value is byte[]) { byte[] bytes = value as byte[]; using (MemoryStream ms = new MemoryStream(bytes, 0, bytes.Length)) { newRun.AddPicture(ms, (int)PictureType.PNG, "test.png", NPOI.Util.Units.ToEMU(100), NPOI.Util.Units.ToEMU(100)); ms.Close(); } } else { newRun.SetText(value.ToString()); } } rowIndex += 1; continue; } XWPFTableRow row = tableCell.Table.GetRow(rowIndex); if (row == null) { row = tableCell.Table.CreateRow(); row.GetCTRow().trPr = rowPr; } XWPFTableCell cell = row.GetCell(tableCell.CellIndex); var cells = row.GetTableCells(); if (cells != null && cells.Count == 1) { string sdasd = string.Empty; XWPFTableRow newRow = tableCell.Table.CreateRow(); newRow.GetCTRow().trPr = rowPr; tableCell.Table.AddRow(newRow, rowIndex); tableCell.Table.RemoveRow(rowIndex + 2); cell = newRow.GetCell(tableCell.CellIndex); newRow.GetCell(0).SetText(rowIndex.ToString()); newRow.GetCell(0).GetCTTc().AddNewTcPr(); newRow.GetCell(0).GetCTTc().tcPr = cellPr; } if (cell == null) { continue; } if (value != null) { //cell.SetText(value.ToString()); if (cell.Paragraphs == null || cell.Paragraphs.Count == 0) { cell.AddParagraph(); } cell.Paragraphs[0].RemoveRun(0); XWPFRun newRun = cell.Paragraphs[0].CreateRun(); if (value is byte[]) { byte[] bytes = value as byte[]; using (MemoryStream ms = new MemoryStream(bytes, 0, bytes.Length)) { newRun.AddPicture(ms, (int)PictureType.PNG, "test.png", NPOI.Util.Units.ToEMU(100), NPOI.Util.Units.ToEMU(100)); ms.Close(); } } else { newRun.SetText(value.ToString()); } newRun.GetCTR().rPr = oldStyle; //XWPFRun newRun = cell.AddParagraph().CreateRun(); //newRun.SetText(value.ToString()); //newRun.GetCTR().rPr = oldStyle; } cell.GetCTTc().AddNewTcPr(); cell.GetCTTc().tcPr = cellPr; rowIndex += 1; } }
protected void Button1_Click(object sender, EventArgs e) { //图片位置 String m_PicPath = @"C:\ttt.jpeg"; FileStream gfs = null; MemoryStream ms = new MemoryStream(); XWPFDocument m_Docx = new XWPFDocument(); //页面设置 //A4:W=11906,h=16838 //CT_SectPr m_SectPr = m_Docx.Document.body.AddNewSectPr(); m_Docx.Document.body.sectPr = new CT_SectPr(); CT_SectPr m_SectPr = m_Docx.Document.body.sectPr; //页面设置A4纵向 m_SectPr.pgSz.h = (ulong)16838; m_SectPr.pgSz.w = (ulong)11906; XWPFParagraph gp = m_Docx.CreateParagraph(); // gp.GetCTPPr().AddNewJc().val = ST_Jc.center; //水平居中 XWPFRun gr = gp.CreateRun(); gr.GetCTR().AddNewRPr().AddNewRFonts().ascii = "黑体"; gr.GetCTR().AddNewRPr().AddNewRFonts().eastAsia = "黑体"; gr.GetCTR().AddNewRPr().AddNewRFonts().hint = ST_Hint.eastAsia; gr.GetCTR().AddNewRPr().AddNewSz().val = (ulong)44; //2号字体 gr.GetCTR().AddNewRPr().AddNewSzCs().val = (ulong)44; gr.GetCTR().AddNewRPr().AddNewB().val = true; //加粗 gr.GetCTR().AddNewRPr().AddNewColor().val = "red"; //字体颜色 gr.SetText("NPOI创建Word2007Docx"); gp = m_Docx.CreateParagraph(); //gp.GetCTPPr().AddNewJc().val = ST_Jc.both; // gp.IndentationFirstLine = Indentation("宋体", 21, 2, FontStyle.Regular);//段首行缩进2字符 gp.IndentationFirstLine = 15; gr = gp.CreateRun(); CT_RPr rpr = gr.GetCTR().AddNewRPr(); CT_Fonts rfonts = rpr.AddNewRFonts(); rfonts.ascii = "宋体"; rfonts.eastAsia = "宋体"; rpr.AddNewSz().val = (ulong)21;//5号字体 rpr.AddNewSzCs().val = (ulong)21; gr.SetText("NPOI,顾名思义,就是POI的.NET版本。那POI又是什么呢?POI是一套用Java写成的库,能够帮助开 发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等 。目前POI的稳定版本中支持Excel文件格式(xls和xlsx),其他的都属于不稳定版本(放在poi的scrachpad目录 中)。"); //创建表 XWPFTable table = m_Docx.CreateTable(1, 4); //创建一行4列表 CT_Tbl m_CTTbl = m_Docx.Document.body.GetTblArray()[0]; //获得文档第一张表 CT_TblPr m_CTTblPr = m_CTTbl.AddNewTblPr(); m_CTTblPr.AddNewTblW().w = "2000"; //表宽 m_CTTblPr.AddNewTblW().type = ST_TblWidth.dxa; m_CTTblPr.tblpPr = new CT_TblPPr(); //表定位 m_CTTblPr.tblpPr.tblpX = "4003"; //表左上角坐标 m_CTTblPr.tblpPr.tblpY = "365"; m_CTTblPr.tblpPr.tblpXSpec = ST_XAlign.center; //若不为“Null”,则优先tblpX,即表由tblpXSpec定位 m_CTTblPr.tblpPr.tblpYSpec = ST_YAlign.center; //若不为“Null”,则优先tblpY,即表由tblpYSpec定位 m_CTTblPr.tblpPr.leftFromText = (ulong)180; m_CTTblPr.tblpPr.rightFromText = (ulong)180; m_CTTblPr.tblpPr.vertAnchor = ST_VAnchor.text; m_CTTblPr.tblpPr.horzAnchor = ST_HAnchor.page; //表1行4列充值:a,b,c,d table.GetRow(0).GetCell(0).SetText("a"); table.GetRow(0).GetCell(1).SetText("b"); table.GetRow(0).GetCell(2).SetText("c"); table.GetRow(0).GetCell(3).SetText("d"); CT_Row m_NewRow = new CT_Row();//创建1行 XWPFTableRow m_Row = new XWPFTableRow(m_NewRow, table); table.AddRow(m_Row); //必须要!!! XWPFTableCell cell = m_Row.CreateCell(); //创建单元格,也创建了一个CT_P CT_Tc cttc = cell.GetCTTc(); CT_TcPr ctPr = cttc.AddNewTcPr(); //ctPr.gridSpan.val = "3";//合并3列 cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center; cttc.GetPList()[0].AddNewR().AddNewT().Value = "666"; cell = m_Row.CreateCell();//创建单元格,也创建了一个CT_P cell.GetCTTc().GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center; cell.GetCTTc().GetPList()[0].AddNewR().AddNewT().Value = "e"; //合并3列,合并2行 //1行 m_NewRow = new CT_Row(); m_Row = new XWPFTableRow(m_NewRow, table); table.AddRow(m_Row); cell = m_Row.CreateCell(); //第1单元格 cell.SetText("f"); cell = m_Row.CreateCell(); //从第2单元格开始合并 cttc = cell.GetCTTc(); ctPr = cttc.AddNewTcPr(); // ctPr.gridSpan.val = "3";//合并3列 ctPr.AddNewVMerge().val = ST_Merge.restart; //开始合并行 ctPr.AddNewVAlign().val = ST_VerticalJc.center; //垂直居中 cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center; cttc.GetPList()[0].AddNewR().AddNewT().Value = "777"; //2行 m_NewRow = new CT_Row(); m_Row = new XWPFTableRow(m_NewRow, table); table.AddRow(m_Row); cell = m_Row.CreateCell(); //第1单元格 cell.SetText("g"); cell = m_Row.CreateCell(); //第2单元格 cttc = cell.GetCTTc(); ctPr = cttc.AddNewTcPr(); // ctPr.gridSpan.val = "3";//合并3列 ctPr.AddNewVMerge().val = ST_Merge.@continue;//继续合并行 //表插入图片 m_NewRow = new CT_Row(); m_Row = new XWPFTableRow(m_NewRow, table); table.AddRow(m_Row); cell = m_Row.CreateCell();//第1单元格 //inline方式插入图片 //gp = table.GetRow(table.Rows.Count - 1).GetCell(0).GetParagraph(table.GetRow(table.Rows.Count - 1).GetCell(0).GetCTTc().GetPList()[0]);//获得指定表单元格的段 gp = cell.GetParagraph(cell.GetCTTc().GetPList()[0]); gr = gp.CreateRun(); //创建run gfs = new FileStream(m_PicPath, FileMode.Open, FileAccess.Read); //读取图片文件 gr.AddPicture(gfs, (int)PictureType.PNG, "1.jpg", 500000, 500000); //插入图片 gfs.Close(); //Anchor方式插入图片 CT_Anchor an = new CT_Anchor(); an.distB = (uint)(0); an.distL = 114300u; an.distR = 114300U; an.distT = 0U; an.relativeHeight = 251658240u; an.behindDoc = false; //"0" an.locked = false; //"0" an.layoutInCell = true; //"1" an.allowOverlap = true; //"1" NPOI.OpenXmlFormats.Dml.CT_Point2D simplePos = new NPOI.OpenXmlFormats.Dml.CT_Point2D(); simplePos.x = (long)0; simplePos.y = (long)0; CT_EffectExtent effectExtent = new CT_EffectExtent(); effectExtent.b = 0L; effectExtent.l = 0L; effectExtent.r = 0L; effectExtent.t = 0L; //wrapSquare(四周) cell = m_Row.CreateCell(); //第2单元格 gp = cell.GetParagraph(cell.GetCTTc().GetPList()[0]); gr = gp.CreateRun(); //创建run CT_WrapSquare wrapSquare = new CT_WrapSquare(); wrapSquare.wrapText = ST_WrapText.bothSides; gfs = new FileStream(m_PicPath, FileMode.Open, FileAccess.Read);//读取图片文件 // gr.AddPicture(gfs, (int)PictureType.PNG, "1.png", 500000, 500000, 0, 0, wrapSquare, an, simplePos, ST_RelFromH.column, ST_RelFromV.paragraph, effectExtent); gr.AddPicture(gfs, (int)PictureType.PNG, "虚拟机", 500000, 500000); gfs.Close(); //wrapTight(紧密) cell = m_Row.CreateCell(); //第3单元格 gp = cell.GetParagraph(cell.GetCTTc().GetPList()[0]); gr = gp.CreateRun(); //创建run CT_WrapTight wrapTight = new CT_WrapTight(); wrapTight.wrapText = ST_WrapText.bothSides; wrapTight.wrapPolygon = new CT_WrapPath(); wrapTight.wrapPolygon.edited = false; wrapTight.wrapPolygon.start = new CT_Point2D(); wrapTight.wrapPolygon.start.x = 0; wrapTight.wrapPolygon.start.y = 0; CT_Point2D lineTo = new CT_Point2D(); wrapTight.wrapPolygon.lineTo = new List <CT_Point2D>(); lineTo = new CT_Point2D(); lineTo.x = 0; lineTo.y = 1343; wrapTight.wrapPolygon.lineTo.Add(lineTo); lineTo = new CT_Point2D(); lineTo.x = 21405; lineTo.y = 1343; wrapTight.wrapPolygon.lineTo.Add(lineTo); lineTo = new CT_Point2D(); lineTo.x = 21405; lineTo.y = 0; wrapTight.wrapPolygon.lineTo.Add(lineTo); lineTo.x = 0; lineTo.y = 0; wrapTight.wrapPolygon.lineTo.Add(lineTo); gfs = new FileStream(m_PicPath, FileMode.Open, FileAccess.Read);//读取图片文件 //gr.AddPicture(gfs, (int)PictureType.PNG, "1.png", 500000, 500000, 0, 0, wrapTight, an, simplePos, ST_RelFromH.column, ST_RelFromV.paragraph, effectExtent); gr.AddPicture(gfs, (int)PictureType.PNG, "虚拟机", 500000, 500000); gfs.Close(); //wrapThrough(穿越) cell = m_Row.CreateCell(); //第4单元格 gp = cell.GetParagraph(cell.GetCTTc().GetPList()[0]); gr = gp.CreateRun(); //创建run gfs = new FileStream(m_PicPath, FileMode.Open, FileAccess.Read); //读取图片文件 CT_WrapThrough wrapThrough = new CT_WrapThrough(); wrapThrough.wrapText = ST_WrapText.bothSides; wrapThrough.wrapPolygon = new CT_WrapPath(); wrapThrough.wrapPolygon.edited = false; wrapThrough.wrapPolygon.start = new CT_Point2D(); wrapThrough.wrapPolygon.start.x = 0; wrapThrough.wrapPolygon.start.y = 0; lineTo = new CT_Point2D(); wrapThrough.wrapPolygon.lineTo = new List <CT_Point2D>(); lineTo = new CT_Point2D(); lineTo.x = 0; lineTo.y = 1343; wrapThrough.wrapPolygon.lineTo.Add(lineTo); lineTo = new CT_Point2D(); lineTo.x = 21405; lineTo.y = 1343; wrapThrough.wrapPolygon.lineTo.Add(lineTo); lineTo = new CT_Point2D(); lineTo.x = 21405; lineTo.y = 0; wrapThrough.wrapPolygon.lineTo.Add(lineTo); lineTo.x = 0; lineTo.y = 0; wrapThrough.wrapPolygon.lineTo.Add(lineTo); // gr.AddPicture(gfs, (int)PictureType.PNG, "15.png", 500000, 500000, 0, 0, wrapThrough, an, simplePos, ST_RelFromH.column, ST_RelFromV.paragraph, effectExtent); gr.AddPicture(gfs, (int)PictureType.PNG, "虚拟机", 500000, 500000); gfs.Close(); gp = m_Docx.CreateParagraph(); //gp.GetCTPPr().AddNewJc().val = ST_Jc.both; // gp.IndentationFirstLine = Indentation("宋体", 21, 2, FontStyle.Regular);//段首行缩进2字符 gp.IndentationFirstLine = 15; gr = gp.CreateRun(); gr.SetText("NPOI是POI项目的.NET版本。POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。使用NPOI你就可以在没有安装Office或者相应环境的机器上对WORD/EXCEL文档进行读写。NPOI是构建在POI3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作。"); gp = m_Docx.CreateParagraph(); // gp.GetCTPPr().AddNewJc().val = ST_Jc.both; //gp.IndentationFirstLine = Indentation("宋体", 21, 2, FontStyle.Regular);//段首行缩进2字符 gp.IndentationFirstLine = 15; gr = gp.CreateRun(); gr.SetText("NPOI之所以强大,并不是因为它支持导出Excel,而是因为它支持导入Excel,并能“理解”OLE2文档结构,这也是其他一些Excel读写库比较弱的方面。通常,读入并理解结构远比导出来得复杂,因为导入你必须假设一切情况都是可能的,而生成你只要保证满足你自己需求就可以了,如果把导入需求和生成需求比做两个集合,那么生成需求通常都是导入需求的子集。"); //在本段中插图-wrapSquare //gr = gp.CreateRun();//创建run wrapSquare = new CT_WrapSquare(); wrapSquare.wrapText = ST_WrapText.bothSides; gfs = new FileStream(m_PicPath, FileMode.Open, FileAccess.Read);//读取图片文件 // gr.AddPicture(gfs, (int)PictureType.PNG, "15.png", 500000, 500000, 900000, 200000, wrapSquare, an, simplePos, ST_RelFromH.column, ST_RelFromV.paragraph, effectExtent); gr.AddPicture(gfs, (int)PictureType.PNG, "虚拟机", 500000, 500000); gfs.Close(); m_Docx.Write(ms); ms.Flush(); SaveToFile(ms, Path.GetPathRoot(Directory.GetCurrentDirectory()) + "\\NPOI.docx"); }
/// <summary> /// 将行拷贝到目标表格 /// 只拷贝了基本的样式 /// </summary> /// <param name="targetTable">目标表格</param> /// <param name="sourceRow">源表格行</param> /// <param name="rowIndex">行索引</param> /// <param name="maxCol">表格最大列数</param> public static void CopyRowToTable(XWPFTable targetTable, XWPFTableRow sourceRow, int rowIndex, int maxCol) { //在表格指定位置新增一行 XWPFTableRow targetRow = rowIndex == 0 ? targetTable.GetRow(0) : targetTable.CreateRow(); //复制行属性 targetRow.GetCTRow().trPr = sourceRow.GetCTRow().trPr; List <XWPFTableCell> cellList = sourceRow.GetTableCells(); if (null == cellList) { return; } //复制列及其属性和内容 int colIndex = 0; foreach (XWPFTableCell sourceCell in cellList) { XWPFTableCell targetCell = null; //新增行会默认有一个单元格,因此直接获取就好 try { targetCell = targetRow.GetCell(colIndex); } catch (Exception) { } if (targetCell == null) { targetCell = targetRow.CreateCell(); } //列属性 targetCell.GetCTTc().tcPr = sourceCell.GetCTTc().tcPr; //段落属性 if (sourceCell.Paragraphs != null && sourceCell.Paragraphs.Count > 0) { var paragraph = targetCell.Paragraphs[0]; var ctp = (CT_P)typeof(XWPFParagraph).GetField("paragraph", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(paragraph); var sourceParagraph = sourceCell.Paragraphs[0]; var sourceCtp = (CT_P)typeof(XWPFParagraph).GetField("paragraph", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(sourceParagraph); paragraph.Alignment = sourceParagraph.Alignment; ctp.pPr = sourceCtp.pPr; if (sourceCell.Paragraphs[0].Runs != null && sourceCell.Paragraphs[0].Runs.Count > 0) { XWPFRun cellR = targetCell.Paragraphs[0].CreateRun(); var srcRun = sourceCell.Paragraphs[0].Runs[0]; cellR.SetText(sourceCell.GetText()); cellR.IsBold = srcRun.IsBold; cellR.SetColor(srcRun.GetColor()); cellR.FontFamily = srcRun.FontFamily; cellR.IsCapitalized = srcRun.IsCapitalized; cellR.IsDoubleStrikeThrough = srcRun.IsDoubleStrikeThrough; cellR.IsEmbossed = srcRun.IsEmbossed; cellR.IsImprinted = srcRun.IsImprinted; cellR.IsItalic = srcRun.IsItalic; cellR.IsShadowed = srcRun.IsShadowed; } else { targetCell.SetText(sourceCell.GetText()); } } else { targetCell.SetText(sourceCell.GetText()); } colIndex++; } if (cellList.Count < maxCol) { try { targetRow.MergeCells(cellList.Count - 1, maxCol - 1); } catch { } } }
/// <summary> /// 复制一行到指定位置 /// 样式信息也复制了,但需要完善。 /// </summary> /// <param name="sourceRow"></param> /// <param name="table"></param> /// <param name="rowIndex"></param> /// <returns></returns> public static XWPFTableRow CopyRow(XWPFTableRow sourceRow, XWPFTable table, int rowIndex) { //在表格指定位置新增一行 var needRemove = false; if (table.NumberOfRows <= rowIndex) { table.CreateRow(); needRemove = true; } XWPFTableRow targetRow = table.InsertNewTableRow(rowIndex); if (needRemove) { table.RemoveRow(rowIndex + 1); } //复制行属性 targetRow.GetCTRow().trPr = sourceRow.GetCTRow().trPr; List <XWPFTableCell> sourceCells = sourceRow.GetTableCells(); if (null == sourceCells) { return(targetRow); } //复制列及其属性和内容 foreach (var sourceCell in sourceCells) { XWPFTableCell targetCell = targetRow.AddNewTableCell(); targetCell.RemoveParagraph(0);//新建cell会自动创建paragraph,将其删除,下面代码循环添加 //列属性 targetCell.GetCTTc().tcPr = sourceCell.GetCTTc().tcPr; //段落属性 if (sourceCell.Paragraphs != null && sourceCell.Paragraphs.Count > 0) { foreach (var sourcePa in sourceCell.Paragraphs) { if (sourcePa.Runs != null && sourcePa.Runs.Count > 0) { var targetPa = targetCell.AddParagraph(); targetPa.Alignment = sourcePa.Alignment; foreach (var srcR in sourcePa.Runs) { XWPFRun tarR = targetPa.CreateRun(); tarR.SetText(srcR.Text); tarR.SetTextPosition(srcR.GetTextPosition()); tarR.FontFamily = srcR.FontFamily; tarR.FontSize = srcR.FontSize <= 0 ? 12 : srcR.FontSize; tarR.IsBold = srcR.IsBold; tarR.IsItalic = srcR.IsItalic; tarR.IsCapitalized = srcR.IsCapitalized; tarR.SetColor(srcR.GetColor()); tarR.SetUnderline(srcR.Underline); tarR.CharacterSpacing = srcR.CharacterSpacing; } } else { targetCell.SetText(sourceCell.GetText()); } } } else { targetCell.SetText(sourceCell.GetText()); } } return(targetRow); }