OpenFile

Автор Ципихович Эндрю, 2 января 2024, 21:38

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

Ципихович Эндрю

здравствуйте, мой код:
Sub OpenFile()

' очищаем текущий документ
ThisComponent.Text.string=""
Dim doc As Object
Dim afff(1) As String
afff(0) = "I:\Российская Федерация\5. ГОСТ Р 52289-2019_01.04.2020.htm"
afff(1) = "I:\Российская Федерация\21. Вред здоровью_18.01.2012.htm"
for i=0 to ubound(afff)
Print afff(i)
    doc = ThisComponent.CurrentController.Frame
        ' открываем документ, путь к документу - afff(i)
        doc.LoadComponentFromURL(afff(i), "_blank", 0, Array())
    Next

End Sub
не пропускает строка кода
doc.LoadComponentFromURL(afff(i), "_blank", 0, Array())
как её поправить
и можно добавить еще код макроса, нужно текст с открытого документа
взять в переменную поместить в текущий документ поставить разделитель абзац, закрыть файл и раз это в цикле тогда и со следующим файлом цикл должен сделать аналогичные действия
да это файлы htm - открывать их как текстовые не нужно, нужно именно так как открывает либра, спасибо
 

bigor

Цитата: Ципихович Эндрю от  2 января 2024, 21:38doc.LoadComponentFromURL(afff(i), "_blank", 0, Array())
вы по старым граблям опять прошлись, эту строку нужно переписать так
doc = StarDesktop.LoadComponentFromURL(ConvertToUrl(afff(i)), "_blank", 0, Array())файлы откроются, только вам же нужен не только текст из них, но и форматирование в виде веб страницы, наверное.
Поддержать наш форум можно здесь

Ципихович Эндрю

Цитата: bigor от  2 января 2024, 22:05вы по старым граблям опять прошлись
наверное))
вчера я выкладывал скрипт он не работал из за строки
Цитата: Ципихович Эндрю от  2 января 2024, 21:38doc.LoadComponentFromURL(afff(i), "_blank", 0, Array())
сегодня на строке выше засада на строке
Цитата: Ципихович Эндрю от  2 января 2024, 21:38for i=0 to ubound(afff)
такое впечатление, что она по чётным-вчера работает, а по нечётным-сегодня НЕ работает
подскажите в чём дело

Ципихович Эндрю

сорри я же вчера добавил строку
Option Explicitи сегодня кончено нужно объявлять
Dim i As Long

Ципихович Эндрю

ну гут, открывает документы в цикле
Option Explicit
Sub OpenFile()

' очищаем текущий документ
ThisComponent.Text.string=""
Dim doc As Object
Dim afff(1) As String
afff(0) = "I:\Российская Федерация\5. ГОСТ Р 52289-2019_01.04.2020.htm"
afff(1) = "I:\Российская Федерация\21. Вред здоровью_18.01.2012.htm"
Dim i As Long
for i=0 to ubound(afff)
Print afff(i)
    doc = ThisComponent.CurrentController.Frame
        ' открываем документ, путь к документу - afff(i)
        doc = StarDesktop.LoadComponentFromURL(ConvertToUrl(afff(i)), "_blank", 0, Array())
    Next

End Sub
подскажите как
Цитата: Ципихович Эндрю от  2 января 2024, 21:38добавить ещё в код макроса, нужно текст с открытого документа
взять в переменную поместить в текущий документ поставить разделитель абзац, закрыть файл и раз это в цикле тогда и со следующим файлом цикл должен сделать аналогичные действия
да это файлы htm - открывать их как текстовые не нужно, нужно именно так как открывает либра


Ципихович Эндрю

дописал как предполагаю как должно быть:
        ' получить текст из открытого документа
        sText = doc.getText()
        ' записать текст в текущий документ
        ThisComponent.Text.InsertString(ThisComponent.Text.Length, sText, False)
        ' записать разделитель абзаца
        ThisComponent.Text.InsertControlCharacter(ThisComponent.Text.Length, ControlCharacter.PARAGRAPH_BREAK, False)
        ' закрыть файл
        doc.close(True)
и конечно не работает, лучше спросить))

bigor

Цитата: Ципихович Эндрю от  3 января 2024, 08:39лучше спросить))
вы не ответили на вчерашний вопрос.
Цитата: bigor от  2 января 2024, 22:05только вам же нужен не только текст из них, но и форматирование в виде веб страницы, наверное.
и не смотрели, как обещали, Питоньяка. В его книге по ссылке, что я вчера давал Листинг 243. Вставка простого текста в начале и конце документа
Поддержать наш форум можно здесь

Ципихович Эндрю

Цитата: bigor от  3 января 2024, 17:01не смотрели, как обещали, Питоньяка
посмотрел, один из кодов (какой я не помню) при запуске кода он дал ошибку и я стал с опаской смотреть на контекст Питоняки, как и к ответам джипити))
а как выяснилось только что Эндрю Питоньяк - это человек, а не жаргон)) - так, что я возможно и не его коды смотрел...
ну ок Листинг 243. Вставка простого текста в начале и конце документа - всё поясняет........
на вопрос
Цитата: bigor от  3 января 2024, 17:01вам же нужен не только текст из них, но и форматирование в виде веб страницы, наверное
сказать лучше так, вот что я вижу в этом файле - то и нужно, ни больше ни меньше, в случае возникновения проблем буду решать по мере их поступления.........



Ципихович Эндрю

Цитата: Ципихович Эндрю от  3 января 2024, 18:06посмотрел, один из кодов (какой я не помню) при запуске кода он дал ошибку
вероятно это была Якунина М.В.

Ципихович Эндрю

текст строки, на котором спотыкался код верный?
        ' получить текст из открытого документа
        sText = doc.Text.String

bigor

Поддержать наш форум можно здесь

Ципихович Эндрю

ну раз код верный, тогда похоже всё то зря.......
Sub OpenFile()

    ' очищаем текущий документ
    ThisComponent.Text.string=""
    Dim doc As Object
    Dim afff(1) As String
    afff(0) = "I:\Российская Федерация\5. ГОСТ Р 52289-2019_01.04.2020.htm"
    afff(1) = "I:\Российская Федерация\21. Вред здоровью_18.01.2012.htm"
    Dim i As Long
    ' Dim sText As String
    for i=0 to ubound(afff)
        ' Print afff(i)
        doc = ThisComponent.CurrentController.Frame
        ' открываем документ, путь к документу - afff(i)
        doc = StarDesktop.LoadComponentFromURL(ConvertToUrl(afff(i)), "_blank", 0, Array())
        ' получить текст из открытого документа
        ' sText = doc.Text.String
        ' записать текст в текущий документ
        ThisComponent.Text.string=doc.Text.String  & Chr(13)
        ' закрыть файл
        doc.close(True)
    Next

End Sub
код падает на первом документе, а я вообще-то собирался соединить вместе не менее 30 документов, примерно на 50-ти документах хотел остановиться
возможно можно решить вставкой задержки, как это пишется в либре?
или есть ещё способ сделать код годным?
могут быть возражения - документ слишком большой, 5000 абзацев это 50\50 что документ большой\не большой, приложить этот документ - 5. ГОСТ Р 52289-2019_01.04.2020.htm не получается, форуму не нравится расширение htm

bigor

Цитата: Ципихович Эндрю от  4 января 2024, 06:45форуму не нравится расширение htm
упакуйте в архив и приложите. Ваш код из #11 даже если отработает без ошибок, вернет данные последнего файла
Поддержать наш форум можно здесь

Ципихович Эндрю

Цитата: bigor от  4 января 2024, 09:54Ваш код из #11 даже если отработает без ошибок, вернет данные последнего файла
конечно я в курсе, сначала нужно добиться, чтобы не было ошибок при выполнении кода
файл приложу чуть позже, надо разбираться при архивировании выдало сообщение - файл занят, никем он не занят, а если и занят - без моего ведома))

Ципихович Эндрю

кодом питона:
from zipfile import ZipFile  # Создать zip архив с паролем=Создать архив с паролем

with ZipFile("i:/Российская Федерация/5. ГОСТ Р 52289-2019_01.04.2020.zip", 'w') as arch:
    arch.setpassword(b'12345')  # Ставим пароль
    arch.write('i:/Российская Федерация/5. ГОСТ Р 52289-2019_01.04.2020.htm')  # Добавляем файл в архив
файл заархивировался без проблем, так, что сорри пароль 12345
вручную архивация всеми тремя архиваторами вызывала одну и ту же ошибку -  файл занят