精华内容
参与话题
问答
  • WORD合并单元格

    2015-12-06 19:41:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
    import java.io.FileOutputStream;
    import java.math.BigInteger;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.poi.xwpf.usermodel.BreakType;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    import org.apache.poi.xwpf.usermodel.XWPFParagraph;
    import org.apache.poi.xwpf.usermodel.XWPFTable;
    import org.apache.poi.xwpf.usermodel.XWPFTableCell;
    import org.apache.poi.xwpf.usermodel.XWPFTableRow;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBorder;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblBorders;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
    
    public class POI_表格边框相关_S2_Test {
    	public static void main(String[] args) throws Exception {
    		POI_表格边框相关_S2_Test t=new POI_表格边框相关_S2_Test();
    		XWPFDocument document = new XWPFDocument();
    		t.createSimpleTableWithBdColor(document);
    		t.addNewPage(document, BreakType.TEXT_WRAPPING);
    		t.createSimpleTableNormal(document);
    		t.addNewPage(document, BreakType.TEXT_WRAPPING);
    		t.createSimpleTableWithNotBd(document);
    		t.saveDocument(document, "f:/saveFile/temp/sys_"+ System.currentTimeMillis() + ".docx");
    	}
    	
    	//表格自定义边框 请忽略这么丑的颜色样式,主要说明可以自定义样式
    	public  void createSimpleTableWithBdColor(XWPFDocument doc) throws Exception {
    		List<String> columnList = new ArrayList<String>();
    		columnList.add("序号");
    		columnList.add("姓名信息|姓甚|名谁");
    		columnList.add("名刺信息|籍贯|营生");
    		XWPFTable table = doc.createTable(2,5);
    		
    		CTTblBorders borders=table.getCTTbl().getTblPr().addNewTblBorders();
    		CTBorder hBorder=borders.addNewInsideH();
    		hBorder.setVal(STBorder.Enum.forString("dashed"));
    		hBorder.setSz(new BigInteger("1"));
    		hBorder.setColor("0000FF");
    		
    		CTBorder vBorder=borders.addNewInsideV();
    		vBorder.setVal(STBorder.Enum.forString("dotted"));
    		vBorder.setSz(new BigInteger("1"));
    		vBorder.setColor("00FF00");
    		
    		CTBorder lBorder=borders.addNewLeft();
    		lBorder.setVal(STBorder.Enum.forString("double"));
    		lBorder.setSz(new BigInteger("1"));
    		lBorder.setColor("3399FF");
    		
    		CTBorder rBorder=borders.addNewRight();
    		rBorder.setVal(STBorder.Enum.forString("single"));
    		rBorder.setSz(new BigInteger("1"));
    		rBorder.setColor("F2B11F");
    		
    		CTBorder tBorder=borders.addNewTop();
    		tBorder.setVal(STBorder.Enum.forString("thick"));
    		tBorder.setSz(new BigInteger("1"));
    		tBorder.setColor("C3599D");
    		
    		CTBorder bBorder=borders.addNewBottom();
    		bBorder.setVal(STBorder.Enum.forString("wave"));
    		bBorder.setSz(new BigInteger("1"));
    		bBorder.setColor("BF6BCC");
    		
    		CTTbl ttbl = table.getCTTbl();
    		CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr();
    		CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW();
    		CTJc cTJc=tblPr.addNewJc();
    		cTJc.setVal(STJc.Enum.forString("center"));
    		tblWidth.setW(new BigInteger("8000"));
    		tblWidth.setType(STTblWidth.DXA);
    		
    		XWPFTableRow firstRow=null;
    		XWPFTableRow secondRow=null;
    		XWPFTableCell firstCell=null;
    		XWPFTableCell secondCell=null;
    		
    		for(int i=0;i<2;i++){
    			firstRow=table.getRow(i);
    			firstRow.setHeight(380);
    			for(int j=0;j<5;j++){
    				firstCell=firstRow.getCell(j);
    				setCellText(firstCell, "测试", "FFFFC9", 1600);
    			}
    		}
    		
    		firstRow=table.insertNewTableRow(0);
    	    secondRow=table.insertNewTableRow(1);
    		firstRow.setHeight(380);
    		secondRow.setHeight(380);
    		for(String str:columnList){
    			if(str.indexOf("|") == -1){
    				firstCell=firstRow.addNewTableCell();
    				secondCell=secondRow.addNewTableCell();
    				createVSpanCell(firstCell, str,"CCCCCC",1600,STMerge.RESTART);
    				createVSpanCell(secondCell, "", "CCCCCC", 1600,null);
    			}else{
    				String[] strArr=str.split("\\|");
    				firstCell=firstRow.addNewTableCell();
    				createHSpanCell(firstCell, strArr[0],"CCCCCC",1600,STMerge.RESTART);
    				for(int i=1;i<strArr.length-1;i++){
    					firstCell=firstRow.addNewTableCell();
    					createHSpanCell(firstCell, "","CCCCCC",1600,null);
    				}
    				for(int i=1;i<strArr.length;i++){
    					secondCell=secondRow.addNewTableCell();
    					setCellText(secondCell, strArr[i], "CCCCCC", 1600);
    				}
    			}
    		}
    	}
    	
    	//表格正常边框
    	public  void createSimpleTableNormal(XWPFDocument doc) throws Exception {
    		List<String> columnList = new ArrayList<String>();
    		columnList.add("序号");
    		columnList.add("姓名信息|姓甚|名谁");
    		columnList.add("名刺信息|籍贯|营生");
    		XWPFTable table = doc.createTable(2,5);
    		
    		CTTbl ttbl = table.getCTTbl();
    		CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr();
    		CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW();
    		CTJc cTJc=tblPr.addNewJc();
    		cTJc.setVal(STJc.Enum.forString("center"));
    		tblWidth.setW(new BigInteger("8000"));
    		tblWidth.setType(STTblWidth.DXA);
    		
    		XWPFTableRow firstRow=null;
    		XWPFTableRow secondRow=null;
    		XWPFTableCell firstCell=null;
    		XWPFTableCell secondCell=null;
    		
    		for(int i=0;i<2;i++){
    			firstRow=table.getRow(i);
    			firstRow.setHeight(380);
    			for(int j=0;j<5;j++){
    				firstCell=firstRow.getCell(j);
    				setCellText(firstCell, "测试", "FFFFC9", 1600);
    			}
    		}
    		
    		firstRow=table.insertNewTableRow(0);
    	    secondRow=table.insertNewTableRow(1);
    		firstRow.setHeight(380);
    		secondRow.setHeight(380);
    		for(String str:columnList){
    			if(str.indexOf("|") == -1){
    				firstCell=firstRow.addNewTableCell();
    				secondCell=secondRow.addNewTableCell();
    				createVSpanCell(firstCell, str,"CCCCCC",1600,STMerge.RESTART);
    				createVSpanCell(secondCell, "", "CCCCCC", 1600,null);
    			}else{
    				String[] strArr=str.split("\\|");
    				firstCell=firstRow.addNewTableCell();
    				createHSpanCell(firstCell, strArr[0],"CCCCCC",1600,STMerge.RESTART);
    				for(int i=1;i<strArr.length-1;i++){
    					firstCell=firstRow.addNewTableCell();
    					createHSpanCell(firstCell, "","CCCCCC",1600,null);
    				}
    				for(int i=1;i<strArr.length;i++){
    					secondCell=secondRow.addNewTableCell();
    					setCellText(secondCell, strArr[i], "CCCCCC", 1600);
    				}
    			}
    		}
    	}
    	
    	//表格无边框
    	public  void createSimpleTableWithNotBd(XWPFDocument doc) throws Exception {
    		List<String> columnList = new ArrayList<String>();
    		columnList.add("序号");
    		columnList.add("姓名信息|姓甚|名谁");
    		columnList.add("名刺信息|籍贯|营生");
    		XWPFTable table = doc.createTable(2,5);
    		
    		CTTblBorders borders=table.getCTTbl().getTblPr().addNewTblBorders();
    		CTBorder hBorder=borders.addNewInsideH();
    		hBorder.setVal(STBorder.Enum.forString("none"));
    		hBorder.setSz(new BigInteger("1"));
    		hBorder.setColor("0000FF");
    		
    		CTBorder vBorder=borders.addNewInsideV();
    		vBorder.setVal(STBorder.Enum.forString("none"));
    		vBorder.setSz(new BigInteger("1"));
    		vBorder.setColor("00FF00");
    		
    		CTBorder lBorder=borders.addNewLeft();
    		lBorder.setVal(STBorder.Enum.forString("none"));
    		lBorder.setSz(new BigInteger("1"));
    		lBorder.setColor("3399FF");
    		
    		CTBorder rBorder=borders.addNewRight();
    		rBorder.setVal(STBorder.Enum.forString("none"));
    		rBorder.setSz(new BigInteger("1"));
    		rBorder.setColor("F2B11F");
    		
    		CTBorder tBorder=borders.addNewTop();
    		tBorder.setVal(STBorder.Enum.forString("none"));
    		tBorder.setSz(new BigInteger("1"));
    		tBorder.setColor("C3599D");
    		
    		CTBorder bBorder=borders.addNewBottom();
    		bBorder.setVal(STBorder.Enum.forString("none"));
    		bBorder.setSz(new BigInteger("1"));
    		bBorder.setColor("F7E415");
    		
    		CTTbl ttbl = table.getCTTbl();
    		CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr();
    		CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW();
    		CTJc cTJc=tblPr.addNewJc();
    		cTJc.setVal(STJc.Enum.forString("center"));
    		tblWidth.setW(new BigInteger("8000"));
    		tblWidth.setType(STTblWidth.DXA);
    		
    		XWPFTableRow firstRow=null;
    		XWPFTableRow secondRow=null;
    		XWPFTableCell firstCell=null;
    		XWPFTableCell secondCell=null;
    		
    		for(int i=0;i<2;i++){
    			firstRow=table.getRow(i);
    			firstRow.setHeight(380);
    			for(int j=0;j<5;j++){
    				firstCell=firstRow.getCell(j);
    				setCellText(firstCell, "测试", "FFFFC9", 1600);
    			}
    		}
    		
    		firstRow=table.insertNewTableRow(0);
    	    secondRow=table.insertNewTableRow(1);
    		firstRow.setHeight(380);
    		secondRow.setHeight(380);
    		for(String str:columnList){
    			if(str.indexOf("|") == -1){
    				firstCell=firstRow.addNewTableCell();
    				secondCell=secondRow.addNewTableCell();
    				createVSpanCell(firstCell, str,"CCCCCC",1600,STMerge.RESTART);
    				createVSpanCell(secondCell, "", "CCCCCC", 1600,null);
    			}else{
    				String[] strArr=str.split("\\|");
    				firstCell=firstRow.addNewTableCell();
    				createHSpanCell(firstCell, strArr[0],"CCCCCC",1600,STMerge.RESTART);
    				for(int i=1;i<strArr.length-1;i++){
    					firstCell=firstRow.addNewTableCell();
    					createHSpanCell(firstCell, "","CCCCCC",1600,null);
    				}
    				for(int i=1;i<strArr.length;i++){
    					secondCell=secondRow.addNewTableCell();
    					setCellText(secondCell, strArr[i], "CCCCCC", 1600);
    				}
    			}
    		}
    	}
    	
    	public  void setCellText(XWPFTableCell cell,String text, String bgcolor, int width) {
    		CTTc cttc = cell.getCTTc();
    		CTTcPr cellPr = cttc.addNewTcPr();
    		cellPr.addNewTcW().setW(BigInteger.valueOf(width));
    		//cell.setColor(bgcolor);
    		CTTcPr ctPr = cttc.addNewTcPr();
    		CTShd ctshd = ctPr.addNewShd();
    		ctshd.setFill(bgcolor);
    		ctPr.addNewVAlign().setVal(STVerticalJc.CENTER);
    		cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER);
    		cell.setText(text);
    	}
    	public void createHSpanCell(XWPFTableCell cell,String value, String bgcolor, int width,STMerge.Enum stMerge){
    		CTTc cttc = cell.getCTTc();
    		CTTcPr cellPr = cttc.addNewTcPr();
    		cellPr.addNewTcW().setW(BigInteger.valueOf(width));
    		cell.setColor(bgcolor);
    		cellPr.addNewHMerge().setVal(stMerge);
    		cellPr.addNewVAlign().setVal(STVerticalJc.CENTER);
    		cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER);
    		cttc.getPList().get(0).addNewR().addNewT().setStringValue(value);
    	}
    	
    	public void createVSpanCell(XWPFTableCell cell,String value, String bgcolor, int width,STMerge.Enum stMerge){
    		CTTc cttc = cell.getCTTc();
    		CTTcPr cellPr = cttc.addNewTcPr();
    		cellPr.addNewTcW().setW(BigInteger.valueOf(width));
    		cell.setColor(bgcolor);
    		cellPr.addNewVMerge().setVal(stMerge);
    		cellPr.addNewVAlign().setVal(STVerticalJc.CENTER);
    		cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER);
    		cttc.getPList().get(0).addNewR().addNewT().setStringValue(value);
    	}
    	
    	public void addNewPage(XWPFDocument document,BreakType breakType){
    		XWPFParagraph xp = document.createParagraph();
    		xp.createRun().addBreak(breakType);
    	}
    	
    	public void saveDocument(XWPFDocument document,String savePath) throws Exception{
    		FileOutputStream fos = new FileOutputStream(savePath);
    		document.write(fos);
    		fos.close();
    	}
    import java.io.FileOutputStream;
    import java.math.BigInteger;
    
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    import org.apache.poi.xwpf.usermodel.XWPFTable;
    import org.apache.poi.xwpf.usermodel.XWPFTableCell;
    import org.apache.poi.xwpf.usermodel.XWPFTableRow;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
    
    public class POI_表格合并_S3_Test {
    	public static void main(String[] args) throws Exception {
    		POI_表格合并_S3_Test t=new POI_表格合并_S3_Test();
    		XWPFDocument document = new XWPFDocument();
    		t.megerTableCell(document);
    		t.saveDocument(document, "f:/saveFile/temp/sys_"+ System.currentTimeMillis() + ".docx");
    	}
    
    	public void megerTableCell(XWPFDocument document) {
    		XWPFTable table1 = document.createTable(6, 8); 
    		setTableWidth(table1, "8000");
            fillTable(table1);
            mergeCellsVertically(table1, 1, 1,4);
            mergeCellsVertically(table1, 4, 2, 4);
            mergeCellsHorizontal(table1,0,3,5);
            mergeCellsHorizontal(table1,2,2,3);
            mergeCellsHorizontal(table1,2,6,7);
    	}
    
    	public  void fillTable(XWPFTable table) {
            for (int rowIndex = 0; rowIndex < table.getNumberOfRows(); rowIndex++) {
                XWPFTableRow row = table.getRow(rowIndex);
                row.setHeight(380);
                for (int colIndex = 0; colIndex < row.getTableCells().size(); colIndex++) {
                    XWPFTableCell cell = row.getCell(colIndex);
                    if(rowIndex%2==0){
                    	 setCellText(cell, " cell " + rowIndex + colIndex + " ", "D4DBED", 1000);
                    }else{
                    	 setCellText(cell, " cell " + rowIndex + colIndex + " ", "AEDE72", 1000);
                    }
                }
            }
        }
    	
    	public  void setCellText(XWPFTableCell cell,String text, String bgcolor, int width) {
    		CTTc cttc = cell.getCTTc();
    		CTTcPr cellPr = cttc.addNewTcPr();
    		cellPr.addNewTcW().setW(BigInteger.valueOf(width));
    		//cell.setColor(bgcolor);
    		CTTcPr ctPr = cttc.addNewTcPr();
    		CTShd ctshd = ctPr.addNewShd();
    		ctshd.setFill(bgcolor);
    		ctPr.addNewVAlign().setVal(STVerticalJc.CENTER);
    		cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER);
    		cell.setText(text);
    	}
    	
    
    	/**
    	 * @Description: 跨列合并
    	 */
    	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().setVal(STMerge.RESTART);
                } else {
                    // Cells which join (merge) the first one, are set with CONTINUE
                    cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
                }
            }
        }
    	
    	/**
    	 * @Description: 跨行合并
    	 * @see http://stackoverflow.com/questions/24907541/row-span-with-xwpftable
    	 */
        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().setVal(STMerge.RESTART);
                } else {
                    // Cells which join (merge) the first one, are set with CONTINUE
                    cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
                }
            }
        }
        
    	public void setTableWidth(XWPFTable table,String width){
    		CTTbl ttbl = table.getCTTbl();
    		CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr();
    		CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW();
    		CTJc cTJc=tblPr.addNewJc();
    		cTJc.setVal(STJc.Enum.forString("center"));
    		tblWidth.setW(new BigInteger(width));
    		tblWidth.setType(STTblWidth.DXA);
    	}
    	
    	public void saveDocument(XWPFDocument document, String savePath)
    			throws Exception {
    		FileOutputStream fos = new FileOutputStream(savePath);
    		document.write(fos);
    		fos.close();
    	}
    }



    }



    转载于:https://my.oschina.net/bughope/blog/539922

    展开全文
  • 20190407 Word合并单元格

    2019-04-07 01:32:00
    很长一段时间没处理word合并单元格,又忘记了采取忽略错误的方式测试出相应单元格的行列坐标这种方式。真是浪费时间。以后再也不想为此在深夜熬命。 今晚算是和它杠上了,很想弄清楚合并单元格之后行列坐标重新分配...

    很长一段时间没处理word合并单元格,又忘记了采取忽略错误的方式测试出相应单元格的行列坐标这种方式。真是浪费时间。以后再也不想为此在深夜熬命。

    今晚算是和它杠上了,很想弄清楚合并单元格之后行列坐标重新分配的机制。于是做了一点测试。插入一个11行10列的表格,然后合并其中的部分,利用代码插入新的坐标。

    转载请说明出处。

    Sub NewPos()
        Dim tb As Table, cel As Cell
        Dim doc As Document
        Set doc = ThisDocument
        Set tb = doc.Tables(1)
               For i = 1 To 10
                     For j = 1 To 10
                        On Error Resume Next
                        Set cel = tb.Cell(i, j)
                        On Error GoTo 0
                        If Not cel Is Nothing Then
                           Debug.Print Len(cel.Range.Text); "   "; i; "   "; j
                           If Len(cel.Range.Text) > 2 Then
                                    cel.Range.Text = Replace(cel.Range.Text, vbCr, "") & ";" & "(" & i & "," & j & ")"
                            Else
                             cel.Range.Text = "(" & i & "," & j & ")"
                            End If
                        
                        End If
                        Set cel = Nothing
                    Next j
               Next i
        Set doc = Nothing
        Set cel = Nothing
        Set tb = Nothing
    End Sub
    

      

     

    新坐标分配总结如下:

    0、先行后列

    1、行坐标的分配:从上向下逐一递增,如果遇到连续几个整行水平合并,则视为一行。如(9,1)实为原始的第9和第10行合并。

    2、列坐标的分配:从左向右逐一递增分配,如果遇到垂直合并单元格则需要分为两种情况:

    第一种情况,该行正好是垂直合并单元格所在的首行,则列号依然遵循从左至右逐一递增分配,如(2,3)到(2,4),(5,5)到(5,6)

    第二种情况较为复杂,如果该行并非垂直合并单元格所在的首行,则列号会出现缺失。

    (1)在一行中间出现这种情况:(3,3)到(3,5)缺失了(3,4);

    (2)在一行的行末遇到这种情况:(7,4)成为第7行最后一个列坐标;

    (3)如在一行的行首遇到这种情况:第二行缺失了(2,1)(2,2)第三行缺失了(3,1)

     

    通过正则表达式则提取到以下结果

     

    Public Sub RegGet()
        Dim Regex As Object
        Dim Mh As Object
        Set Regex = CreateObject("VBScript.RegExp")
        With Regex
            .Global = True
            .MultiLine = True
            .Pattern = "(\(\d+\,\d\))\s\x07"
        End With
           txt = ThisDocument.Content.Text
           Set Mh = Regex.Execute(txt)
           n = 0
           For Each m In Mh
           n = n + 1
            Debug.Print n; " > "; m.submatches(0)
           Next
        Set Regex = Nothing
    End Sub
    
     1  > (1,1)
     2  > (1,2)
     3  > (1,3)
     4  > (1,4)
     5  > (1,5)
     6  > (2,3)
     7  > (2,4)
     8  > (2,5)
     9  > (2,6)
     10  > (2,7)
     11  > (2,8)
     12  > (3,2)
     13  > (3,3)
     14  > (3,5)
     15  > (3,7)
     16  > (3,8)
     17  > (4,3)
     18  > (4,5)
     19  > (4,7)
     20  > (5,1)
     21  > (5,3)
     22  > (5,5)
     23  > (5,6)
     24  > (5,7)
     25  > (5,8)
     26  > (6,1)
     27  > (6,3)
     28  > (6,6)
     29  > (7,1)
     30  > (7,2)
     31  > (7,3)
     32  > (7,4)
     33  > (8,1)
     34  > (8,2)
     35  > (8,3)
     36  > (8,4)
     37  > (8,5)
     38  > (8,6)
     39  > (8,8)
     40  > (8,9)
     41  > (9,1)
     42  > (10,1)
    

      因此也可以采用正则的办法提取单元格的内容

    Public Sub RegGet()
        Dim Regex As Object
        Dim Mh As Object
        Set Regex = CreateObject("VBScript.RegExp")
        With Regex
            .Global = True
            .MultiLine = False '设为单行模式,^元义符代表全文的开始,{n}通过重复括号内的子表达式n次的方式提取第n个单元格的内容
            .Pattern = "^(.*?\s\x07){2}"
        End With
           txt = ThisDocument.Content.Text
           Set Mh = Regex.Execute(txt)
           n = 0
           For Each m In Mh
           n = n + 1
            Debug.Print n; " >>>>>>>>>>> "; m.Value
            Debug.Print "提取内容:"; m.submatches(0)
           Next
        Set Regex = Nothing
    End Sub
    

      

    所有的问题产生的根源都是对WORD 对象模型不熟悉
    原来可以如此循环所有单元格
    
    Sub RangeCells()
      For Each cel In ThisDocument.Tables(1).Range.Cells
        Debug.Print cel.Range.Text
      Next cel
    End Sub
    

      

    转载于:https://www.cnblogs.com/nextseven/p/10663902.html

    展开全文
  • POI操作word合并单元格

    万次阅读 2016-12-01 14:44:10
    对于合并单元格的介绍不怎么多,下面是之前做word导出的时候研究的,在stackoverflow查到了点资料。 记录下两个关键方法: // word跨列合并单元格 public void mergeCellsHorizontal(XWPFTable table, int row, int...

    对于合并单元格的介绍不怎么多,下面是之前做word导出的时候研究的,在stackoverflow查到了点资料。

    记录下两个关键方法:

    // word跨列合并单元格
    	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().setVal(STMerge.RESTART);  
                } else {  
                    // Cells which join (merge) the first one, are set with CONTINUE  
                    cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.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().setVal(STMerge.RESTART);  
                } else {  
                    // Cells which join (merge) the first one, are set with CONTINUE  
                    cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);  
                }  
            }  
        } 

    另外加上单元格字体设置的方法:

    private void getParagraph(XWPFTableCell cell,String cellText){
    		CTP ctp = CTP.Factory.newInstance();
    		XWPFParagraph p = new XWPFParagraph(ctp, cell);
    		p.setAlignment(ParagraphAlignment.CENTER);
            XWPFRun run = p.createRun();
            run.setText(cellText);
            CTRPr rpr = run.getCTR().isSetRPr() ? run.getCTR().getRPr() : run.getCTR().addNewRPr();
            CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts();
            fonts.setAscii("仿宋");
            fonts.setEastAsia("仿宋");
            fonts.setHAnsi("仿宋");
            cell.setParagraph(p);
    	}



    展开全文
  • poi操作Word合并单元格

    千次阅读 2017-08-11 14:21:07
    对于合并单元格的介绍不怎么多,下面是之前做word导出的时候研究的,在stackoverflow查到了点资料。 记录下两个关键方法: [java] view plain copy // word跨列合并单元格   ...

    对于合并单元格的介绍不怎么多,下面是之前做word导出的时候研究的,在stackoverflow查到了点资料。

    记录下两个关键方法:

    [java] view plain copy
    1. // word跨列合并单元格  
    2.     public  void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) {    
    3.         for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) {    
    4.             XWPFTableCell cell = table.getRow(row).getCell(cellIndex);    
    5.             if ( cellIndex == fromCell ) {    
    6.                 // The first merged cell is set with RESTART merge value    
    7.                 cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);    
    8.             } else {    
    9.                 // Cells which join (merge) the first one, are set with CONTINUE    
    10.                 cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);    
    11.             }    
    12.         }    
    13.     }    
    14.     // word跨行并单元格  
    15.     public void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {    
    16.         for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) {    
    17.             XWPFTableCell cell = table.getRow(rowIndex).getCell(col);    
    18.             if ( rowIndex == fromRow ) {    
    19.                 // The first merged cell is set with RESTART merge value    
    20.                 cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);    
    21.             } else {    
    22.                 // Cells which join (merge) the first one, are set with CONTINUE    
    23.                 cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);    
    24.             }    
    25.         }    
    26.     }   

    另外加上单元格字体设置的方法:

    [html] view plain copy
    1. private void getParagraph(XWPFTableCell cell,String cellText){  
    2.         CTP ctp = CTP.Factory.newInstance();  
    3.         XWPFParagraph p = new XWPFParagraph(ctp, cell);  
    4.         p.setAlignment(ParagraphAlignment.CENTER);  
    5.         XWPFRun run = p.createRun();  
    6.         run.setText(cellText);  
    7.         CTRPr rpr = run.getCTR().isSetRPr() ? run.getCTR().getRPr() : run.getCTR().addNewRPr();  
    8.         CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts();  
    9.         fonts.setAscii("仿宋");  
    10.         fonts.setEastAsia("仿宋");  
    11.         fonts.setHAnsi("仿宋");  
    12.         cell.setParagraph(p);  
    13.     }  
    转载自: POI操作word合并单元格

    另:(设值)

        private static void fillTable(XWPFTable table) {
            for (int rowIndex = 0; rowIndex < table.getNumberOfRows(); rowIndex++) {
                XWPFTableRow row = table.getRow(rowIndex);
    
                for (int colIndex = 0; colIndex < row.getTableCells().size(); colIndex++) {
                    XWPFTableCell cell = row.getCell(colIndex);
                    cell.addParagraph().createRun().setText(" cell " + rowIndex + colIndex + " ");
                }
            }
        }

    相关参考:[简单]poi word2007表格单元格合并

    展开全文
  • NPOI word 合并单元格,合并一个区域

    千次阅读 2019-02-19 11:22:18
    NPOI word 中的单元格合并。网上有不少教程将单元格合并的,但是基本都是在创建的单元的时候就开始合并了。 现在我们来看下,如何在创建好的表格上再做合并动作。 NPOI 的XWPFTable的row提供了MergeCells这个功能...
  • 设置单元格的行列坐标并写的word文档中Sub SetTablePosition() Dim tbl As Table Dim cell As cell Dim tblIndex As Integer Dim cellContent As String 以下遍历表格中存在的单元格 For Each tbl In This...
  • 问题是这样的,有一个word模板,模板里带表格需要根据需要动态的改变单元格样式,有可能 横向合并,也有可能纵向合并,求大神给解决思路或代码! 拜谢了!!!
  • Word文件合并单元格,在网络上,很容易找到下面这个函数,但是,这个函数有一个Bug,在生成Word之后,如果拖动单元格,合并的单元格又会重新还原。 /** * word单元格列合并 * * @param table 表格 * @param ...
  • ![图片说明](https://img-ask.csdn.net/upload/202008/15/1597422957_203616.png)![图片说明](https://img-ask.csdn.net/upload/202008/15/1597422963_146350.png)
  • phpword在使用单元格合并时,基本操作都一样,可以看连接:https://blog.csdn.net/yellowxiaotian/article/details/20369597。 一般来说都是需要计算好单元格宽度的,但是,有时候在office中正常,但是到wps中不...
  • 在做一个一级考试系统,用C#如何提取word中的合并单元格,以及这些格里面的内容,字体,字号大小等!希望大家给帮帮忙!
  • 之前使用XWPFDocument动态写入word,XWPFDocument不支持2003,word2003需要用HWPFDocument,HWPFDocument对于动态生成行效果不是很好,所以使用freemarker动态生成,生成的支持所有格式。 一、使用officeword建一个...
  • C# 操作word表格合并单元格

    千次阅读 2018-07-11 10:55:52
    C# 操作word表格遇到合并单元格的时候,假设表格是3行6列newTable.Cell(1, 1).Merge(newTable.Cell(1, 3));//合并第1行第1列到横向单元格合并,使用如下语句 newTable.Cell(1, 3).Merge(newTable.Cell(1, 4));...
  • word表格合并单元格的方法

    千次阅读 2010-07-28 08:44:00
    word表格合并单元格的方法   Tables(1).Cell(2, 1).Merge Tables(1).Cell(3, 1) -------------------------------------------------- ActiveDocument.Tables(1).Cell(2, 1).Merge ...
  • 使用freemarker生成word合并单元格

    千次阅读 2018-08-29 22:22:03
  • vc 操作word 绘制表格 合并单元格 填写页眉页脚等等

    千次下载 热门讨论 2010-08-14 21:36:35
    vc 操作word,包括新建文档,保存文档,写入文字,新建表格,更改表格格式,合并单元格,填写页眉页脚等等。
  • word合并单元格后不能输入文字

    千次阅读 2017-10-08 16:48:54
    1.https://support.microsoft.com/zh-cn/help/4011039/september-5-2017-update-for-word-2016-kb4011039 点开第一个链接,先看下bug说明,有个更新程序出现问题 2.然后往下看,有解决方法,点开链接 ...
  • poi创建word表格合并单元格代码如下: /** * @Description: 跨列合并 */ public void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) { for (int cellIndex = fromC...
  • [MS Office使用] Word无法合并单元格

    千次阅读 2016-03-29 09:48:52
    word2013里操作一个表格,需要将两个单元格合并,但是选中后工具栏上的”合并单元格“或者右键菜单的”合并单元格“都是灰色的无效状态。诡异的地方在于同一张表格的其他单元格是可以正常合并的。原因最后发现问题的...
  • 今天做了一个输出报表的模块,要用程序输出到WORD中,在网上找了半天,大多是VB代码,杂而且乱,尤其是合并单元格,几乎找不到有用的信息。所幸最终还是写了出来,拿来和大家分享一下,也可以少走些弯路。 一。 ...
  • //返回合并单元格占用行数 public int isMergedRegion(Sheet sheet, int row, int column) { int sheetMergeCount = sheet.getNumMergedRegions(); for (int i = 0; i ; i++) { CellRangeAddress range = ...
  • 网上搜到的都是可以提取正规的word表格的例子,没有提取word合并单元格的内容的,不知道哪位仁兄手头有这样的例子,帮帮忙,非常感谢。我刚接触c#,菜鸟一个。。。。。邮箱:liuyanjiali@163.com,谢谢!
  • PHPWord 表格居中和合并单元格

    千次阅读 2017-05-09 13:46:12
    /PHPWord/Style/Cell.php添加属性和方法 private $_rowMerge = null; private $_cellMerge = null; public function getRowMerge() { return $this->_rowMerge; } public function

空空如也

1 2 3 4 5 ... 20
收藏数 446
精华内容 178
关键字:

word合并单元格