вторник, 2 июня 2015 г.

Автоматическое открытие следующего файла

Ранее мы рассмотрели функцию AddFile которая предназначена для открытия файлов для последующей вставки в них данных из предыдущего файла посредством вызова окна выбора файла. Данная реализация не очень удобна, т.к. такие обработки часто приводят к ошибкам - когда из-за подвисания новый файл еще не открылся, а код предназначенный для него начал выполняться в старом файле.
Что избежать таких ошибок лучше использовать автоматическое открытие новых файлов через непосредственный запрос к нему. Здесь важно чтобы второй файл сохранялся в ту же папку что и первоначальный и имел строго то имя, которое заданно в коде программы.

Напомним. что стандартная реализация с окном выбора обычно состоит из след. строк:

'Скопировали нужное содержимое первого документа
Coping
'Вызываем функцию открытия файла
AddFile ()
'Включаем функцию ожидания
For i = 1 To 3000000 : Next
.......
' Последующий код обработки

В случае автоматической обработки оператор AddFile отсутствует, также отсутствует строка ожидания. Вместо них вызывают одной строчкой написанный макрос открытия файла.
Рассмотрим код такого макроса:

Sub Open_RD_MX
'Определяем переменные документа и диспетчера (стандартно)
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
 If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
    GlobalScope.BasicLibraries.LoadLibrary("Tools")
  End If
  oDoc = ThisComponent
 sDocURL = oDoc.getURL()
'Указываем что искомая папка, где искать второй файл - это папка где находится текущий открытый файл
Puti = DirectoryNameoutofPath(sDocURL,"/")
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
'указываем путь к файлу, содержащий путь папки и конкретное имя файла, который нужно открыть
args1(0).Value = Puti & "/Реестр документов ГМ.xls"
'Вызываем сам обработчик открытия
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Open", "", 0, args1())

End sub

Задача: Переделайте макрос из поста "Обработка нескольких файлов", добавив в модуль обработки макрос Open_RD_MX и заменив в коде главного макроса строки:

AddFile ()
For i = 1 To 3000000 : Next

На:

Open_RD_MX

Оставив весь остальной код без изменений.


Комментариев нет:

Отправить комментарий