Пример #1
0
        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);
            }
        }
Пример #2
0
 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;
         }
     }
 }
Пример #3
0
        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);
                }
            }
        }
Пример #4
0
        /// <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;   //垂直
            }
        }
Пример #5
0
        /// <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;
         }
     }
 }
Пример #8
0
        /// <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;
        }
Пример #9
0
 /// <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();
 }
Пример #10
0
        /// <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);
        }
Пример #11
0
        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();
        }
Пример #12
0
        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);
        }
Пример #13
0
        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);
            }
        }
Пример #14
0
        /// <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
        }
Пример #15
0
        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);
        }
Пример #16
0
        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
        }
Пример #17
0
        /// <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;
            }
        }
Пример #18
0
        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");
        }
Пример #19
0
        /// <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
                {
                }
            }
        }
Пример #20
0
        /// <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);
        }