如何检索输入字段的值并使用它来修改 LibreOffice Basic 宏中的占位符?

Posted

技术标签:

【中文标题】如何检索输入字段的值并使用它来修改 LibreOffice Basic 宏中的占位符?【英文标题】:How to retrieve the value of an Input field and use it to modify a placeholder in a LibreOffice Basic macro? 【发布时间】:2015-07-23 18:24:43 【问题描述】:

我已经花了两天时间,但我仍然无法弄清楚 8-)

我有一个 LibreOffice Writer 文档,其中包含一些 Placeholders (Insert -> Fields -> More Fields -> Functions -> Placeholder -> Image) 和 Input fields (Insert -> Fields -> More Fieds -> Functions -> Input field),我需要检索 Input field 的值并使用它来替换同一文档中指定的Placeholder

更准确地说。我有一个Input field 我输入例如123 并且在文档的某处是一个按钮,它会触发一个宏,而这个宏应该:

    检索指定(命名?)Input field(“123”)的当前值, 用从http://domain.tld/image/123.png加载的图像“替换”指定(命名?)Placeholder

这有可能吗?会很棒,因为我正在尝试将外部生成的条形码插入到我的文档中......

【问题讨论】:

【参考方案1】:

这些都是“文本字段”,一些信息和宏示例在 Andrew Pitonyak 的 OpenOffice Macros Explained 一书中(可从http://www.pitonyak.org/oo.php 下载免费的 pdf 文件)。 wiki page 也有一些不错的背景。

表单控件(来自工具栏“表单控件”)被命名,因此它们在使用宏时具有优势。但是,文本字段 - 您在文档中拥有的那种 - 没有命名,因此您必须循环浏览文档中的所有字段,或突出显示特定的文本运行并循环浏览突出显示区域内的字段以找到一个你在追求。 Pitonyak 文档提供了这两种方法的示例。

假设文档只有一个输入字段,此 StarBasic 代码将打印其当前值:

Sub DisplayFields

Dim oEnum As Object
Dim oField As Object

oEnum = ThisComponent.getTextFields().createEnumeration()
Do While oEnum.hasMoreElements()
    oField = oEnum.nextElement()
    If oField.getPresentation(True) = "Input field" Then
        Print "Input field contents: " & oField.getPresentation(False)
        Exit Do
    End If
Loop

End Sub

据我所知,没有 API 可以将占位符替换为其指定的内容。调度程序可能有一种方法-list of dispatch commands 诱人地包含“FieldDialog”-但我找不到任何文档或示例。

我认为您要做的就是找到该字段,将光标放在那里,插入图像,然后删除占位符字段。更多 StarBasic 代码(再次假设文档中只有一个占位符字段):

Sub InsertImage

Dim oEnum As Object
Dim oField As Object
Dim oAnchor As Object
Dim oText As Object
Dim oCursor As Object
Dim FileName As String
Dim FileURL As String
Dim objTextGraphicObject As Object

oEnum = ThisComponent.getTextFields().createEnumeration()
Do While oEnum.hasMoreElements()
    oField = oEnum.nextElement()
    If oField.getPresentation(True) = "Placeholder" Then
        oAnchor = oField.Anchor
        oText = oAnchor.getText()
        oCursor = oText.createTextCursorByRange(oAnchor.getEnd)

        FileName = "C:\after zoo.JPG"
        FileURL = convertToURL(FileName)
        objTextGraphicObject = ThisComponent.createInstance("com.sun.star.text.TextGraphicObject") 

        REM Optional to set the size
'       Dim objSize as New com.sun.star.awt.Size
'       objSize.Width = 3530
'       objSize.Height = 1550
'       objTextGraphicObject.setSize(objSize)
        objTextGraphicObject.GraphicURL = FileURL
        oText.insertTextContent(oCursor.Start, objTextGraphicObject, false)

        oField.dispose()
        Exit Do
    End If
Loop

End Sub

【讨论】:

以上是关于如何检索输入字段的值并使用它来修改 LibreOffice Basic 宏中的占位符?的主要内容,如果未能解决你的问题,请参考以下文章

如何从文本字段中获取值并读取按键事件

PHP如何取得mysql字段值并记算时间?

由 AJAX 设置的 HTML 输入字段值并捕获该事件

如何通过 jQuery+Codeigniter 获取值并显示在输入字段中?

如何获取新值并取消文本输入字段中的事件?

如何克隆隐藏输入的值并附加到另一个 div?