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

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

19 Октябрь 2019, 10:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Есть ли способ мб через макросы, сделать так, чтобы по?...  (Прочитано 858 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ForumOOo (бот)

Offline Offline

Сообщений: 703


« Стартовое сообщение: 30 Август 2019, 05:48 »

Компонент: Calc
Версия продукта: 4.x
Сборка:
ОС: Windows 7

Есть ли способ мб через макросы,
сделать так, чтобы после ввода в
ячейки определенных слов, в новые
листы бы загружались документы
привязанные к этим словам?

--
Подпись: els
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #1: 30 Август 2019, 07:39 »

Можно, смотря какие документы. Опишите задачу подробней.
Записан

elss
Участник
**
Offline Offline

Сообщений: 5


« Ответ #2: 30 Август 2019, 08:07 »

Обычные csv файлы. Нужно, чтобы они добавлялись в новые листы после ввода определенных слов.
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #3: 30 Август 2019, 09:34 »

Макрос вставляет новый лист в конце документа и копирует в него содержимое из CSV документа (нужно написать в макросе ваш путь к файлу):
Код:
Sub ImportList                                 'импорт всего CSV документа в новый лист
Dim oSheets, sURL$, sFilterName$, sFilterOptions$, oMode
oSheets = ThisComponent.Sheets                 'все листы документа
sName = "Лист" & oSheets.Count + 1             'название нового листа
oSheets.insertNewByName(sName, oSheets.Count)  'вставляем лист в конце
sURL = "file:///путь/к/файлу.csv"              'заменить на нужный адрес
sFilterName = "Text - txt - csv (StarCalc)"
sFilterOptions = "59,34,0,1"                   'если разделитель запятая, заменить 59 на 44
'копируем данные в новый лист
oMode = com.sun.star.sheet.SheetLinkMode.NORMAL
oSheets.getByName(sName).link(sURL, "", sFilterName, sFilterOptions, oMode)
oSheets.getByName(sName).setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
End Sub
Записан

elss
Участник
**
Offline Offline

Сообщений: 5


« Ответ #4: 30 Август 2019, 17:49 »

Спасибо болшое. А как привязать к этим вставкам определенные слова? Мне нужно, чтобы, например, когда я пишу в ячейке "январь", то добавлялся бы лист с файлом "январь.csv".
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #5: 30 Август 2019, 19:19 »

В какой ячейке? А если напишете с ошибкой или с большой буквы вместо маленькой? А если какое-нибудь другое слово? А через год будет новый январь или январей больше не будет?

Есть ещё много подобных вопросов, все эти случаи нужно предусмотреть. Я думаю, что раз в месяц будет быстрей открыть файл CSV, скопировать данные и вставить в новый лист.
Записан

elss
Участник
**
Offline Offline

Сообщений: 5


« Ответ #6: 31 Август 2019, 04:31 »

Так месяца это только для примера. В моем случае таких файлов сотни и в одном документе должно быть до 10 листов.
Записан
elss
Участник
**
Offline Offline

Сообщений: 5


« Ответ #7: 31 Август 2019, 04:35 »

Файлы должны быть прикреплены строго к конкретным словам. Должно быть что-то вроде того, что при запуске макроса проверяются ячейки листа начиная с первого до, скажем  десятого, затем при совпадении слов с файлами, добавляются эти файлы, если нет, то нет.
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #8: 31 Август 2019, 10:28 »

Ну, нет, так нет. Смеющийся
Вот смотрите:
Код:
Sub ImportList1                                   'импорт всего CSV документа в новый лист
Dim oSheets, dirURL$, sFilterName$, sFilterOptions$, oMode, dat, i%, fileName$, fileURL$

dirURL = "file:///путь/к/папке/"                 'заменить на нужный адрес до папки содержащей файлы
sFilterName = "Text - txt - csv (StarCalc)"
sFilterOptions = "59,34,0,1"                     'если разделитель запятая, заменить 59 на 44
oMode = com.sun.star.sheet.SheetLinkMode.NORMAL

oSheets = ThisComponent.Sheets                   'все листы документа
dat = oSheets.getByIndex(0).getCellRangeByName("A1:A10").DataArray
For i=0 To UBound(dat)
If fileExists(dirURL & dat(i)(0) & ".csv") Then  'проверка, существует ли треубемый файл
fileName = dat(i)(0)
fileURL = dirURL & fileName & ".csv"
If Not oSheets.hasbyName(fileName) Then
oSheets.insertNewByName(fileName, oSheets.Count)   'вставляем лист в конце
'копируем данные в новый лист
oSheets.getByName(fileName).link(fileURL, "", sFilterName, sFilterOptions, oMode)
oSheets.getByName(fileName).setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
End If
End If
Next
End Sub
Записан

Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #9: 31 Август 2019, 13:33 »

Он хочет на 10 листах ячейки проверять Улыбка
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #10: 31 Август 2019, 14:44 »

Он хочет на 10 листах ячейки проверять Улыбка
Может быть, ... а может и не быть. Это, значит, в документе 10 листов, на каждом листе одна или несколько ячеек которые нужно проверить? Ну, так перебрать все ячейки на всех листах по вышеуказанному образцу.
Записан

elss
Участник
**
Offline Offline

Сообщений: 5


« Ответ #11: 31 Август 2019, 17:54 »

Нет, проверить только ячейки первого листа на ключевые слова.
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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