Объединение документов
B
Объединение документов – один из способов оптимизации хранения текстовой информации и консолидации данных в них. Объединение может понадобиться для более удобной распечатки больших объёмов текста, для обобщения правок одного документа разными авторами или же для автоматического слияния правок единого общего шаблона с его копиями.
В статье ниже мы узнаем обо всех способах объединения документов Word и OpenOffice Writer с использованием как только текстовых файлов, так и файлов электронных таблиц.
Как соединить несколько текстовых файлов в один
Язык: | Русский |
Формат: | |
Обновлено: | 2018-10-28 |
Автор: |
Если Вам часто приходится объединять текстовые документы в один, то Вам, наверняка, пригодятся различные хитрости, которые могут очень сильно упростить работу по консолидации данных из разных источников.
"От сессии до сессии живут студенты весело!" – так часто шутят у нас в конторе подразумевая, что в период подготовки документации к очередному заседанию нашего райсовета особо не до веселья... Приходится обрабатывать, оформлять и вычитывать десятки, а то и сотни страниц текста.
При этом отдельно существует сразу несколько вариантов одного и того же документа: один в виде проекта, другой в форме предлагаемого на сессию варианта, третий в виде готового и оформленного по всем правилам решения, а четвёртый – практически полный аналог второго, но внутри общего буклета, раздаваемого депутатам для ознакомления.
И всё бы ничего, да только очень часто в уже вычитанные и оформленные документы приходится вносить правки. И вот тут начинается самый кошмар, потому что случайно можно забыть поправить цифру в одной из версий документа! К счастью, современные текстовые процессоры Microsoft Office Word и OpenOffice Writer имеют довольно широкий арсенал инструментов для автоматического и полуавтоматического объединения документов. О них и пойдёт речь ниже.
Ручное объединение документов
Самым очевидным и, увы, трудоёмким способом объединения документов является его ручное копирование. Теоретически для этого нужно не так уж много: открыть исходный текстовый файл, выделить всё его содержимое (CTRL+A), скопировать его (CTRL+C), а затем вставить в другой документ (CTRL+V).
Однако, такое успешно проходит лишь в тех случаях, если в исходном документе используется единое (и правильное!) форматирование. Чаще всего же приходится иметь дело с файлами, которые правились не одним поколением офисных работников, а иногда даже созданными программно посредством распознавания сканированных документов.
В этом случае при вставке скопированного текста мы можем получить что-то, вроде, этого:
Выходит реальная "каша". Особенно, если к ней "примешать" ещё различную ориентацию страниц и табличные данные. На правку подобной мешанины и уходит львиная доля времени при оформлении итоговых документов. Работает ручная вставка во всех текстовых процессорах. По точности переноса данных это наиболее оптимальный, но и максимально трудоёмкий способ, поскольку предполагает исключительно ручной труд...
Работа с объектами
Преимуществом современных текстовых процессоров является то, что они могут рассматривать документы как объекты. Это даёт нам возможность оперировать ими в их оригинальном виде без потери форматирования!
В современных версиях Microsoft Office Word во вкладке "Вставка" в группе "Текст" имеется выпадающий список "Объект". В нём есть два варианта добавления документа. Наиболее оптимальным является второй – "Текст из файла". Нажатие данного пункта откроет перед Вами Проводник и Вы сможете выбрать документ для вставки в его оригинальном виде:
Плюсом такой вставки является полное сохранение оригинального форматирования. Однако, эта функция нормально не работает в старых версиях Word (например в Microsoft Office 2003, который ещё используется на старых компьютерах).
Если же вместо "Текст из файла" в вышеупомянутом списке выбрать пункт "Объект", то у нас появится доступ к ещё одной интересной функции, которая, увы, от версии к версии так и осталась недоделанной... Речь идёт о связывании документов. В открывшемся окошке перейдём на вкладку "Создание из файла", выберем нужный документ и поставим галочку "Связь с файлом":
Подобная манипуляция позволяет вставить в наш документ фрейм, отображающий содержимое другого файла. При этом, если в исходный документ (который мы выбирали для вставки) будут вноситься какие-либо правки, все они будут отображаться и в нашем связанном документе!
Это теоретически могло бы очень упростить жизнь тем, кто постоянно имеет дело с несколькими копиями документов. Однако, на практике вставленный фрейм отображает лишь одну страницу документа... Поэтому данный способ подойдёт, разве что, для создания одностраничных бланков.
Что касается OpenOffice Writer, то здесь всё, практически, то же самое. Вставить оригинальный текст из файла можно через меню "Вставка", выбрав пункт "Файл" (для LibreOffice – пункт "Документ"):
Есть в OpenOffice и возможность вставки объекта из файла. Однако, если в Word фрейм со вставленным документом растягивается по размеру хотя бы страницы, то в Writer он вставляется в виде небольшой плашечки, которая при растяжении на весь лист растягивает и всё содержимое фрейма:
Программы для объединения документов
Объединить несколько текстовых документов в один можно и программно. Причём, сразу тремя способами: штатными средствами в виде макроса, при помощи онлайн-сервисов или специальных программ.
Способ 1. Макрос для объединения текстовых файлов в один документ
Если Вы хотели бы почувствовать себя немного программистом, то можете написать для автоматического объединения нужных документов в один специальный макрос. Для этого у Вас в Word должна быть активирована поддержка макросов, которая по умолчанию может быть отключена в целях безопасности.
Чтобы активировать работу макросов в новых версиях Microsoft Office (2007 и старше) пройдите по пути "Файл" – "Параметры" – "Центр управления безопасностью" – "Параметры центра управления безопасностью" – "Параметры макросов" и отметьте пункт "Включить все макросы", после чего перезагрузите Word. В версии 2003 (и более старых) в меню "Сервис" перейдите по пути "Макрос" – "Безопасность" – вкладка "Уровень безопасности" и укажите значение "Средняя".
Теперь нужно написать сам макрос. Для этого в новых версиях Word переходим на вкладку "Вид", нажимаем на кнопку "Макросы", в появившемся окошке в поле "Имя" пишем произвольное название для нашего будущего макроса (я написал "MergeDocs") и жмём "Создать":
Перед нами появится окно редактора кода на Visual Basic for Application (сокр. VBA). Именно на Вижуал Бэйсике мы и будем писать наш макрос. А выглядеть он будет максимально просто и понятно даже для людей несведущих в программировании:
Разберём весь код построчно. Sub MergeDocs() – объявление новой процедуры (макроса) с заданным именем. Далее следует перечисление нескольких переменных: первая из них – "path" указывает на папку, из которой мы будем брать файлы для объединения, а далее несколько номерных переменных "doc (1, 2, 3 и т.д.)" с именами объединяемых файлов.
Далее для каждого файла приписывается команда его вставки в открытый документ, а ниже добавляется разрыв страниц, чтобы новый документ начинался с нового раздела и не мешался с предыдущим. В принципе, можно было бы обойтись и вовсе без переменных, а прописывать полный путь и имя вставляемого файла прямо в атрибут "FileName:=". Но мне кажется, что более удобно просто поправить номер переменной в повторяющейся строке, чем каждый раз писать пути и имена.
Чтобы Вам не писать всё вручную, можете скопировать код ниже и вставить у себя в редактор макросов:
Sub MergeDocs()
path = ActiveDocument.path & "\" 'путь к папке (в данном случае к директории документа)
doc1 = "proekt_dozvil_orenda.doc" 'имена нужных файлов (может быть неограниченное количество)
doc2 = "proekt_osvitlennya.doc"
doc3 = "proekt_osvitlennya.doc"
Selection.InsertFile FileName:=path & doc1 'вставка содержимого файла в открытый документ
Selection.InsertNewPage 'добавление разрыва страниц во избежание смещений форматирования
Selection.InsertFile FileName:=path & doc2 'повторяем аналогичные конструкции для всех прописанных файлов
Selection.InsertNewPage
Selection.InsertFile FileName:=path & doc3
Selection.InsertNewPage
End Sub
Что касается OpenOffice Writer, то вышеприведённый макрос в нём работать, увы, не будет. Для него я нашёл другой более сложный макрос (оригинальные комментарии я перевёл на русский):
'''
''' Копируем содержимое из одного документа (файла) в другой.
''' Выделяем всё и копируем, создаём новый документ без имени и вставляем в него скопированное содержимое.
''' Копируется всё: изображения, таблицы, стили текста, встроенные объекты.
'''
Sub CopyContentToNewFile
dim c1, c2, newDoc, selectedContent, origPosition, origPositionTC
origDocument = ThisComponent
origDocument.lockControllers()
' сохраняем оригинальную позицию контроллеров иначе при выделении они теряются
origPosition = origDocument.CurrentController.getViewCursor()
origPositionTC = origDocument.getText.createTextCursorByRange(origPosition)
' выделяем весь оригинальный документ
c1 = origDocument.text.createTextCursor
c1.gotoStart(false)
c1.gotoEnd(true)
' копируем выделенное из оригинального документа
origDocument.CurrentController.select(c1) ' выделяем содержимое документа от начала до конца; здесь курсор отвечает за весь диапазон документа, всё выделенное содержимое
selectedContent = origDocument.CurrentController.getTransferable() ' копируем содержимое для дальнейшего использования
' создаём пустой документ
newDoc = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Array()) 'Открываем пустой документ в Writer
' вставляем скопированное в новый документ в позицию курсора
c2 = newDoc.text.createTextCursor
c2.gotoStart(false)
newDoc.CurrentController.select(c2) ' устанавливаем позицию вставки, представленную курсором C2, в новом файле в позиции Start; здесь курсор уже отображает позицию, а не целую область
newDoc.CurrentController.insertTransferable(selectedContent)
' снимаем текущее выделение; выделение было видимым и включало в себя весь документ
' возвращаем курсор в оригинальную позицию; и выделение к оригинальному, если что-то было выделено до запуска макроса
origDocument.CurrentController.select(origPositionTC)
' устанавливаем курсор на начало документа
' это не особо важно, просто так поведение макроса выглядит более интеллектуально
newDoc.currentController.viewCursor.gotoStart(false)
origDocument.unlockControllers()
End Sub
Как видим, здесь всё построено на автоматическом копировании содержимого всего документа и вставке его в новый файл. По сути, мы имеем дело с обычным "копипастом", но автоматизированным. Возможно, кому-то и пригодится.
Чтобы это макрос "подружить" с OpenOffice, откройте в Writer меню "Сервис", выберите пункт "Макросы" – "Управление макросами" – "OpenOffice Basic", введите в поле "Имя макроса" название "CopyContentToNewFile" и нажмите кнопку "Создать":
Как и в случае с Word, откроется встроенный редактор макросов, в который нужно поместить код (сохраняем и используем):
Способ 2. Объединение документов онлайн
Аналогичные действия по объединению документов можно выполнить и при помощи различных онлайн-сервисов. К сожалению, работающих решений для файлов формата ODT я не нашёл (их можно предварительно конвертировать в DOC), но для объединения документов Microsoft Office Word решений достаточно. Одним из таких является DocSoSo:
Именно этот сервис я выбрало по тому, что он не имеет ограничений на количество файлов для объединения и корректно объединяет документы с меняющейся ориентацией страниц. Да и работать с ним очень легко. Жмём кнопку "Select files" (удерживая CTRL, можно выбрать несколько файлов), а после появления списка нажимаем кнопку "Merge Word". Ниже получаем две ссылки на просмотр и на загрузку готового документа.
Способ 3. Программы для объединения документов
Наконец, объединить несколько документов в один можно при помощи специальных программ. Что интересно, большинство из них являются платными... Поэтому пришлось поискать, чтобы найти на одном из форумов самодельную бесплатную утилитку, которую выложил сам автор. Называется она незамысловато – "FileMerger" или "Файлообъединялка" и позволяет объединять в один документ неограниченное количество DOC-файлов:
Всё, что требуется сделать в ней – "Добавить" нужные файлы, выделить их и нажать кнопку "Объединить". Скорее всего, программа реализует собой тоже какой-то макрос, поскольку откроется новый пустой документ и в него автоматически начнёт вставляться содержимое выбранных файлов.
Для OpenOffice Writer же подобных простых бесплатных программ мне, увы, не попалось... Нам снова предлагается стать немного программистами и воспользоваться, например, утилитой OOoPy. Данная утилита предоставляет множество полезных функций, однако, работает только в консоли Linux. Поэтому, к сожалению, опробовать её в деле я не смог...
Связывание документов
Всё это время мы рассматривали возможности обычного объединения документов. Однако, часто возникает необходимость не просто скопировать содержимое файла, но и сделать так, чтобы в будущем все копии файла можно было править централизованно, а не по отдельности каждую. Такая вещь называется связыванием.
Как толком организовать связывание документов в OpenOffice Writer я, увы, так и не разобрался. Однако, для Microsoft Office Word есть довольно простой способ сделать это. Оказывается, чтобы вставить связанный текст из одного документа в другой достаточно воспользоваться функцией "Специальная вставка", которая находится в выпадающем списке "Вставить" на вкладке "Главная" (в Word 2003 и младше – меню "Правка"):
В открывшемся окошке переключаемся в режим "Связать", выбираем способ вставки (если нужно сохранить стили – "Текст в формате RTF" или "Формат HTML", если только чистый текст – "Неформатированный текст") и жмём "Ok". Связанный фрагмент отобразится в документе и, если установить курсор на нём, будет подсвечен серым.
А теперь – самое главное! Изменять вставленный фрагмент нужно не в месте вставки, а в оригинальном исходном файле. При этом при повторном открытии файла со связанным фрагментом перед нами отобразится окошко, предлагающее обновить данные:
Что характерно, аналогичным образом можно связывать данные не только между документами Word, но и вставлять в текстовый файл связи с конкретными ячейками электронных таблиц Excel! Это очень удобно, например, для построения красивых таблиц и отчётов, в которых постоянно меняются цифры. Просто скопируйте нужную ячейку Excel в ячейку таблицы Word через "Специальную вставку" и обновляйте связи при необходимости.
Кстати, сами связи можно просматривать и изменять или удалять. Для этого нужно либо вызвать контекстное меню вставленного фрагмента, выбрать список "Связанный объект Document" и нажать пункт "Связи", либо перейти во вкладку "Файл" – "Сведения" и внизу нажать ссылку "Изменить связи с файлами" (в Word 2003 – пункт "Связи" в меню "Правка"):
Заключение
Возможности современных офисных пакетов во много раз превосходят потребности рядовых пользователей. Выше мы рассмотрели найденные (или не найденные) лично мной способы объединения документов в Microsoft Office Word и OpenOffice Writer. Однако, вполне допускаю, что существуют и другие возможности, которые за мои почти недельные поиски мне не попались.
Поэтому, если Вы знаете как ещё можно связать или объединить текстовые файлы – смело пишите о них в комментариях. Соберём вместе наиболее полную базу советов :)
P.S. Разрешается свободно копировать и цитировать данную статью при условии указания открытой активной ссылки на источник и сохранения авторства Руслана Тертышного.