Как обратиться к другому файлу?

Автор OOKapitan, 6 марта 2018, 15:36

0 Пользователи и 1 гость просматривают эту тему.

OOKapitan

     Здравствуйте.
     Помогите, пожалуйста.
     Есть файл. В него я хочу поместить макрос, который будет искать определённое значение из ячеек первого листа этого файла в другом файле. Однако я совершенно не представляю как. Ну понятно, что надо так (одна строка из макроса):
oDocument =. Но что ставить после "="? Подскажите, пожалуйста.

bigor

Найди свою тему про печать файлов из папки и посмотри, там макрос открывает второй файл и печатает его.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от  6 марта 2018, 13:47Найди свою тему про печать файлов из папки и посмотри
Вот я растяпа. И ведь крутилась в голове мысль, что где-то я с этим уже сталкивался. Но увы, вспомнить я так и не смог. Большущее спасибо.

OOKapitan

     Скопировал из макроса про печать файлов кусок для открытия второго файла:
  fold=convertToURL(replace(convertFromURL(doc.URL),doc.Title,""))
fName=Dir(fold & "2018.ods",0) 'ищем только с указанным расширением
oDoc1=StarDesktop.LoadComponentFromUrl(fName, "_blank", 0, oProps())

Однако этот кусок выдаёт ошибку. Как правильно его записать? Файл только один с именем 2018.ods Помогите, пожалуйста.

bigor

если файл один нужна только последняя строчка, вместо fname - convertToURL(полный путь к файлу)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от  7 марта 2018, 12:27если файл один нужна только последняя строчка
Ясно. Огромнейшее спасибо.

OOKapitan

    Записал сейчас полный путь к файлу:
   oDoc1=StarDesktop.LoadComponentFromUrl(convertToURL(C:\Users\Юзер\Documents\Реестры\Именованные\2018), "_blank", 0, oProps()) - ругается на первый слэш после C: . Как исправить? Помогите, пожалуйста.

bigor

в кавычках надо и имя файла тоже указать
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

     Простите, что долго не отвечал - праздники же были.
     В общем вот код:
Sub Proverka_documentov
Dim desc, oFind, desk1, oFind1 ,s, s1, a, r, k, r1, k1, b, c, d, e, FindFlag, FindFlag1
a=InputBox("Введите параметр для поиска", "Параметры поиска")
If a="" Then Exit Sub
oSheet=ThisComponent.CurrentController.ActiveSheet
desc=oSheet.createSearchDescriptor()
desc.SearchRegularExpression=false
desc.SearchString=a   'Что найти
desc.SearchWords=false      'Ячейку целиком
oFind=oSheet.findAll(desc)
oDoc1=StarDesktop.LoadComponentFromUrl(convertToURL("C:\Users\Всеволод Апрелев\Documents\Реестры\Именованные\2018.ods"), "_blank", 0, oProps())
FindFlag1=0
For j=0 To oFind.count-1
If Not IsNull(oFind) Then
   FindFlag1=1
   s=oFind.RangeAddresses(j)
   r=s.StartRow
   k=s.StartColumn
   If oSheet.getCellByPosition (k+9, r).String<>1 Then
      If MsgBox ("Проверить наличие оригинала?", 4, "Параметры проверки")=6 Then
         FindFlag=0
         For i=1 To 5
         oSheet1 = oDoc1.Sheets(i)
         desc1=oSheet1.createSearchDescriptor()
         desc1.SearchRegularExpression=false
         desc1.SearchString=a   'Что найти
         desc1.SearchWords=true      'Ячейку целиком
         oFind1=oSheet1.findAll(desc1)
         If Not IsNull(oFind1) Then
            FindFlag=1
            s1=oFind1.RangeAddresses(0)
            r1=s1.StartRow
            k1=s1.StartColumn
               If oSheet1.getCellByPosition (k1+5, r1).String="Восстановлен" Then
                  oSheet.getCellByPosition (k+9, r).String=1
                  oSheet.getCellByPosition (k+10, r).String="-"
                  GoTo SLEDUISCHIY
               Else
                  If MsgBox(oSheet.getCellByPosition (k+10, r).String & " ", 4, "Проверьте комментарий!")=7 Then
                     If oSheet1.getCellByPosition (k1+5, r1).String="" Then
                        If MsgBox("Ввести комментарий?", 4, "Комментарий к отсутствующим документам")=6 Then
                        Komment:
                        e=InputBox("Введите комментарий", "Комментарий к отсутствующим документам")
                           If e="" Then
                              If MsgBox ("Вы уверены?", 4, "Не вводить комментарий?")=7 Then
                                 GoTo Komment
                              Else
                                 GoTo SLEDUISCHIY
                              End If
                           End If
                           oSheet.getCellByPosition (k+10, r).String=e
                        Else
                           GoTo SLEDUISCHIY
                        End If
                     Else   
                        If j=0 Then
                           VSTAVKA:
                           Print oSheet1.getCellByPosition (k1+5, r1).String & " "
                           Komment1:
                           e=InputBox("Введите комментарий", "Комментарий к отсутствующим документам")
                           If e="" Then
                              If MsgBox ("Вы уверены?", 4, "Не вводить комментарий?")=6 Then
                                 GoTo SLEDUISCHIY
                              Else
                                 GoTo Komment1
                              End If
                           End If
                           oSheet.getCellByPosition (k+10, r).String=e 
                        Else
                           If j=1 Then
                              If MsgBox ("Вставить автоматически предыдущий комментарий?", 4, "Продолжить автоматически?")=6 Then
                                 oSheet.getCellByPosition (k+10, r).String=e
                              Else
                                 GoTo VSTAVKA
                              End If
                           Else
                              oSheet.getCellByPosition (k+10, r).String=e
                           End If
                        End If
                     End If
                  End If
               End If
          End If
          next i
          If FindFlag=0 Then
             If j=0 Then
                Komment2:
                e=InputBox("Введите комментарий", "Комментарий к отсутствующим документам")
                If e="" Then
                   If MsgBox ("Вы уверены?", 4, "Не вводить комментарий?")=6 Then
                      GoTo SLEDUISCHIY
                   Else
                      GoTo Komment2
                   End If
                End If
                oSheet.getCellByPosition (k+10, r).String=e
             Else
                If j=1 Then
                   If MsgBox ("Вставить автоматически предыдущий комментарий?", 4, "Продолжить автоматически?")=6 Then
                      oSheet.getCellByPosition (k+10, r).String=e
                   Else
                      GoTo Komment2
                   End If
                Else
                   oSheet.getCellByPosition (k+10, r).String=e
                End If
             End If
          End If
      Else
          If MsgBox(oSheet.getCellByPosition (k+10, r).String & " ", 4, "Проверьте комментарий!")=7 Then
             If j=0 Then
                Komment3:
                e=InputBox("Введите комментарий", "Комментарий к отсутствующим документам")
                If e="" Then
                   If MsgBox ("Вы уверены?", 4, "Не вводить комментарий?")=6 Then
                      GoTo SLEDUISCHIY
                   Else
                      GoTo Komment3
                   End If
                End If
             Else
                If j=1 Then
                   If MsgBox ("Вставить автоматически предыдущий комментарий?", 4, "Продолжить автоматически?")=6 Then
                      oSheet.getCellByPosition (k+10, r).String=e
                   Else
                      GoTo Komment2
                   End If
                Else
                   oSheet.getCellByPosition (k+10, r).String=e
                End If
             End If
          End If
      End If
   End If
End If
SLEDUISCHIY:
Next j
If FindFlag1=0 Then
Print "Документ не найден"
End If
End Sub

Кавычки поставил - теперь ругается на всю строку:
oDoc1=StarDesktop.LoadComponentFromUrl(convertToURL("C:\Users\Всеволод Апрелев\Documents\Реестры\Именованные\2018.ods"), "_blank", 0, .
Как исправить? Помогите, пожалуйста.

bigor

во первых как ругается? во вторых надо oProps() указать, не все скопировал с примера
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от 12 марта 2018, 08:28во вторых надо oProps() указать, не все скопировал с примера
Так на отсутствие oProps(), видимо, и ругался. Когда я его вставил - всё заработало. Большущее спасибо. Просто огромнейшее спасибо. Благодаря Вам всем я наконец-то дописал свой макрос.

tagezi

#11
Цитата: OOKapitan от 12 марта 2018, 07:47Благодаря Вам всем я наконец-то дописал свой макрос.
Я бы не назвал его дописанным. Скорее всего, следует сказать, что ЭТО завилось.

UDP: Там большое количество мест, в который следует сократить код (объединить IFы, использовать Elseif, вынести Else за рамки проверок, вынести повторяющиеся куски в отдельные функции и/или подмодули). Хотя бы по тому, что проще будет читать и видеть логику, а значит и поддерживать.
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

OOKapitan

Цитата: tagezi от 12 марта 2018, 08:54Я бы не назвал его дописанным
По какой причине? Что тут не так?

tagezi

Цитата: OOKapitan от 12 марта 2018, 11:07
Цитата: tagezi от 12 марта 2018, 08:54Я бы не назвал его дописанным
По какой причине? Что тут не так?
Обновил пост, простите.
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

OOKapitan

Цитата: tagezi от 12 марта 2018, 08:54использовать Elseif
Пробовал - мой OpenOfficeOrg Сalc версии 3.3. По остальному - как сократить? Моих знаний для этого явно недостаточно. Помогите, пожалуйста.