05.05.2025
Автоматизация заполнения реквизитов в документах OpenOffice Writer
Проблема ручного заполнения анкет
Для компаний, активно участвующих в тендерах и закупках, процесс заполнения реквизитов в документах заказчиков становится настоящим испытанием:
- Каждый заказчик предоставляет свой уникальный шаблон;
- Требуется многократно вводить одни и те же реквизиты;
- Высокий риск ошибок при ручном вводе;
- Значительные временные затраты.
Наше решение
Как компания, специализирующаяся на разработке программного обеспечения, мы создали простое, но эффективное решение для автоматизации этого процесса с помощью макроса для OpenOffice Writer.
Техническое задание (ТЗ) для макроса OpenOffice Writer
1. Назначение
Макрос предназначен для автоматического добавления реквизитов компании к определенным текстовым фрагментам в документе OpenOffice Writer.
2. Требования к функционалу
- Поиск и добавление текста:
- Поиск заданных фраз в документе (без учета регистра);
- Добавление соответствующего текста после найденных фраз;
- Добавление должно выполняться только один раз для каждой строки/абзаца.
- Условия поиска:
- Искомый текст должен находиться в начале строки/абзаца;
- Поиск должен быть регистронезависимым.
- Обработка документа:
- Каждая строка/абзац должна обрабатываться только один раз;
- При обнаружении совпадения по одному из условий, другие условия для этой строки не проверяются.
3. Список замен
| Искомый текст | Добавляемый текст |
|---|---|
| "Полное наименование с указанием организационно-правовой формы" | "Общество с ограниченной ответственностью «БиномТех»" |
| "Наименование" | "Общество с ограниченной ответственностью «БиномТех»" |
| "Контрагент" | "Общество с ограниченной ответственностью «БиномТех»" |
| "ОГРН/ОГРНИП" | "1156658070975" |
| "ОГРН" | "1156658070975" |
| "ИНН" | "6671023261" |
| "Телефон" | "83433824436 84952466088" |
4. Особые условия
- Добавление текста должно происходить:
- Только если искомый текст находится в самом начале строки/абзаца;
- Только один раз для каждой строки/абзаца;
- В конец строки/абзаца (а не непосредственно после найденного текста).
- Макрос не должен:
- Добавлять текст повторно в уже обработанные строки;
- Обрабатывать строки, где искомый текст находится в середине или конце.
5. Требования к реализации
- Использование стандартного API OpenOffice;
- Поддержка OpenOffice Writer;
- Обработка всего документа;
- Учет возможных ошибок при выполнении.
6. Примеры работы
Корректное срабатывание:
Было: "ОГРН/ОГРНИП _____"
Стало: "ОГРН/ОГРНИП _____ 1156658070975"
Некорректное срабатывание (не должно происходить):
Было: "Приложение № 3 к Регламенту..."
Стало: Без изменений (текст не в начале строки)
Недопустимое поведение:
Было: "ОГРН/ОГРНИП _____"
Стало: "ОГРН/ОГРНИП _____ 1156658070975 1156658070975" (повторное добавление)
7. Дополнительные требования
- Возможность простого добавления новых пар "искомый текст → добавляемый текст" без изменения кода;
- Информационное сообщение по завершении работы;
- Устойчивость к ошибкам (не должно быть "падений" макроса).
8. Ожидаемый результат
Макрос, который:
- Находит все вхождения заданных фраз в начале строк/абзацев;
- Добавляет соответствующий текст в конец этих строк/абзацев;
- Гарантирует однократную обработку каждой строки;
- Корректно работает с документами любого объема;
- Прост в поддержке и расширении.
Как использовать макрос
1. Подготовка
- Убедитесь, что у вас установлен OpenOffice или LibreOffice;
- Откройте документ с анкетой заказчика в Writer.
2. Установка макроса
- Нажмите Alt + F11 чтобы открыть редактор макросов;
- В дереве слева выберите "Мои макросы" > "Standard" > "Module1";
- Вставьте код макроса (приведен ниже);
- Сохраните изменения.
3. Запуск макроса
- В открытом документе перейдите в меню Инструменты > Макросы > Выполнить макрос...;
- Выберите созданный макрос AppendCompanyInfoStrict;
- Нажмите "Выполнить".
4. Результат
- Макрос автоматически найдет все указанные реквизиты в начале строк;
- Добавит соответствующие значения в конец этих строк;
- Покажет сообщение об успешном завершении.
Код макроса
Sub AppendCompanyInfoStrict()
Dim oDoc As Object, oSearch As Object, oFound As Object
Dim aSearchPairs() As String
Dim i As Integer, aPair() As String
' Все пары поиска-добавления в одной строке
Dim sPairs As String
sPairs = "Полное наименование с указанием организационно-правовой формы|Общество с ограниченной ответственностью «БиномТех»;"
sPairs = sPairs & "Наименование|Общество с ограниченной ответственностью «БиномТех»;"
sPairs = sPairs & "Контрагент|Общество с ограниченной ответственностью «БиномТех»;"
sPairs = sPairs & "ОГРН/ОГРНИП|1156658070975;"
sPairs = sPairs & "ОГРН|1156658070975;"
sPairs = sPairs & "ИНН|6671023261;"
sPairs = sPairs & "Телефон|83433824436 84952466088"
' Разбиваем строку на массив
aSearchPairs = Split(sPairs, ";")
oDoc = ThisComponent
oSearch = oDoc.createSearchDescriptor()
oSearch.SearchCaseSensitive = False
' Создаем коллекцию для хранения обработанных абзацев
Dim aProcessedParagraphs As Object
Set aProcessedParagraphs = CreateObject("Scripting.Dictionary")
' Получаем все текстовые элементы документа
Dim oTextElements As Object, oElement As Object
oTextElements = oDoc.getText().createEnumeration()
While oTextElements.hasMoreElements()
Set oElement = oTextElements.nextElement()
' Работаем только с абзацами
If oElement.supportsService("com.sun.star.text.Paragraph") Then
Dim oText As Object, oCursor As Object
Dim sParaText As String
oText = oElement.getText()
Set oCursor = oText.createTextCursorByRange(oElement)
sParaText = oCursor.getString()
' Пропускаем уже обработанные абзацы
If Not aProcessedParagraphs.Exists(sParaText) Then
' Проверяем каждый поисковый шаблон
For i = 0 To UBound(aSearchPairs)
aPair = Split(aSearchPairs(i), "|")
If UBound(aPair) = 1 Then
Dim sSearch As String, sAdd As String
sSearch = Trim(aPair(0))
sAdd = Trim(aPair(1))
' Проверяем, начинается ли абзац с искомого текста
If StrComp(Left(sParaText, Len(sSearch)), sSearch, vbTextCompare) = 0 Then
' Добавляем текст в конец абзаца
oCursor.gotoEndOfParagraph(False)
oCursor.String = " " & sAdd
' Помечаем абзац как обработанный
aProcessedParagraphs.Add oCursor.getString(), True
Exit For ' Прекращаем проверку других шаблонов
End If
End If
Next i
End If
End If
Wend
MsgBox "Данные успешно добавлены!", 0, "Готово"
End Sub
Преимущества нашего решения
- Экономия времени - обработка документа за секунды;
- Точность - исключение человеческих ошибок;
- Гибкость - легко добавлять новые реквизиты;
- Универсальность - работает с любыми шаблонами заказчиков;
- Бесплатность - используем стандартные средства OpenOffice.
Как мы создавали решение
С помощью чата с искусственным интеллектом мы:
- Сформулировали задачу;
- Получили первоначальную версию кода;
- Постепенно уточняли требования;
- Исправляли возникающие ошибки;
- Оптимизировали работу макроса.
Весь процесс занял значительно меньше времени, чем самостоятельная разработка "с нуля".
Дальнейшее развитие
Вы можете:
- Добавлять новые пары реквизитов в макрос;
- Адаптировать его под свои нужды;
- Создавать специализированные версии для разных типов документов.
Это решение - пример того, как даже сложные рутинные задачи можно эффективно автоматизировать с помощью современных инструментов и искусственного интеллекта.
Оставить заявку на разработку макроса можно на форме обратной связи.

