精华内容
下载资源
问答
  • /** * 合并单元格用于科研采购结果审批公文 * @throws Exception */ public static void mergeCellsForPurchaseResult(String ... // 得到word对象及word中需要合并行的表格对象 Document doc = new D...
    /**
         * 合并单元格
    	 * @throws Exception 
         */
    	public static void mergeCellsForPurchaseResult(String saveFilePath) throws Exception {
    		// 得到word对象及word中需要合并行的表格对象
    		Document doc = new Document(saveFilePath);
    		Table table = (Table) doc.getChild(NodeType.TABLE, 0, true);
            
            // 定义合并行的开始行、开始列、结束列
            int startRowNum = 6;
            int startCellNum = 1;
            int endCellNum = 3;
    
            RowCollection rows = table.getRows();
            // 循环行列处理数据进行表格合并
    		for (int i = startRowNum; i <= rows.getCount(); i++){
    			// 当前列当前行对象、当前列上一行对象
    			Cell cellStartRange = table.getRows().get(i).getCells().get(startCellNum);
    			Cell cellEndRange = table.getRows().get(i-1).getCells().get(startCellNum);
    			// 当前行对象和上一行对象不相等时,则合并单元格
    			if(!cellStartRange.getText().equals(cellEndRange.getText()) && i > startRowNum){
    				for (int j = startCellNum; j <= endCellNum; j++){
    					mergeCells(rows.get(startRowNum).getCells().get(j), rows.get(i-1).getCells().get(j),table);
    					doc.save(saveFilePath, SaveFormat.DOC);
    				}
    				startRowNum = i;
    			}
    			
    			// 上一列当前行对象用于判断什么时候结束表格合并(代表word文档中的回车符)
    			Cell endRange = table.getRows().get(i).getCells().get(startCellNum-1);
    			if("采购代表".equals(endRange.getText())){
    				return;
    			}
    		}
    	}
    	
    	/**
    	 * 合并单元格
    	 * @param startCell 开始单元格
    	 * @param endCell 结束单元格
    	 * @param table 表格
    	 */
    	public static void mergeCells(Cell startCell, Cell endCell, Table table) {
    		Point startCellPos = new Point(startCell.getParentRow().indexOf(startCell), table.indexOf(startCell.getParentRow()));
    		Point endCellPos = new Point(endCell.getParentRow().indexOf(endCell), table.indexOf(endCell.getParentRow()));
    		Rectangle mergeRange = new Rectangle(Math.min(startCellPos.x,
    				endCellPos.x), Math.min(startCellPos.y, endCellPos.y),
    				Math.abs(endCellPos.x - startCellPos.x) + 1,
    				Math.abs(endCellPos.y - startCellPos.y) + 1);
    		for (Row row : table.getRows()) {
    			for (Cell cell : row.getCells()) {
    				Point currentPos = new Point(row.indexOf(cell), table.indexOf(row));
    				if (mergeRange.contains(currentPos)) {
    					if (currentPos.x == mergeRange.x){
    						cell.getCellFormat().setHorizontalMerge(CellMerge.FIRST);
    					}else{
    						cell.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
    					}
    					if (currentPos.y == mergeRange.y){
    						cell.getCellFormat().setVerticalMerge(CellMerge.FIRST);
    					}else{
    						cell.getCellFormat().setVerticalMerge(CellMerge.PREVIOUS);
    					}	
    				}
    			}
    		}
    	}
    
    展开全文
  • 批量实现word表格合并

    2017-07-07 05:56:16
    如何用程序实现word表格中单元格边框是网格线进行上下单元格合并问题,如图片中将虚线的上下单元格进行合并
  • vc 操作word,包括新建文档,保存文档,写入文字,新建表格,更改表格格式,合并单元格,填写页眉页脚等等。
  • 学习分享:POI-TL 导出Word复杂表格合并分享

    千次阅读 多人点赞 2021-01-11 15:39:35
    最近在做项目时候遇到的一个关于导出Word的文件的需求,数据展示可以根据POI-TL的官方的文档还是可以做出来的,但是一些表格合并处理poi-tl只是给了简单例子,前期的学习可以参考POI-TL(htt


    关于POI-TL 导出Word的一些使用

    最近在做项目时候遇到的一个关于导出Word的文件的需求,简单的数据展示可以根据POI-TL的官方的文档还是可以做出来的,但是有一些表格的合并处理poi-tl只是给了简单例子,前期的学习可以参考POI-TL(http://deepoove.com/poi-tl/)官方文档,及给出的一些简单的源码(https://github.com/Sayi/poi-tl),话不多说上代码


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、前期准备?

    <font color=#999AAA

    Apache POI 4.1.2+
    JDK 1.8+

    这个地方需要注意的是:要根据自己项目的JDK来引入的对应版本的,POI-TL 官方给出来的JDK对应的版本要求
    在这里插入图片描述

    二、代码演示

    1.数据结构

    public class DocData {
        private String title;
        private String date;
        private TableRenderData renderData;
    }
    

    在这里插入图片描述

    GET SET方法就省略了,这个数据结构换成你自己需要的数据结构就可以了,图片是对应的WORD 模板,{{}}里面放入对象中对应的属性,{{#}}是获取TableRenderData 表格数据的方式,这些都可以在POI-TL官方学习到

    2.代码示例

    2.1 写入表头表体的数据

    		DocData docData = new DocData();
            TableRenderData renderData = new TableRenderData();
            //设置的合并规则
            MergeCellRule.MergeCellRuleBuilder mergeCellRuleBuilder = MergeCellRule.builder();
            //设置表头
            RowRenderData header = Rows.of("姓名", "特长", "是否获奖").bgColor("F2F2F2").center()
                    .textColor("7F7f7F").textFontFamily("Hei").textFontSize(9).create();
            //表体内容
            RowRenderData row = Rows.of("小红", "游泳", "否").center().create();
            RowRenderData row1 = Rows.of("小红", "钢琴", "八级").center().create();
            RowRenderData row2 = Rows.of("小红", "围棋", "否").center().create();
            RowRenderData row3 = Rows.of("小明", "游泳", "全国一等奖").center().create();
            RowRenderData row4 = Rows.of("小明", "击剑", "无").center().create();
            RowRenderData row5 = Rows.of("小梅", "围棋", "无").center().create();
            RowRenderData row6 = Rows.of("小梅", "跆拳道", "黑带").center().create();
            RowRenderData row7 = Rows.of("小梅", "长跑", "国家一级运动员").center().create();
            RowRenderData row8 = Rows.of("小梅", "举重", "无").center().create();
            RowRenderData row9 = Rows.of("小刚", "脸特长", "").center().create();
    

    可以看出我们设置了表头内容分别是姓名、特长、获奖情况。姓名是重复的数据,我们希望将相同的姓名合并在一起,我们需要用到 **MergeCellRule.MergeCellRuleBuilder mergeCellRuleBuilder = MergeCellRule.builder();**设置合并的规则

    2.2 设置合并规则

    代码中标明注释,表格的合并根据自己的需求去设置规则。

    		//设置样式颜色尺寸等等
            TableStyle.BorderStyle borderStyle = new TableStyle.BorderStyle();
            borderStyle.setColor("A6A6A6");
            borderStyle.setSize(4);
            borderStyle.setType(XWPFTable.XWPFBorderType.SINGLE);
            TableRenderData tableRenderData = Tables.ofA4MediumWidth().addRow(header)
                    .addRow(row).addRow(row1).addRow(row2).addRow(row3).addRow(row4)
                    .addRow(row5).addRow(row6).addRow(row7).addRow(row8).addRow(row9)
                    .border(borderStyle).center()
                    .create();
            /**
             * 设置表格合并规则
             * 1.起始行 MergeCellRule.Grid.of(i, j) i: 行 j: 列
             * 2.结束行 MergeCellRule.Grid.of(i, j) i: 行 j: 列
             */
            mergeCellRuleBuilder.map(MergeCellRule.Grid.of(1, 0), MergeCellRule.Grid.of(3, 0));//小红合并
            mergeCellRuleBuilder.map(MergeCellRule.Grid.of(4, 0), MergeCellRule.Grid.of(5, 0));//小明合并
            mergeCellRuleBuilder.map(MergeCellRule.Grid.of(6, 0), MergeCellRule.Grid.of(9, 0));//小梅合并
    
            /**
             * MergeCellRule支持多合并规则,会以Map的形式存入可以看一下源码
             * !!! 一定要设置完规则后再调用 MergeCellRule的build方法进行构建
             */
            tableRenderData.setMergeRule(mergeCellRuleBuilder.build());
    

    2.3 输出结果

    		docData.setTitle("测试测试测试");
            docData.setDate(DateUtil.formatAsDatetime(new Date()));
            docData.setRenderData(tableRenderData);
            File file = ResourceUtils.getFile("D:\\Java\\ideawork\\word\\target\\test-classes\\demo.docx");
            XWPFTemplate template = XWPFTemplate.compile(file).render(docData);
            template.writeToFile("D:\\测试例子.docx");
    

    这里获取的是绝对路径,根据自己WORD模板放在的位置进行获取,输出位置自己设定就好了,最后是我们输出的结果展示,可以看到名字相同的人已经进行了合并。

    在这里插入图片描述


    总结

    第一次分享,不足的地方请指出,需要源码请私信,看到后会及时处理。

    展开全文
  • 而在word文档中,偶尔我们也需要插入表格,然后编辑表格,那么如何对word中的表格单元格进行合并、拆分呢?一、如何在word中创建表格1.选择“插入”选项卡,单击“表格”按钮,在弹出的列表框中选择“插入表格”命令...

    在excel中,合并、拆分单元格是经常会用到的。而在word文档中,偶尔我们也需要插入表格,然后编辑表格,那么如何对word中的表格单元格进行合并、拆分呢?

    一、如何在word中创建表格

    1.选择“插入”选项卡,单击“表格”按钮,在弹出的列表框中选择“插入表格”命令。

    2.在弹出的“插入表格”对话框中,对列数、行数进行设置,这里我们设置“列数”为“5”,“行数”为“6”。单击“确定”按钮。

    二、如何对单元格进行合并

    1.选中我们需要合并的单元格。在这里我们选中第一行单元格。

    05488d8ad6fa8dc7ec1b7c806b40ad94.png

    2.选择“布局”选项卡,在“合并”选项组中选择“合并单元格”命令。

    48ccbce03326fb8a9e0ead9f20fe10d3.png

    3.合并之后的单元格,如下图。

    dbbab1092b55149b72be195c4524158c.png

    提示:在我们选中需要合并的单元格后,也可以在选中区域上单击鼠标右键,在弹出的列表框中选择“合并单元格”命令。

    三、如何对单元格进行拆分

    选择我们需要拆分的单元范围。如图所示:

    32ff35b9daf57c93751445ebfb34bccb.png

    2.选择“布局”选项卡,在“合并”选项组中选择“拆分单元格”命令。

    30bdb598197cba7250e15e978623a6ab.png

    3.在弹出的“拆分单元格”对话框中,对列数、行数进行设置,这里我们设置“列数”为“2”,“行数”为“1”。最后点击“确定”按钮。

    a30090a6debd27292710ed06013b29f1.png

    提示:如果拆分的对象是一个单元格,即一个单元格拆分为多个单元格。也可以选中这个单元格,单击鼠标右键,在弹出的列表框中选择“拆分单元格”命令。

    展开全文
  • 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));...

    C# 操作word表格

    遇到合并单元格的时候,假设表格是3行6列

    newTable.Cell(1, 1).Merge(newTable.Cell(1, 3));//合并第1行第1列到横向单元格合并,使用如下语句
    
    newTable.Cell(1, 3).Merge(newTable.Cell(1, 4));
    newTable.Cell(2, 4).Merge(newTable.Cell(2, 5));

    最后表格如下图


    可以看到,横向合并单元格的时候,列号会往右移动。

    但是如果是竖向合并单元格的话,就不是这样了。

    还是这个表,如果想达到下面这个效果的话


    使用下面的语句就会报错

    newTable.Cell(2, 1).Merge(newTable.Cell(3, 1));
    newTable.Cell(3, 1).Merge(newTable.Cell(5, 1));//这句会报错

    出错提示:对 COM 组件的调用返回了错误 HRESULT E_FAIL

    究其原因在于,竖向合并单元格的时候,单元格的名称不会改变。如下图


    之前的单元格Cell(4, 1)还存在。
    正确的代码应该是这样:
     newTable.Cell(2, 1).Merge(newTable.Cell(3, 1));
     newTable.Cell(4, 1).Merge(newTable.Cell(6, 1));
    具体原因可以看这个文章:https://blog.csdn.net/p656456564545/article/details/49123043点击打开链接

    展开全文
  • phpoffice的表格合并是通过修改表格样式来实现的,假如我们有如图表格: 我们要把1234合并起来: 那么我们就要修改1234表格的vMerge样式。 $table->addCell(100, ["vMerge" => "restart"])->add...
  • 而且poi对于生成word方面的能力确实不如他生成xsl那种表格好.其他的特点另行百度,很多文章介绍. 这也是我才解决的bug 首先这个模板里第一行是6个单元格 ,第二行第三行都是8个单元格 我们的业务是得到一个存放...
  • vba代码向word文档中插入表格合并单元格,代码如下: Sub mergeCell() Dim Tbl As Table Set Tbl = ActiveDocument.Tables.Add(ActiveDocument.Range(0, 0), numrows:=2, numcolumns:=4) '在文档开头插入一个两行...
  • 问题 word有两个表格,中间空格,删除掉空格之后,两个表格之间至少也会保留一个空格,删除不掉。所以两个表格没办法合并
  • 一、对word表格整个表格进行边框加粗:选中表格,右击-“边框和底纹”,个“线形”和“宽度”的选项,这里默认的是选择“全部”,这样即可将整个表格的边框线进行加粗了。二、单独对word表格的外边框和网格线进行...
  • vc 操作word,包括新建文档,保存文档,写入文字,新建表格,更改表格格式,合并单元格,填写页眉页脚等等。 如假包换。 http://download.csdn.net/source/2620568 另定义了一些word宏(见源代码),但是...
  • python docx处理word文档中表格合并问题

    万次阅读 多人点赞 2019-03-20 14:11:08
    python中用docx库读取word文件,若word文件中包含合并表格表格 则通过docx读取显示: file = docx.Document(path) for table in file.tables: for row in table.rows: for cell in row.cells: print...
  • poi创建word表格合并单元格代码如下: /** * @Description: 跨列合并 */ public void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) { for (int cellIndex = fromC...
  • poi 导出word,导出表格(复杂表格合并行列)解决方法
  • 1 Maven依赖 com.alibaba easyexcel 2.2.7 cn.hutool hutool-all 5.6.2 2 合并单元格 /** * 合并单元格 * * @param table 表格对象 * @param beginRowIndex 开始行索引 * @param endRowIndex 结束行索引 * ...
  • public void MergeCellsCustom(XWPFTable table, int startColumn, int endColumn, int startRow, int endRow) { for (int rowIndex = startRow; rowIndex <= endRow; rowIndex++) { if (startColumn <...
  • 今天遇到非常奇怪的问题用poi操作word中的表格后遇到的一些问题,记录下来,希望兄弟遇到遇到一起研讨研讨。本人初步判断是版本兼容性问题,待验证。 正常来说操作表格后的样式应该是如下图的: 但是实际上,...
  • word是一款文字处理器应用程序,我们大家在生活中工作中都会频繁的使用到word写一些文字、素材等等内容,我们记录一些信息的时候会使用到表格,那么对于word文档中表格我们怎样操作可以使其快速拆分呢?下面小编给...
  • 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 ...
  • 里面行,列均有合并单元格的情况,为了正确读取到位置,用下面代码做了个试验,判断每个单元格的行列号。 from docx import Document if __name__ == "__main__": word_file_name = r"自动填表试验.docx" doc = ...
  • 选择第一个左上角的十字形,右键单击,选择表格内容 原先的“文绕图”为“无”,这里将其设置为“文绕图”,然后点击确定 将光标放在这里: 按下delete键,表格合并到一起了,而且不会自动调整。
  • 在使用NPOI操作制作word数据模板时,需要在word中插入表格,包括合并单元格的方式 图例: 1,没有合并单元的方式创建表格,这种方式是提前创建好所需要的表格,然后再往里面填数 XWPFDocument doc= new ...
  • 工作常用的excel,word导出,需要引入下面的6个主要包,和主要包依赖的其他包 ,可以看下面的表格进行依赖下载引入 这下面的两张图是主要包对应涉及到功能,可以按需要进行引入,有些真的用不到的主要包可以不引入 ...
  • 1、word表格的模板 另存为xml格式: 将保存的xml改成.ftl 格式化一下xml,看看文件中的带是否正确注:可能出现{}是否正确 注:可能出现是否正确注:可能出现{标签。。。再},这种情况复制没有这种情况的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,657
精华内容 8,262
关键字:

word有表格合并