Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
1
OpenOffice/LibreOffice

Сделать из листов книгу

10.09.2019, 17:56. Показов 3742. Ответов 27

Author24 — интернет-сервис помощи студентам
Всем привет !
Нужна ваша помощь. Уже много дней ищу в нэте скрипт на Libre office calc , перелазил много форумов, был на официальном сайте пакета и т.п.
Написать скрипт не получается , так как знаю только основы языка питона , а VBS вообще не понимаю .
Нужен скрипт ;
У меня есть папка с логами , там много документов формата .txt
Мне нужно чтоб скрипт , из этих всех файлов сделал один файл формата .xlsx (тоесть как я сам понял , из листов сделал одну книгу )
Заранее спасибо за помощь !!))
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2019, 17:56
Ответы с готовыми решениями:

Копирование листов в текущую книгу
Всем доброго дня. Возникла необходимость копирования целых листов из других книг Excel в...

Создать книгу из листов другой книги.
Простите если тема была не однократно поглядел не понял что к чему. (чайнег так случилось) ...

Макрос на соединение значений из листов в книгу
Добрый день уважаемые форумчане. Прошу помочь в одном вопросе. Уже замаялся самостоятельно пытаться...

Экспорт конкретных значенией с множеством листов в отдельную книгу
Добрый день!Имеется множество файлов из которых необходимо экспортировать одно значение "Итого с...

27
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
11.09.2019, 09:43 2
Добрый день!
Можно попробовать следующее
функцией получить массив названий файлов, из них создаем листы
Функция

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Public Function FileDialog_(ByVal Path As String, _
                            Optional MultiSelect As Boolean = True, _
                            Optional Expansion As String = "*.xlsm;*.xlsb;*.xlsx") As Variant
 
    Dim oFd    As FileDialog
    Dim s()    As Variant
    Dim lf     As Long
 
    Set oFd = Application.FileDialog(msoFileDialogFilePicker)
    With oFd     'используем короткое обращение к объекту
        .AllowMultiSelect = MultiSelect
        .Title = "Выбрать файлы:"     'заголовок окна диалога
        .Filters.Clear     'очищаем установленные ранее типы файлов
        .Filters.Add "Microsoft Excel Files", Expansion, 1     'устанавливаем возможность выбора только файлов Excel
        .InitialFileName = Path     'назначаем папку отображения и имя файла по умолчанию
        .InitialView = msoFileDialogViewDetails     'вид диалогового окна(доступно 9 вариантов)
        If .Show = 0 Then
            Call MsgBox("Не выбрано ни одного файла!", vbInformation, "Выбор файлов:")
            Exit Function     'показывает диалог
        End If
        ReDim Preserve s(1 To .SelectedItems.Count)
        For lf = 1 To .SelectedItems.Count
            s(lf) = CStr(.SelectedItems.Item(lf))     'считываем полный путь к файлу
        Next
    End With
    FileDialog_ = s
End Function
Далее другой функцией получаем массив строк в файлах txt
Функция

Visual Basic
1
2
3
4
5
6
7
Private Function ReadTXTfile(ByVal FileName As String) As String
    Dim FSO    As Object
    Dim ts     As Object
    Set FSO = CreateObject("scripting.filesystemobject")
    Set ts = FSO.OpenTextFile(FileName, 1, True): ReadTXTfile = ts.ReadAll: ts.Close
    Set ts = Nothing: Set FSO = Nothing
End Function
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
11.09.2019, 11:33  [ТС] 3
Выдаёт ошибки , может неправильно скопировал , у меня с этим делом вообще всё плохо .
Можете скинуть в файле макросс ?
0
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
11.09.2019, 12:35 4
вот рабочий код

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Sub ImportTxt()
    Const StrPath As String = "Путь к папке с файлами"
    Dim StrFileVar() As Variant
 
    
    Dim i As Long
    
    StrFileVar = FileDialog_(StrPath, True)
        
    For i = 1 To UBound(StrFileVar)
        ThisWorkbook.Sheets.Add
        ActiveSheet.Name = Left(sGetBaseName(StrFileVar(i)), 31)
        Call SetTextIntoClipboard(ReadTXTfile(StrFileVar(i)))
        ActiveSheet.PasteSpecial
    Next i
    
End Sub
 
Public Function FileDialog_(ByVal Path As String, _
                            Optional MultiSelect As Boolean = True, _
                            Optional Expansion As String = "*.txt") As Variant
 
    Dim oFd    As FileDialog
    Dim s()    As Variant
    Dim lf     As Long
 
    Set oFd = Application.FileDialog(msoFileDialogFilePicker)
    With oFd     'используем короткое обращение к объекту
        .AllowMultiSelect = MultiSelect
        .Title = "Выбрать файлы:"     'заголовок окна диалога
        .Filters.Clear     'очищаем установленные ранее типы файлов
        .Filters.Add "Microsoft Excel Files", Expansion, 1     'устанавливаем возможность выбора только файлов Excel
        .InitialFileName = Path     'назначаем папку отображения и имя файла по умолчанию
        .InitialView = msoFileDialogViewDetails     'вид диалогового окна(доступно 9 вариантов)
        If .Show = 0 Then
            Call MsgBox("Не выбрано ни одного файла!", vbInformation, "Выбор файлов:")
Exit Function     'показывает диалог
        End If
        ReDim Preserve s(1 To .SelectedItems.Count)
        For lf = 1 To .SelectedItems.Count
            s(lf) = CStr(.SelectedItems.Item(lf))     'считываем полный путь к файлу
        Next
    End With
    FileDialog_ = s
End Function
 
Private Function ReadTXTfile(ByVal FileName As String) As String
    Dim FSO    As Object
    Dim ts     As Object
    Set FSO = CreateObject("scripting.filesystemobject")
    Set ts = FSO.OpenTextFile(FileName, 1, True): ReadTXTfile = ts.ReadAll: ts.Close
    Set ts = Nothing: Set FSO = Nothing
End Function
Public Function sGetBaseName(ByVal sPathFile As String) As String
    'sPathFile - строка, путь.
    'возвращает имя (без расширения) последнего компонента в заданном пути.
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    sGetBaseName = FSO.GetBaseName(sPathFile)
End Function
Public Sub SetTextIntoClipboard(ByVal txt As String)
    Dim MyDataObj As New DataObject
    MyDataObj.SetText txt
    MyDataObj.PutInClipboard
End Sub
нужно исправить это на свою директорию Const StrPath As String = "Путь к папке с файлами"
и подключить библиотеку - Microsoft Forms 2.0 Object Library:

путь к подключению: Tools->references...
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
11.09.2019, 13:26  [ТС] 5
и подключить библиотеку - Microsoft Forms 2.0 Object Library:

путь к подключению: Tools->references... конец не понял , что такое библиотека , и куда вписывать

ругается на 20 строку , см.фото


если есть возможность , пришлите мне скрипт в файле, или в ахриве
Миниатюры
Сделать из листов книгу  
0
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
11.09.2019, 14:10 6
я делал для Excel как оптимизировать под VBscript не знаю, напишите в личку вашу почту я скину файл Excel тут не могу выкладывать файлы
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
11.09.2019, 14:38  [ТС] 7
gowanmtb1@gmail.com вот адресс , не нашел как писать личные сообщения )
0
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
11.09.2019, 14:42 8
можно удалить почту скинул
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
11.09.2019, 15:08  [ТС] 9
кто еще может помочь ?
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
11.09.2019, 19:50 10
georgiy123, Обычно люди добавляют несколько текстовых файлов (что есть) и файл с результатом, который должен быть получен, после выполнения макроса и только после этого ждут помощи.
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
12.09.2019, 18:33  [ТС] 11
Загрузил , в иделале макрос должен быть с условным форматированием , ну можно без него , заранее спасибо )
Вложения
Тип файла: txt 011.txt (2.2 Кб, 5 просмотров)
Тип файла: txt 012.txt (2.0 Кб, 5 просмотров)
Тип файла: xlsx как должно быть.xlsx (9.2 Кб, 7 просмотров)
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
12.09.2019, 19:54 12
Папку нужно указать свою и, наверное, переписать всё с использованием массивов. Ибо этот макрос будет выполняться весьма долго.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private sub main
    dim p$, f$, t$, rw&, cl&, a()
    dim wb as object, ws as object, c as object
    
    p="c:\users\администратор\downloads\"
    f=dir(p+"*.txt"): if len(f)=0 then exit sub
    
    wb=thiscomponent: ws=wb.sheets(0)
    
    do
       open p+f for input as #1
            do while not eof(#1)
               line input #1, t
               a=split(t)
               for cl=0 to ubound(a)
                   c= ws.getcellbyposition(cl,rw)
                   select case cl
                       case 0 to 2, 5 to 7
                          c.setvalue(a(cl))
                       case else
                          c.setstring(a(cl)) 
                   end select
               next
               rw=rw+1
            loop
       close #1
       f=dir
    loop while len(f)
end sub
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
12.09.2019, 20:03  [ТС] 13
не открывает , молчит . Файл сохранил как .ods всё верно ?
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
12.09.2019, 20:08 14
я бы не стал постить так много строк без проверки, так что ищите свои косяки. либо неправильно указали папку, либо наплевали на то, что там обязателен завершающий слэш.
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
12.09.2019, 20:12  [ТС] 15
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private sub main
    dim p$, f$, t$, rw&, cl&, a()
    dim wb as object, ws as object, c as object
    
    p="C:\Users\Gowan MTB\Desktop\EAR logs"
    f=dir(p+"*.txt"): if len(f)=0 then exit sub
    
    wb=thiscomponent: ws=wb.sheets(0)
    
    do
       open p+f for input as #1
            do while not eof(#1)
               line input #1, t
               a=split(t)
               for cl=0 to ubound(a)
                   c= ws.getcellbyposition(cl,rw)
                   select case cl
                       case 0 to 2, 5 to 7
                          c.setvalue(a(cl))
                       case else
                          c.setstring(a(cl)) 
                   end select
               next
               rw=rw+1
            loop
       close #1
       f=dir
    loop while len(f)
end sub
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
12.09.2019, 20:14 16
Прочитать внимательно моё сообщение не судьба ? Или Вы не знаете, что такое слэш ?
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
12.09.2019, 20:43  [ТС] 17
Добавил слэш , всёравно молчит , загрузил файл в зипе , cyberforum в .ods не принимает .
Вложения
Тип файла: zip макрос с форума.zip (7.4 Кб, 5 просмотров)
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
12.09.2019, 21:03 18
Запустите непосредственно в редакторе.

Если получите сообщение, что офис страдает ... и заблокировал макрос из соображений безопасности, то выйдите из редактора, затем Сервис-Параметры-Безопасность-Безопасн.макросов-Средний/Низкий-Ok-Применить

Если и после этого не будет результата, закройте файл, сохранив все изменения, после чего, заново откройте файл.
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
12.09.2019, 21:34  [ТС] 19
Всё сделал как вы сказали , всёравно молчит , никаких действий не происходит.

У вас он работает ?
Миниатюры
Сделать из листов книгу   Сделать из листов книгу  
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
12.09.2019, 21:41 20
Непосредственно в редакторе используйте клавишу F8 и смотрите значения переменных, там же узнаете, где "умирает" макрос.
0
12.09.2019, 21:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.09.2019, 21:41
Помогаю со студенческими работами здесь

Копирование листов в отдельную книгу при наличии =ДВССЫЛ в листе
Коллеги, приветствую! Может, конечно, я плохо ищу. Может еще что-то, но все, что я перепробовал -...

Как сделать скрытыми несколько листов???
Привет! Мне ннадо сделать несколько листов скрытыми.Как это сделать?? Но при этом они должны быть...

Как сделать один из листов недоступным для пользователя?
как сделать один из листов недоступным для пользователя?? т.е. допустим у меня три листа: Лист1,...

Как сделать доступными только для чтения названия листов книги
Excel. Как сделать доступными только для чтения названия листов книги, заранее определенные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru