Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

20 Июнь 2018, 21:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Как обратиться к другому файлу?  (Прочитано 915 раз)
0 Пользователей и 1 Гость смотрят эту тему.
OOKapitan
Старожил
****
Offline Offline

Сообщений: 312


« Стартовое сообщение: 6 Март 2018, 15:36 »

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

Пол: Мужской
Сообщений: 274


« Ответ #1: 6 Март 2018, 15:47 »

Найди свою тему про печать файлов из папки и посмотри, там макрос открывает второй файл и печатает его.
Записан
OOKapitan
Старожил
****
Offline Offline

Сообщений: 312


« Ответ #2: 6 Март 2018, 15:54 »

Найди свою тему про печать файлов из папки и посмотри
Вот я растяпа. И ведь крутилась в голове мысль, что где-то я с этим уже сталкивался. Но увы, вспомнить я так и не смог. Большущее спасибо.
Записан
OOKapitan
Старожил
****
Offline Offline

Сообщений: 312


« Ответ #3: 7 Март 2018, 14:10 »

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

Пол: Мужской
Сообщений: 274


« Ответ #4: 7 Март 2018, 14:27 »

если файл один нужна только последняя строчка, вместо fname - convertToURL(полный путь к файлу)
Записан
OOKapitan
Старожил
****
Offline Offline

Сообщений: 312


« Ответ #5: 7 Март 2018, 15:03 »

если файл один нужна только последняя строчка
Ясно. Огромнейшее спасибо.
Записан
OOKapitan
Старожил
****
Offline Offline

Сообщений: 312


« Ответ #6: 7 Март 2018, 16:20 »

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

Пол: Мужской
Сообщений: 274


« Ответ #7: 7 Март 2018, 16:36 »

в кавычках надо и имя файла тоже указать
Записан
OOKapitan
Старожил
****
Offline Offline

Сообщений: 312


« Ответ #8: 12 Март 2018, 10:23 »

     Простите, что долго не отвечал - праздники же были.
     В общем вот код:
Код:
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
Старожил
****
Offline Offline

Пол: Мужской
Сообщений: 274


« Ответ #9: 12 Март 2018, 10:28 »

во первых как ругается? во вторых надо oProps() указать, не все скопировал с примера
Записан
OOKapitan
Старожил
****
Offline Offline

Сообщений: 312


« Ответ #10: 12 Март 2018, 10:47 »

во вторых надо oProps() указать, не все скопировал с примера
Так на отсутствие oProps(), видимо, и ругался. Когда я его вставил - всё заработало. Большущее спасибо. Просто огромнейшее спасибо. Благодаря Вам всем я наконец-то дописал свой макрос.
Записан
tagezi
Ветеран
*****
Offline Offline

Пол: Мужской
Расположение: Finland
Сообщений: 792



WWW
« Ответ #11: 12 Март 2018, 10:54 »

Благодаря Вам всем я наконец-то дописал свой макрос.
Я бы не назвал его дописанным. Скорее всего, следует сказать, что ЭТО завилось.

UDP: Там большое количество мест, в который следует сократить код (объединить IFы, использовать Elseif, вынести Else за рамки проверок, вынести повторяющиеся куски в отдельные функции и/или подмодули). Хотя бы по тому, что проще будет читать и видеть логику, а значит и поддерживать.
« Последнее редактирование: 12 Март 2018, 11:08 от tagezi » Записан

(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha
OOKapitan
Старожил
****
Offline Offline

Сообщений: 312


« Ответ #12: 12 Март 2018, 11:07 »

Я бы не назвал его дописанным
По какой причине? Что тут не так?
Записан
tagezi
Ветеран
*****
Offline Offline

Пол: Мужской
Расположение: Finland
Сообщений: 792



WWW
« Ответ #13: 12 Март 2018, 11:09 »

Я бы не назвал его дописанным
По какой причине? Что тут не так?
Обновил пост, простите.
Записан

(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha
OOKapitan
Старожил
****
Offline Offline

Сообщений: 312


« Ответ #14: 12 Март 2018, 11:27 »

использовать Elseif
Пробовал - мой OpenOfficeOrg Сalc версии 3.3. По остальному - как сократить? Моих знаний для этого явно недостаточно. Помогите, пожалуйста.
Записан
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!