我一直在使用java的OLE自动化来访问word的方法。
我设法使用OLE自动化完成了以下操作:
打开word文档模板文件。通过邮件合并word文档模板和csv数据源文件。将邮件合并文件保存到新的word文档文件。
我现在需要做的是能够打开邮件合并文件,然后使用OLE以编程方式将其分割为多个文件。
在第一次尝试时,我将csv文件中的行数乘以模板中的页数,得到合并后的总页数。然后我使用合并来创建多个文件。然而,问题是我不能准确地计算合并后的文档有多少页,因为在某些情况下,由于使用的数据和合并字段,模板的9页都不会被使用。因此,在某些情况下,一行将仅创建3页(使用9页模板),而其他行可能在邮件合并期间创建9页(使用9页模板)。
因此,唯一的解决方案是将所有行合并到一个文档中,然后将其拆分成多个文档,以确保每个文件中确实存在与3000页属性类似的确切页数,直到原始合并文件中没有更多的页。
我已经尝试了一些事情,使用msdn站点来获取方法和它们的属性等,但一直无法做到这一点。
在我的最后一次尝试中,现在我一直在尝试使用GoTo来获取特定的页码,并删除该页。我打算为每一页逐一尝试这样做,直到我到达我希望文件开始的位置,然后将其另存为新文件,但也无法这样做。
有没有人能给我提个建议来帮我?
感谢并问候肖恩
下面是一个使用jave的OLE自动化打开word文件的示例:
Code sample
OleAutomation documentsAutomation = this.getChildAutomation(this.wordAutomation, "Documents");
int [ ] id = documentsAutomation.getIDsOfNames(new String[]{"Open"});
Variant[] arguments = new Variant[1];
arguments[0] = new Variant(fileName); // where filename is the absolute path to the docx file
Variant invokeResult = documentsAutomation.invoke(id[0], arguments);
private OleAutomation getChildAutomation(OleAutomation automation, String childName) {
int[] id = automation.getIDsOfNames(new String[]{childName});
Variant pVarResult = automation.getProperty(id[0]);
return(pVarResult.getAutomation());
}
Code sample发布于 2010-10-04 11:10:42
听起来你已经找到它了。另一种可以避免构建和删除的方法是查看模板中对模板数量影响最大的部分(即数据可以是多行的部分)。然后,如果您使用这些字段并查看属性的字体、行距和行宽类型,您将能够计算出数据将在模板中占用的空间,并将数据限制在该点上。Java FontMetrics可以帮助你做到这一点。
https://stackoverflow.com/questions/3760112
复制相似问题