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

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

8 Август 2020, 09:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Сообщений: 59


« Стартовое сообщение: 13 Декабрь 2019, 12:32 »

Приветствую Вас, уважаемы форумчане!
Есть файл "Выгрузка" (приложен), из которого макрос  копирует строку с данными, вставляет её в новый файл, после чего данный файл сохраняет в формате txt с разделителями.


Макрос писался в Excel рекордером.
Код:
Sub Выгрузить_отчёт()
'
'   Выгрузить_отчёт Макрос

    Sheets("Выгрузка").Select
   
 
    Rows("3").Select
    Selection.Copy
    Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
     
    strDate = Format([B1], "mmmm yyyy")
Application.DisplayAlerts = False 'чтобы не задавал вопросы
PartOfName = ActiveWorkbook.ActiveSheet.[A1] & " Выгрузка за " & strDate ' вставляем в имя файла дату
ActiveWorkbook.SaveAs Filename:="C:\ФОТ\Отчёты\" & PartOfName & ".txt", FileFormat _
        :=xlText, CreateBackup:=False


ActiveWindow.Close

   
End Sub

Из Excel он выполняется вполне корректно и формирует текстовый файл "Москва Выгрузка за Декабрь 2019.txt" (приложен)

Но применяться файл планируется в Libre, для чего он сохранён как Libre документ.
Однако при запуске макроса в Calc он также выгружает готовый файл, но совершенно в другом формате  "Москва Выгрузка за Декабрь 2019.txt" (приложен)
При просмотре содержимого файла очевидно что это не txt

Я допускаю, что в Calc это делается вообще по-другому.
Прошу скорректировать направление.
Всем Спасибо!

* Выгрузка.ods (13.47 Кб - загружено 6 раз.)
* 1 Москва Выгрузка за Декабрь 2019.txt (0.06 Кб - загружено 4 раз.)
* Москва Выгрузка за Декабрь 2019.txt (5.5 Кб - загружено 9 раз.)
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 230


« Ответ #1: 13 Декабрь 2019, 12:42 »

Запишите макрорекордером в LO Calc то же самое - получите макрос, в котором остается дописать как формировать имя файла. 
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
economist
Форумчанин
***
Offline Offline

Сообщений: 1 230


« Ответ #2: 13 Декабрь 2019, 12:57 »

Есть и другой путь - макрос на VBA/SB, формирующий TXT прямыми методами. Пример условный, доработайте под свои условия. Краткая нотация вида [A3:C3] - очень удобна. Вместо чисел можно ставить значения переменных.
Код:
Option VBASupport 1
Option Compatible

Sub saveTXT()
Open "D:\456.txt" for OutPut as #1
For Each n in Sheets(1).[A3:C3]
stroka=stroka & ";" & n
Next n
Print #1, stroka
Close #1
End sub 
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Konstanta
Форумчанин
***
Offline Offline

Сообщений: 59


« Ответ #3: 13 Декабрь 2019, 13:43 »

Спасибо, economist!
Метод действительно работает! Это просто здорово и просто.
Вот только я пытался прикрутить к нему формирование имени файла из ячеек и дату.
Но в данном методе отсутствует сохранение через SaveAs поэтому просто не знаю куда поставить ссылку на ячейку [A1] из которой в имя файла должно стать значение и то же самое с датой [B1], чтобы получилось полное имя файла.
То, что я делал вызывает ошибку.


Записан
Bigor
Мастер
*****
Offline Offline

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


« Ответ #4: 13 Декабрь 2019, 14:04 »

чтобы получилось полное имя файла.

Код:
Sub saveTXT()

strDate = Format(ActiveSheet.[B3], "mmmm yyyy")
FName = ActiveWorkbook.ActiveSheet.[A3] & " Выгрузка за " & strDate
Open "D:\" & FName for OutPut as #1
stroka=Sheets(1).[A3]&";"& Format(Sheets(1).[B3], "mmmm yyyy")
For Each n in Sheets(1).[c3:r3]
stroka=stroka & ";" & n
Next n
Print #1, stroka
Close #1
End sub  

и на "родном" SB

Код:
Sub SaveTXT_SB
Fname = ThisComponent.Sheets(0).getCellbyPosition(0,2).String &" Выгрузка SB за "& format(ThisComponent.Sheets(0).getCellbyPosition(1,2).String,"mmmm YYYY")
Open "D:\" & FName for OutPut as #1
stroka=ThisComponent.Sheets(0).getCellbyPosition(0,2).String &";" & format(ThisComponent.Sheets(0).getCellbyPosition(1,2).String,"mmmm YYYY")
n=2
While ThisComponent.Sheets(0).getCellbyPosition(n,2).String <> ""
'Print stroka
stroka=stroka & ";" & ThisComponent.Sheets(0).getCellbyPosition(n,2).String
n=n+1
wend
Print #1, stroka
Close #1
End Sub
« Последнее редактирование: 13 Декабрь 2019, 14:24 от Bigor » Записан

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

Сообщений: 59


« Ответ #5: 13 Декабрь 2019, 14:26 »

Bigor, Ай Спасибо!
Всё работает!

Всем огромное Спасибо!
Записан
Konstanta
Форумчанин
***
Offline Offline

Сообщений: 59


« Ответ #6: 13 Декабрь 2019, 14:43 »

А получается что таким же образом можно не только по одной строке выгружать данные, но и целый массив?
Записан
Bigor
Мастер
*****
Offline Offline

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


« Ответ #7: 13 Декабрь 2019, 14:46 »

Массив, наверное, через лист быстрее будет. 
Записан

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

Сообщений: 59


« Ответ #8: 13 Декабрь 2019, 14:48 »

"Через лист" - это через как ?
Записан
Bigor
Мастер
*****
Offline Offline

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


« Ответ #9: 13 Декабрь 2019, 15:52 »

это через как ?
Как у вас в первоначальном варианте. Вот вариант на SB

Код:
Sub SaveMassTXT
Dim args(0) As New com.sun.star.beans.PropertyValue
Dim args1(1) As New com.sun.star.beans.PropertyValue
oDoc = ThisComponent.Sheets(0)
Fname= oDoc.getCellbyPosition(0,2).String &" Выгрузка SB за "& format(oDoc.getCellbyPosition(1,2).String,"mmmm YYYY")
sPathArh="D:\"
oRange = oDoc.getCellRangeByName("a3:r8")
Arr_1 = oRange.getDataArray()
args(0).Name ="Hidden"
args(0).Value = true
OutDoc = StarDesktop.loadComponentFromUrl("private:factory/scalc","_blank",0,args())
OutDoc.Sheets(0).getCellRangeByName("a1:r6").setDataArray(Arr_1)
args1(0).Name = "FilterName"
args1(1).Name = "FilterOptions"
args1(0).Value = "Text - txt - csv (StarCalc)"
args1(1).Value= "59,0,34,1,,0,false,true,false,false,false"
OutDoc.storeAsURL(ConverttoURL(sPathArh)& Fname & ".txt" ,args1())
OutDoc.close(true)
End Sub
Записан

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

Сообщений: 59


« Ответ #10: 13 Декабрь 2019, 15:58 »

Спасибо.
Попытаюсь разобраться с вариантом на SB.
Но он почему-то визуально кажется страшнее чем привычный на VBA
 
Записан
Bigor
Мастер
*****
Offline Offline

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


« Ответ #11: 13 Декабрь 2019, 16:03 »

Да, кнопок больше нужно тыкать Улыбка
Записан

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

Сообщений: 1 230


« Ответ #12: 13 Декабрь 2019, 17:48 »

StarBasic настолько страшен и длинен, что я каждый раз после него намеренно иду в Python, за "ремиссией" и получением удовольствия от кодинга.

На Python через библиотеку UNO - в LO Calc тоже все делается быстро, а код - еще более компактный. Но пишут на питоне очень мало. Видимо привычка, я тоже никак не "начну" :-)   
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Bigor
Мастер
*****
Offline Offline

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


« Ответ #13: 16 Декабрь 2019, 12:56 »

На Python через библиотеку UNO - в LO Calc тоже все делается быстро, а код - еще более компактный
а можно пример. Интересно посмотреть.
Записан

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

Сообщений: 59


« Ответ #14: 17 Декабрь 2019, 12:12 »

Как у вас в первоначальном варианте. Вот вариант на SB
Не мог я осилить Питон... Тупой наверное
А что в моём первоначальном варианте нужно исправить, чтобы было возможно выгрузить массив данных в корректный файл txt ?
Записан
Страниц: 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!