Разделение файла слов на несколько файлов меньшего размера с помощью OLE Automation из Java - PullRequest
2 голосов
/ 21 сентября 2010

Я использую OLE-автоматизацию из Java для доступа к методам для слова.

Мне удалось сделать следующее с помощью автоматизации OLE:

Открыть файл шаблона документа Word. Почта объединить шаблон документа Word с файлом источника данных CSV. Сохранить файл слияния в файл нового документа Word.

Теперь мне нужно открыть объединенный файл почты, а затем с помощью OLE программно разделить его на несколько файлов. Это означает, что если исходный файл с объединенной почтой имеет 6000 страниц, а для моего свойства макс. Страниц на файл установлено значение 3000 страниц, мне нужно создать два новых файла документов Word и поместить первые 3000 страниц на одной и последние 3000 страниц на другую.

В моих первых попытках я взял количество строк в CSV-файле и умножил его на количество страниц в шаблоне, чтобы получить общее количество страниц после его объединения. Затем я использовал объединение для создания нескольких файлов. Проблема, однако, в том, что я не могу точно рассчитать, сколько страниц будет объединенным документом, потому что в некоторых случаях все, скажем, 9 страниц шаблона не будут использоваться из-за данных и используемых полей слияния. Таким образом, в некоторых случаях одна строка будет создавать только 3 страницы (используя шаблон из 9 страниц), а другие могут создавать 9 страниц (используя шаблон из 9 страниц) во время слияния.

Таким образом, единственное решение состоит в том, чтобы объединить все строки в один документ, а затем разделить его на несколько документов, чтобы убедиться, что точное количество страниц, например свойство 3000 страниц, действительно присутствует в каждом файле, пока не останется больше страниц от исходный объединенный файл.

Я уже несколько раз пробовал использовать сайт msdn для получения методов, их свойств и т. Д., Но не смог этого сделать.

На моих последних попытках теперь я пытался использовать GoTo, чтобы добраться до определенного номера страницы и удалить страницу. Я собирался попробовать сделать это один за другим для каждой страницы, пока не доберусь до того места, откуда я хочу, чтобы файл начинался, и затем сохранить его как новый файл, но также не смог сделать это.

Пожалуйста, кто-нибудь может предложить что-то, что может мне помочь?

Спасибо и С уважением Шон

Ниже приведен пример открытия файла слова с помощью OLE AUTOMATION из jave:

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

1 Ответ

1 голос
/ 04 октября 2010

Звучит так, будто вы уже отметили это. Другой подход, который вы могли бы использовать, чтобы избежать создания, а затем удаления, состоял бы в том, чтобы посмотреть на части вашего шаблона, которые могут иметь наибольшее значение для количества вашего шаблона (в этом случае данные могут быть многострочными). Затем, если вы возьмете эти поля и посмотрите свойства шрифта, межстрочного интервала и ширины линии, вы сможете рассчитать пространство, которое ваши данные будут занимать в шаблоне, и ограничить ваши данные в этой точке. Java FontMetrics может помочь вам в этом.

...