在网上复制粘贴代码习惯了,所以没有合适的方法的时候自己都懒得动脑子。
创新互联公司是一家集网站建设,乐山企业网站建设,乐山品牌网站建设,网站定制,乐山网站建设报价,网络营销,网络优化,乐山网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
没想到昨天半天谷歌没找到的解决方法今天早上换个思路几分钟就搞定了。
jacob是一个操作文档的组件,这个就不赘述了,想知道的同学可以去百度和谷歌。
这是网上的jacob操作word的一个复制表格的方法
- /**
- * 在当前文档指定的位置拷贝表格
- *
- * @param pos
- * 当前文档指定的位置
- * @param tableIndex
- * 被拷贝的表格在word文档中所处的位置
- */
- public void copyTable(String pos, int tableIndex) {
- Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
- Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
- .toDispatch();
- Dispatch range = Dispatch.get(table, "Range").toDispatch();
- Dispatch.call(range, "Copy");
- if (this.find(pos)) {
- Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();
- Dispatch.call(textRange, "Paste");
- }
- }
可是如果是要复制多个表格,并且是在生成过程中复制的话就遇到难题了。
因为如果要使用上面这个方法的话,需要一个标签提供表格copy时的坐标。
而
- public void insertText(String newText) {
- Dispatch.put(selection, "Text", newText);
- }
insertText这个方法,据实验和本人猜测,是在***生成的时候才写入的。
而不是立即实现。
所以使用
- /**
- * 从选定内容或插入点开始查找文本
- *
- * @param toFindText
- * 要查找的文本
- * @return boolean true-查找到并选中该文本,false-未查找到文本
- */
- public boolean find(String toFindText) {
- if (toFindText == null || toFindText.equals(""))
- return false;
- // 从selection所在位置开始查询
- Dispatch find = word.call(selection, "Find").toDispatch();
- // 设置要查找的内容
- Dispatch.put(find, "Text", toFindText);
- // 向前查找
- Dispatch.put(find, "Forward", "True");
- // 设置格式
- Dispatch.put(find, "Format", "True");
- // 大小写匹配
- Dispatch.put(find, "MatchCase", "True");
- // 全字匹配
- Dispatch.put(find, "MatchWholeWord", "True");
- // 查找并选中
- return Dispatch.call(find, "Execute").getBoolean();
- }
find方法寻找刚才插入的标识文字始终是false,那么理所当然,
copyTable(String pos, int tableIndex)这个方法是无用的。
所以昨天纠结了一下午。
今天早上突然福临心至。把copy这个方法的代码实现看了下。
我擦,我突然发现,无须用什么标签来替换插入表格,直接寻找到光标插入点不就行了。
稍微修改了下,其实就是删除了几行代码,就变成以下代码
- /**
- * 在当前插入点拷贝表格
- *
- * @param tableIndex
- * 被拷贝的表格在word文档中所处的位置
- */
- public void copyTable(int tableIndex) {
- Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
- Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
- .toDispatch();
- Dispatch range = Dispatch.get(table, "Range").toDispatch();
- Dispatch.call(range, "Copy");
- Dispatch.call(selection, "Paste");
- }
so,在插入上一个表格之后,再将光标往下移动几行,就搞定了,根据数据多少,动态复制表格。
往下移动光标的代码:
- /**
- * 把选定的内容或者插入点向下移动
- *
- * @param pos
- * 移动的距离
- */
- public void moveDown(int pos) {
- if (selection == null) {
- selection = Dispatch.get(word, "Selection").toDispatch();
- }
- for (int i = 0; i < pos; i++)
- Dispatch.call(selection, "MoveDown");
- }
这样,就ok了。
但是在生成三个以上表格时,却发现一个问题,那就是后面的表格紧接上一个表格,不论往下移动几个光标都木有用。
那么,要如何是好呢。这时候,一个极其有用的代码就出现了,那就是插入一个空行:
- Dispatch.call(selection, "TypeParagraph");//插入空行
全部搞定。
这次的过程给了我一个个赤果果的教训,那就是不要太依赖谷歌与度娘。
还是多看看源码吧。
仰山之高,观水之流…… 省我其心,抚尔之琴……
分享标题:JACOB的复制表格与添加空行
当前链接:http://www.mswzjz.com/qtweb/news10/189610.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联