精华内容
下载资源
问答
  • POI操作WORD表格系列--复制表格,填充数据

    万次阅读 多人点赞 2018-07-30 18:08:06
    这两天公司要求用POI生成word模板数据,基本上就是利用WORD书签往指定位置填充数据表格。按理来说,用freemark会更容易和简单一些,因为POI对WORD的写入实在是不敢恭维。 言归正传,好歹也按要求将报告按模板生成...

    这两天公司要求用POI生成word模板数据,基本上就是利用WORD书签往指定位置填充数据和表格。按理来说,用freemark会更容易和简单一些,因为POI对WORD的写入实在是不敢恭维。

    言归正传,好歹也按要求将报告按模板生成出来了。

    首先,归纳几点注意事项:

    1.table.addNewRowBetween(int start, int end):在指定范围内插入一行,看上去很美好的方法,实际上是没有实现的,我的poi版本是3.9,如果需要使用这个方法插入行,最好是看一下源码,XWPFTable是否实现了这个方法。

    2.table.addRow()和table.addRow(XWPFTableRow row, int pos):前面一个不用说,就是在表格最后一行插入一行,并没有返回值;后一个方法让我栽了大跟头,我起先的理解是在pos的位置插入指定行,这样看来这个方法尤其的实用,特别是在复制行的时候,我想的是直接把表格中要复制的行传入即可,问题就来了,在后面的填充数据时,复制的4行,数据始终填充不进数据。究其原因:还是对象的拷贝问题,addRow中的row是浅拷贝,所以复制出来的行其实都是传入的row对象。

    然后,再说复制WORD表格的实现:

    上述注意事项已解释为什么不能直接使用addRow来复制表格,所以需要通过自己写代码复制指定行的样式和数据。

    public void copy(XWPFTable table,XWPFTableRow sourceRow,int rowIndex){
        //在表格指定位置新增一行
    	XWPFTableRow targetRow = table.insertNewTableRow(rowIndex);
    	//复制行属性
    	targetRow.getCtRow().setTrPr(sourceRow.getCtRow().getTrPr());
    	List<XWPFTableCell> cellList = sourceRow.getTableCells();
    	if (null == cellList) {
    	    return;
    	}
    	//复制列及其属性和内容
    	XWPFTableCell targetCell = null;
    	for (XWPFTableCell sourceCell : cellList) {
    	    targetCell = targetRow.addNewTableCell();
    	    //列属性
    	    targetCell.getCTTc().setTcPr(sourceCell.getCTTc().getTcPr());
    	    //段落属性
    	    if(sourceCell.getParagraphs()!=null&&sourceCell.getParagraphs().size()>0){                     
    	    	targetCell.getParagraphs().get(0).getCTP().setPPr(sourceCell.getParagraphs().get(0).getCTP().getPPr());
                if(sourceCell.getParagraphs().get(0).getRuns()!=null&&sourceCell.getParagraphs().get(0).getRuns().size()>0){
                	XWPFRun cellR = targetCell.getParagraphs().get(0).createRun();
        	        cellR.setText(sourceCell.getText());
        	        cellR.setBold(sourceCell.getParagraphs().get(0).getRuns().get(0).isBold());
                }else{
                	targetCell.setText(sourceCell.getText());
                }
            }else{
            	targetCell.setText(sourceCell.getText());
            }
        }
    }

     

    展开全文
  • //Word表格数据换行 //逐步获取表格内内容 //获取所有表格 List<XWPFTable> list2=docx.getXWPFDocument().getTables(); for(XWPFTable xwpfTable:list2){ //获取一个表格中的所有行 List<XWPFTableRow...
    问题:Word中包含表格导出数据需要换行时不论是使用“\r\n”还是“^p”都无法实现
    
    下面为解决代码:
    
    
    //Word表格内数据换行
    //逐步获取表格内内容
    //获取所有表格
    List<XWPFTable> list2=docx.getXWPFDocument().getTables();
    for(XWPFTable xwpfTable:list2){
        //获取一个表格中的所有行
        List<XWPFTableRow> xwpfTableRows = xwpfTable.getRows();
        for(XWPFTableRow xwpfTableRow:xwpfTableRows){
            //获取一行中的所有列
            List<XWPFTableCell> xwpfTableCells = xwpfTableRow.getTableCells();
            for(XWPFTableCell xwpfTableCell:xwpfTableCells){
                //获取一格里的内容
                List<XWPFParagraph> paragraphs = xwpfTableCell.getParagraphs();
                for(XWPFParagraph xwpfParagraph:paragraphs){
                    List<XWPFRun> run1=xwpfParagraph.getRuns();
                    //根据内容替换换行符
                    for(XWPFRun r:run1){
                        String str=r.getText(0);
                        //在原先文本中获取存在"\n"的段落
                        if (str.indexOf("\n") != -1) {
                            //清空原先文本,使用换行后的新文本
                            r.setText("", 0);
                            String[] split = str.split("\n");
                            //进行换行和缩进
                            if (split != null && split.length > 0) {
                                for (int i = 0; i < split.length; i++) {
                                    if (i == 0) {
                                        r.setText(split[i].trim());
                                    } else {
                                        // 换行
                                        r.addBreak();
                                        r.setText(split[i].trim());
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

     

    原理:将表格内数据一一遍历,最终单格内容进行换行处理,前提是数据中有指定换行标识,比如数据中有“\n”标识

     

    展开全文
  • 之前在做一个C#项目需要对word文档的表格进行数据填充,然后代码调用打印。如何用C#对word文档填充文字网上已经很多实例了,我就不多重复了,只提一点,找不到“文字型窗体域”的(我反正是找一下午没找到),可以...

    之前在做一个C#项目需要对word文档的表格进行数据填充,然后代码调用打印。如何用C#对word文档填充文字网上已经很多实例了,我就不多重复了,只提一点,找不到“文字型窗体域”的(我反正是找一下午没找到),可以网上下一个有文字型窗体域的word模板,复制黏贴就可以了。这里重点说针对表格的插入图片,这个网上找不到,完全我自己摸索出来的。有更好的方法欢迎指正。

    using Spire.Doc;
    using Spire.Doc.Documents;
    using Spire.Doc.Fields;//需要引用spire.doc的dll文件,网上很容易搜到 
    
    
    class Docx
        {
            private string filePath="C:\\Users\Administrator\\Desktop\\机动车考试成绩单.doc";
            private DocPicture dp;//doc图片
            private Document Doc;//模板文件
            private byte[] head;//存储人物头像的byte数组
            //读取word文档
            private void ReadDoc()
            {
                 Doc = new Document(filePath, FileFormat.Docx);//读取word文档模板
                 head=ReadHead();//如何读取图片获取byte[]此处就不写详细代码了,网上有范例,我的另一遍博客里也有教程
            }
            //填充word文档
            private void FillDoc()
            {
                dp = Doc.Sections[0].Tables[0].Rows[0].Cells[4].Paragraphs[0].AppendPicture(head);
                //此处说说具体的参数
                //Section[0]————word文档页数列表, [0]表示取第一页
                //Tables[0]————当前页的表格列表,当一页存在多个表格时,按照从上往下的顺序排列,[0]表示取第一个表格
                //Rows[0]————当前所取表格的行的列表,按照从上往下的顺序排列,[0]表示取第一行
                //Cell[4]————当前表格所取行的格子列表,按照从左往右顺序排列,[4]表示取第五格,对于一个大格横跨多行的,取该格子最上部所在行的行数
                //Paragraphs[0]————取当前格的段落,默认0不用管它
                //终上所述,上面代码表意思就是,取第一页的第一个表格的第一行的第五个格子,将头像图片插入进去
                dp1.Height = 122; //设置图像的高
                dp1.Width = 100;//设置图像的宽
                dp1.VerticalPosition = 2; //设置图像的停靠位置方式
                dp1.TextWrappingStyle = TextWrappingStyle.InFrontOfText;//设置图像的文字环绕方式
            }
            //打印word文档
            private void Print()
            {
                PrintDialog dialog = new PrintDialog();
                dialog.AllowCurrentPage = true;
                dialog.AllowSomePages = true;
                dialog.UseEXDialog = true;
                try
                {
                    Doc.PrintDialog = dialog;
                    dialog.Document = Doc.PrintDocument;
                    dialog.Document.Print();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
    题外话,如果涉及批量的填充打印的话,反复创建Document实例再读取模板其实是一件很耗费性能的事,这里推荐使用document.clone();方法
    开局只需读取一次doc模板,每次需要填充打印时,只需对doc模板调用.clone()方法,然后对克隆的模板进行填充,打印,释放。
    不过要注意,当文档里的一页上的表格超过五个时,无法克隆,调用.clone()方法时会失败,也许是因为用的spire.doc是免费版的关系?
    至此完毕,感谢阅读,如有帮助希望能点个赞
    
    
    
    
    
    
    
    
    
    
    

    展开全文
  • 就是word文档中的某个表格数据会需要编写C#程序进行解析,然后改变xml文件中相应节点的值,但是在解析word文档表格数据时,发现如果出现某些相邻单元格合并的情况就会出现解析报错的现象。 不知道大家是否理解我的...
  • PhpWordword模板填充数据后下载(补充修改)避免填充数据后保存在服务器 避免填充数据后保存在服务器 $phpword=new PhpWord(); $template=$phpword->loadTemplate('***.doc');//读取word模板 $template->...

    PhpWord按word模板填充数据后下载(补充修改)

    PhpWord按word模板填充数据后下载1:
    https://blog.csdn.net/qq_45504289/article/details/107246677

    避免填充数据后保存在服务器

    $phpword=new PhpWord();
    $template=$phpword->loadTemplate('***.doc');//读取word模板
    $template->setValue('name','test');//填充数据
    $filename = 'test.doc';
    header('Content-Type: application/vnd.ms-word');
    header('Content-Disposition: attachment;filename='.$filename);
    header('Cache-Control: max-age=0');
    
    $template->saveAs('php://output');//直接下载
    
    展开全文
  • word表格是一种制式文档。所谓制式文档,指文档的主体部分内容或格式固定,而称呼、签名等内容不同的文档。在文档数量较多时,手动输入是件很费神的事情。word的 邮件合并 功能可以帮我们轻松地把excel中的数据逐条...
  • Python 使用Word模板填充数据

    千次阅读 2020-03-11 11:03:27
    首先挖出需要填充数据的地方,设计好数据返回的架构template_path为模板绝对路径; resulte_context_dict是即将填充的数据字典; from docxtpl import DocxTemplate,Listing,Richtext tpl = DocxTemplate...
  • Word表格怎么自动填充和计算数据...自动填充数据自动填充数据对于输入顺序序号的数据很有用,这在Excel中是一个常用功能,Word一样可以实现。(1)选择需要填充序号的单元区域,选择“开始/段落”组,单击其中的编号按...
  • 1.word模板制作 在word文档光标位置,插入 -》文档部件 -》域,弹框如下: 最终生成的模板文档如下: 注:图片域和单个变量域是同一个,定义图片域时,同一个图片需要定义不同的域名。 2.工具类准备 使用...
  • 1、excel另存为html 2、html文件用word打开 3、复制、粘贴即可。
  • 通过Python自动化办公把提取word中的表格填充到到excel当中. 首先通过for循环提取word当中的表格的每个单元格的内容,然后指定excel,进行批量填充
  •  功能介绍: 主要实现往已有表格填充数据,在数据列大于表格列时不会新增列,因为新增列涉及单元格宽度的重新计算,所以没实现,在表格行数小于数据大小时会按照最后一列的列数添加表格行, 然后再插入数据,插入数据...
  • Java获取word表格中的数据

    千次阅读 2019-05-17 17:57:58
    原 Java获取word表格中的数据 2019年04月11日 11:13:07 IT_zhang81 阅读数:20 ...
  • 用C#动态生成Word文档并将数据填入Word表格
  • 让Word成为全自动助手——Word表格自动填充( 王霞 2004.05.21 09:23:51 本文选自:《中国电脑教育报》 )编辑Excel工作表时,其提供的自动填充柄可以实现序列的自动填充,其实巧用Word提供的“编号”功能,也...
  • 1.准备模板,在模板的需要我们导出数据的地方写上东西占位(最好是英文单词并且写好之后word不会报红色波浪线,不然后边会有点麻烦);注意:不能用相同的单词占位,请忽略的我截图中的hour1和min1,操作事务,大家...
  •  * @param tableRowSize 模版表格行数 取第一个行数相等列数相等的表格填充    * @param isDelTmpRow 是否删除模版行    */     //TODO 数据行插到模版行下面,没有实现指定位置插入   ...
  • Java编程调用PageOffice实现从空白的excel文件动态生成excel表格,设置公式并填充数据。 集成PageOffice不但能够实现在线编辑、保存真正的Office文档,而且还可以轻松实现Word、Excel文档的动态数据填充、格式控制和...
  • POI操作word填充数据,合并多个word为一个,遇到一些问题的解决 最近搞一个向word模板中替换占位符 填充数据,然后将多个word合并在一起的方法。网上一搜有很多资料,现在在这儿对过程中遇到的一些问题进行描述。 ...
  • 而在开发的过程中,也遇到了比较常见的文件导出问题–以固定格式将数据存储在word、excel等office文件格式中。 在网上搜索了许多方法,了解到要导出word文件,其实办法由很多,如jacob,java2word,FreeMarker,Apatch ...
  • 如果查询的是多个记录,那么需要复制多这个这样表格填充数据。这个需求不是对一个表格行的添加,而是要求表格本身的复制。    实现web系统中文件的内容的动态生成使用soaoffice就可以,估计不少人都用...
  • POI操作word填充数据

    千次阅读 2020-10-28 15:30:45
    1、pom引入POI包 org.apache.poi poi 3.17} org.apache.poi poi-ooxml 3.17 org.apache.poi poi-ooxml-schemas 3.17 2、POI的XWPFDocument往word模板中填充数据 package com.sx.local.govern.utils; import ...
  • 主要实现了按照模版行的样式填充数据,针对的是动态数据,静态数据可以直接替换变量实现,先说下缺点:1)暂未实现特殊样式填充(如列合并(跨行合并)),只能用于普通样式(如段落间距 缩进 字体 对齐)2)数据行插到模版行...
  • 在Web系统开发的时候,对...如果查询的是多个记录,那么需要复制多这个这样表格填充数据。这个需求不是对一个表格行的添加,而是要求表格本身的复制。 实现web系统中文件的内容的动态生成使用soaoffice就可...
  • 单个粘贴可以使用nxm数据填充Word中的整个nxm表。 三个简单的方向: 从您自己的代码生成数据集 A。 键入 toTable(A)。 粘贴到 Excel 电子表格Word 表格中。 (注意:默认模式会自动将内容复制到剪贴板中。)
  • C#也能动态生成Word文档并填充数据

    千次阅读 2016-07-28 15:09:53
    C#也能动态生成Word文档并填充数据  要使用C#操作word,首先要添加引用:  1、添加引用->COM->Microsoft Word 11.0 Object Library  2、在.cs文件中添加 using Word; //下面的例子中包括C#对Word文档的...
  • Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对...需求:现有一个空的word模板,通过代码往里面填充内容 空模板如下图所示: 填充后的文档内容如下: 代码如下: public cla...
  • poi动态操作word填充数据操作docx

    千次阅读 2019-11-16 17:59:24
    但是在实际项目中并没有这么简单,模板文档中可能需要替换文本中的文字,也可能需要替换表格对象中的文字,或者在指定表格中插入数据,下面我们就仿照实际情况来做个简单的模板。 首先创建一个word的模板 package...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,500
精华内容 4,600
关键字:

word表格如何填充数据