OpenFile

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

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

sokol92

Цитата: Ципихович Эндрю от  6 января 2024, 20:32а мне отложилось, что он Эндрю, не?
Я безгранично уважаю Питоньяка, так что библейский вариант мне больше нравится.  :)
Владимир.

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

вот в обоих случаях ошибка, они отличаются друг от друга немножко.....-но пока мне это ни о чём не говорят....


bigor

Просмотрел, у вас  last4chr = LCase(Right(last4chr, 4)), т.е. в last4chr только .htm
Поддержать наш форум можно здесь

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

Цитата: bigor от  6 января 2024, 21:57Просмотрел, у вас  last4chr = LCase(Right(last4chr, 4)), т.е. в last4chr только .htm
да, мог бы и сам понять-внимания НЕ хватило))
теперь на строке
oSearchDescr = oDoc.CreateSearchDescriptor()код падает и сообщение:
Объектная переменная не установлена
как устранить?

bigor

Цитата: Ципихович Эндрю от  6 января 2024, 22:38Объектная переменная не установлена
как устранить?
установить
Поддержать наш форум можно здесь

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

Цитата: bigor от  6 января 2024, 22:42установить
так и сделал и гут, спасибо всем, кто помог!!!
есть метод в либре эти открытия документов делать не видимо для пользователя - как в ворде? если есть - это же улучшит работу, как это сделать?

bigor

Цитата: Ципихович Эндрю от  6 января 2024, 23:31как это сделать?
в массив Array() записать параметры, листайте книжку там все есть, поиск по слову hidden
Поддержать наш форум можно здесь

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

спасибо, понял

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

мой итоговый код:
Sub FileSortOpenDeleteChr160

Dim dtStart As Date 'Возвращает текущую дату и время как объект Date
  dtStart = Now
Dim arr, arr1
Dim i As Long
Dim sFileName
Dim sDir As String
sDir="I:\Российская Федерация\"
Dim oFS As Object
' Создаём объект для доступа к файловой системе
oFS = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
' Проверяем существование каталога
If Not oFS.exists(sDir) Then
Print "Каталог " & sDir & " не существует, программа далее не будет продолжаться."
Exit Sub
End If
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
sfilename=files(sDir)
redim arr(1,ubound(sfilename))
For i= 0 to ubound(sfilename)
arr(0,i)=int(split(getname(sfilename(i)),".")(0))
arr(1,i)=convertfromurl(sfilename(i))
Next
arr1=sortcolumns(arr,0)

Dim sFiles_print As String
sFiles_print = ""
Dim last4chr As String
last4chr = ""
Dim HtmFileCount As Long
HtmFileCount = 0
'очищаем текущий документ
ThisComponent.Text.String=""
Dim doc As Object
Dim sText As String
Dim oText As Object
'объект текущий документ
  oText = ThisComponent.Text
  Dim oDoc As Object
  'объект текущий документ
  oDoc = ThisComponent 'oDoc = ThisComponent.Text-ТАК НЕЛЬЗЯ!
For i=0 to ubound(sfilename)
' print arr1(1,i) вывод пути и имени файла после сортировки
' накапливаются в переменную пути и имени файла после сортировки с разделитем, которым является абзац
sFiles_print = sFiles_print & arr1(1,i) & Chr(13)
last4chr = arr1(1,i)
last4chr = LCase(Right(last4chr, 4))
If last4chr = ".htm" Then 'вариант похуже, проверяет только вхождение If InStr(last4chr, ".htm") > 0
HtmFileCount = HtmFileCount + 1
'открываем документ, путь к документу - arr1(1,i)
        doc = StarDesktop.LoadComponentFromURL(ConvertToUrl(arr1(1,i)), "_blank", 0, Array())
        'получить текст из вновь открытого документа
        sText = doc.Text.String
        ' закрыть файл
        doc.close(True)
  'вставить текст в конце текущего документа
  oText.InsertString(oText.getEnd(),_
  sText & CHR$(13) & "+++++++++++++++++++++++++++++++++++++++++++++" & CHR$(13), False)
End If
Next

'вывод результата в текущем документе - пути к файлам из каталога, которые программой отсортированы
'ThisComponent.Text.String=sFiles_print
'MsgBox sFiles_print
'print sFiles_print

Dim oSearchDescr 'описатель поиска
oSearchDescr = oDoc.CreateSearchDescriptor()
With oSearchDescr
  .SearchString = Chr(160)
  End With
Dim oAllFound 'Все найденные элементы
oAllFound = oDoc.findAll(oSearchDescr)
'MsgBox "Количество всех найденных Chr(160): " & oAllFound.getCount()
If  oAllFound.getCount() > 0 Then
With oSearchDescr
  .SearchString = Chr(160)
  .ReplaceString = " "
End With
oDoc.ReplaceAll(oSearchDescr)
End If

Dim ldtDiff As Long
ldtDiff = DateDiff("s", dtStart, Now)
'yyyy=Year=Год
'q=Quarter=Квартал
'm=Month=Месяц
'y=Day of year=День года
'w=Weekday=День недели
'ww=Week of year=Неделя года
'd=Day=День, например MsgBox DateDiff("d", #1/1/2005#, #2005-12-31#)
'h=Hour=Час
'n=Minute=Минута
's=Second=Секунда
Dim sdtDiff As String
sdtDiff = ""
If ldtDiff > 60 Then
ldtDiff = ldtDiff/60 '"/"-  деление чисел, например: 120/60, "*" - умножение чисел, например: 120*60
sdtDiff = ldtDiff  & " min"
Else
sdtDiff = ldtDiff  & " sec"
End If

MsgBox "РАБОТА МАКРОСА ЗАВЕРШЕНА" & CHR$(13)  & _
   "Вставлено документов в текущий доrумент: " & HtmFileCount & CHR$(13)  & _
   "Количество сделанных замен Chr(160) на пробел: " & oAllFound.getCount()  & CHR$(13)  & _
     "Продолжительность выполнения макроса: " & sdtDiff

End Sub
решил попрактиковаться переписать его на питоне встроенном в либру переписал всё кроме, отрезка из трёх строк:
'открываем документ, путь к документу - arr1(1,i)
        doc = StarDesktop.LoadComponentFromURL(ConvertToUrl(arr1(1,i)), "_blank", 0, Array())
        'получить текст из вновь открытого документа
        sText = doc.Text.String
        ' закрыть файл
        doc.close(True)
подскажите как это написать? спасибо
ну и вырисовывается что этот код написанный на Басике в 110 строк будет иметь строк 20-30))

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

чуть сдвинулся, в файле у меня указано
doc = desktop.loadComponentFromURL(l, "_blank", 0, ()) а в макросе указано так:
doc = StarDesktop.LoadComponentFromURL(ConvertToUrl(arr1(1,i)), "_blank", 0, Array())и на этой строке возникает ошибка, грешил на различие в обоих строках в приставке "Star" но я ведь брал с рабочего примера, ошибку приложу, есть мысли как исправить?

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

там в сообщении сказано:
Uno.com.sun.star.lang.lllegalArgumentExpertion: Unsupported URL <......>: "from LoadEnv::startLoading"

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

вспомнил, что путь там был указан не полностью, поправил, строка:
doc = desktop.loadComponentFromURL(patch_doc + l, "_blank", 0, ())на ней возникает ошибка, в ней сказано:
Uno.com.sun.star.lang.lllegalArgume ntExpertion: Unsupported URL <......>: "from LoadEnv::startLoading"
как поправить?

bigor

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

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

а вообще в этой записи l = convertToUrl(l) какая магия, что происходит с url? - её нужно перевести на питон и наверное взлетит....

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

вообще-то проверку прошёл path файла
                if os.path.isfile(patch_doc + l):
                    print('Файл существует')
                    doc = desktop.loadComponentFromURL(patch_doc + l, "_blank", 0, ())
и на последней строке код падает