Как назначить содержимое буфера обмена массиву в макросе openoffice BASIC

Я пытаюсь создать элементарный макрос глоссария для файла LibreOffice/OpenOffice .odt. Он перейдет в конец документа и вставит список выбранных слов (найденных регулярным выражением) как уникальный набор (без двойников)

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

Как в реализации BASIC в OpenOffice можно присвоить содержимое буфера обмена новой переменной?

Чтобы было ясно: мне не нужна функция «Вставить», мне нужно манипулировать содержимым буфера обмена как объектом перед вызовом «Вставить».

Грубый набросок того, что я пытаюсь сделать, это:

dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem -------------- PROBLEM IS BELOW -------
Dim oModuleUICommandDescription As Object, myText$(),aCommand
myText = thisComponent.currentSelection(0)

rem -------------- PROBLEM IS ABOVE -------

rem -------------- Followed by an array comparison to get a unique set

i = FreeFile()
Open "/path/to/my/BASIC.txt" For Output As i
Print #i, myText.string
Close #i

person user14050185    schedule 28.04.2021    source источник
comment
Вы гуглили: OpenOffice BASIC, назначьте содержимое буфера обмена Один из результатов: forum.openoffice.org/en/forum/viewtopic.php?f=21&t=93562 Вам действительно нужно научиться пользоваться Google!   -  person StureS    schedule 28.04.2021
comment
Привет, да, я погуглил и прочитал тот самый результат. Однако, насколько я вижу, он совсем не делает того, что я прошу, а именно присваивает результат копирования переменной. То, что вы опубликовали, выполняет копирование и выполнение вставки, но перед этим мне нужно назначить переменную, применить операцию и вывести ее в текстовый файл, а не вставить   -  person user14050185    schedule 19.05.2021
comment
Тогда вам нужно продолжить свои исследования. Это не сервис программирования, где вы указываете свои требования, а вам возвращается отлаженный, готовый к использованию код. Вы должны приложить необходимые усилия самостоятельно.   -  person StureS    schedule 19.05.2021
comment
Где я просил полный кусок готового к использованию кода? Если бы вы нашли время, чтобы прочитать мой вопрос, вы бы увидели, что я прошу об одной операции, которую я не могу определить, как это сделать или возможно ли это. Если бы вы нашли время, чтобы прочитать результат Google, который вы опубликовали, вы бы увидели, что он не содержит операции, которую я ищу. Если вы видите строку, которая делает это, пожалуйста, не стесняйтесь просветить меня, и я проголосую за ответ. Вот пример вашего полезного ответа на аналогичный запрос stackoverflow.com/questions/65578682/< /а>   -  person user14050185    schedule 20.05.2021
comment
Мне потребовалось 10 секунд, чтобы найти решение в Google с вставить буфер обмена в переменную openOffice   -  person StureS    schedule 21.05.2021
comment
Если вы говорите о ссылке, которую вы разместили, это не решение. Вы явно либо не поняли вопроса, либо просто не знаете, как это сделать.   -  person user14050185    schedule 21.05.2021
comment
Жаль, что вы не удосужились показать какой-либо результат. StureS, возможно, сэкономил бы мне несколько дней усилий.   -  person user14050185    schedule 21.05.2021


Ответы (1)


Итак, насколько я вижу, ответ заключается в том, что простого встроенного способа сделать это не существует.

Однако это возможно с помощью созданной пользователем функции, размещенной здесь (не моей) https://wiki.documentfoundation.org/Macros/Writer/005

и используя эту функцию для присвоения содержимого переменной.

Верхний саб здесь опирается на функцию, определенную под ним.

Sub WriteClipboardtoTxtFile()
    Dim sText As String
    Dim myTextFile As String
    Dim i%
    findAllTags_Switches()
    rem  ###########     ASSIGNMENT OCCURS JUST BELOW
    sText= (getClipboardText)
    rem ################ ASSIGNMENT OCCURS JUST ABOVE
    sText = Replace (sText," ",Chr(10))
    rem Replace white spaces with returns
    MsgBox(sText)
    i = FreeFile()
    Open "/path/to/my/file" For Output As i
    Print #i, sText
    Close #i
    
    
End Sub ' InsertClipboardTexttoVariable


Function getClipboardText() As String
    '''Returns a string of the current clipboard text'''

    Dim oClip As Object ' com.sun.star.datatransfer.clipboard.SystemClipboard
    Dim oConverter As Object ' com.sun.star.script.Converter
    Dim oClipContents As Object
    Dim oTypes As Object
    Dim i%

    oClip = createUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
    oConverter = createUnoService("com.sun.star.script.Converter")
    On Error Resume Next
    oClipContents = oClip.getContents
    oTypes = oClipContents.getTransferDataFlavors

    For i = LBound(oTypes) To UBound(oTypes)
        If oTypes(i).MimeType = "text/plain;charset=utf-16" Then
            Exit For
        End If
    Next

    If (i >= 0) Then
        On Error Resume Next
        getClipboardText = oConverter.convertToSimpleType _
            (oClipContents.getTransferData(oTypes(i)), com.sun.star.uno.TypeClass.STRING)
    End If

End Function ' getClipboardText

Чтобы использовать в редакторах макросов OpenOffice, скопируйте и вставьте код, чтобы можно было вызвать новую функцию.

person user14050185    schedule 21.05.2021