2010-09-21 2 views
2

Я использую автоматизацию OLE из java для доступа к методам слова.Разбиение текстового файла на несколько файлов меньшего размера с использованием OLE Automation из java

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

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

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

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

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

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

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

Возможно, кто-нибудь предложит что-нибудь, что может мне помочь?

Спасибо и наилучшие пожелания Шон

Пример открыть файл слова, используя АВТОМАТИЗАЦИЮ OLE из 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 
+0

Я забыл добавить, что для этой цели я использую следующую библиотеку, которая включена в версию Eclipse от Helios. org.eclipse.swt.win32.win32.x86_64_3.6.0-v3650b.jar –

+0

Теперь мне удалось эффективно использовать метод Goto для перехода на определенные страницы, а затем удалить их, пока у меня не будет только страниц, которые мне нужны в документ, после которого я сохраняю его в новом документе. Это еще не идеально, но, по-видимому, это один из подходов, по крайней мере, к принятию. –

+0

Просто последнее замечание, в котором я закончил одну пустую страницу в конце моих разделенных файлов, потому что шаблон, используемый для слияния почты, имеет разрыв страницы на последней странице. Чтобы удалить последнюю пустую страницу в файле, я не мог использовать Delete в объекте Range, потому что это просто удаляет содержимое, а не страницу. Обходной путь, который я обнаружил, - это использовать метод TypeBackspaceKey, как только вы использовали метод Goto, чтобы попасть на последнюю страницу. Это прекрасно удалило пустую страницу из документа с разделенным словом. –

ответ

1

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

Смежные вопросы