可以在 libreoffice base 中复制记录

问题描述

在 Linux 上运行 LibreOffice 5.2.2.2 版。

我正在评估使用 MS-Access 前端到 Postgres 表后端的替代品,主要是因为 Microsoft 似乎渴望 EOL Access。我读到 LibreOffice Base 是一个不错的选择,事实上,它似乎只在一个方面。在表格/电子表格样式界面中,我似乎无法将表格中的记录复制到表格的末尾,然后在那里进行更改(以避免主键冲突)。

我用谷歌搜索了一下,看起来我不是第一个遇到这个问题的人。这是令人惊讶的,因为人们会认为这将是人们想要做/支持的一件非常基本的事情。一个人写了一个宏来做到这一点。但是调用宏 wojuld 必须通过单击表单中的按钮。我们不想使用表单或点击按钮,所以我不喜欢那个。

我想知道是否有人知道绕过这个洞的方法,最好是通过做一些直观的事情,比如 ^c 复制和 ^v 粘贴到表格底部的空行上。我们正在运行 5.2.2.2 。他们在以后的版本中支持这个吗?

提前致谢。

解决方法

表格数据视图没有很多功能。您可以通过各种方式使用表单完成您想要的操作,例如使用表格控件。但是由于您明确不想要表单,因此这是一种可行的方法。此宏代码使用 Python-UNO,但它可以适用于 LO Basic 或 Java。

from com.sun.star.datatransfer import DataFlavor,UnsupportedFlavorException

oDoc = XSCRIPTCONTEXT.getDocument()
ctx = XSCRIPTCONTEXT.getComponentContext()
oClip = ctx.getServiceManager().createInstanceWithContext(
    "com.sun.star.datatransfer.clipboard.SystemClipboard",ctx)
transferable = oClip.getContents()
dataFlavors = transferable.getTransferDataFlavors()
df = DataFlavor()
df.HumanPresentableName = "Data source Table"
df.MimeType = (
    'application/x-openoffice-dbaccess-table;'
    'windows_formatname="Data source Table"')
try:
    data = transferable.getTransferData(df)
    props = data
    for prop in props:
        if prop.Name == "Cursor":
            resultSet = prop.Value
            rownum = resultSet.Row
except UnsupportedFlavorException:
    msgbox("Clipboard does not have data of type {0}.".format(
        df.HumanPresentableName))

这个想法是复制一行,然后运行宏来创建新行,例如将其绑定到您选择的热键。 resultSet 对象包含获取复制行数据所需的所有信息。使用诸如 MRI 之类的内省工具来显示对象属性和方法。然后,您需要编写代码以在同一个表中插入一条具有这些值的新记录,但创建不同的主键。

作为此答案的参考,我在 https://fivedots.coe.psu.ac.th/~ad/jlop/chaps/43.%20Using%20the%20Clipboard.pdf 找到了一个 PDF,其中包含很多有用的信息,包括专门针对 Base 的部分。不过,这是非常高级的宏编码。如前所述,通常的解决方案是使用表单,即使那样也可能不是特别容易,因为 Base 宏通常比 Writer 或 Calc 宏更难。

还有一个想法:您是否尝试过 pgAdmin 以查看它是否满足您的需求?如果我没记错的话,它可以编辑表格数据。

也请务必在 AskLO 论坛上发帖,并附上指向此问题的链接。那边的 Ratslinger 是 Base 的所有方面的专家。

编辑

我认为表单可以;你一次处理一个记录。

完全没有。表单向导可以创建一个显示所有记录的表格控件。向导的第 5 步说“在表单上排列控件”,它看起来是选择表格控件的地方。对我来说,表格控件是默认设置。

表单建立在记录集上,只有一条主记录处于活动状态,类似于表数据视图。主记录可以以单一形式链接到其他记录、表和查询。就您而言,听起来您只需要处理一个表,所以这应该非常简单。

向导是有限的,不能生成很好的表格。所以我经常做的是使用向导创建一个起始表单,然后使用表单设计视图和表单导航器删除它创建的大部分内容并在我自己选择的结构/关系中添加表和控件,编辑控件以指定说明表单数据如何连接的 SQL 或字段。