Есть ли способ мб через макросы, сделать так, чтобы по?...

Автор ForumOOo (бот), 30 августа 2019, 05:48

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

ForumOOo (бот)

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

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

--
Подпись: els

rami

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

elss

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

rami

Макрос вставляет новый лист в конце документа и копирует в него содержимое из 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

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

rami

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

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

elss

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

elss

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

rami

Ну, нет, так нет. ;D
Вот смотрите:
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

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

rami

Цитата: Bigor от 31 августа 2019, 13:33
Он хочет на 10 листах ячейки проверять :)
Может быть, ... а может и не быть. Это, значит, в документе 10 листов, на каждом листе одна или несколько ячеек которые нужно проверить? Ну, так перебрать все ячейки на всех листах по вышеуказанному образцу.

elss

Нет, проверить только ячейки первого листа на ключевые слова.