Можно ли копировать записи в базу libreoffice

#libreoffice-base

#libreoffice-base

Вопрос:

Запуск версии 5.2.2.2 LibreOffice в Linux.

Я оцениваю замену использования интерфейса MS-Access для серверной части таблицы Postgres, в первую очередь потому, что Microsoft, похоже, жаждет доступа к EOL. Я читал, что LibreOffice Base является хорошей альтернативой, и действительно, похоже, что во всех отношениях, кроме одного. В интерфейсе в стиле таблицы / электронной таблицы я не могу скопировать запись в таблице в конец таблицы, где я затем внес бы изменения (чтобы избежать нарушений первичного ключа).

Я поискал в Google, и, похоже, я не первый, кто столкнулся с этим. Это удивительно, потому что можно было бы подумать, что это будет довольно простая вещь, которую хотелось бы сделать / поддержать. Один парень написал макрос для этого. Но вызов макроса wojuld должен выполняться нажатием кнопки в форме. Мы не хотим использовать формы или нажимать кнопки, поэтому я не одобряю это.

Мне было интересно, знает ли кто-нибудь способ обойти эту дыру, предпочтительно, выполнив что-то интуитивно понятное, например, ^c для копирования и ^v для вставки в пустую строку внизу таблицы. Мы используем 5.2.2.2 . Поддерживали ли они это в более поздних версиях?

Заранее спасибо.

Комментарии:

1. Обновление: я получил доступ к версии 7.0.1.2. Та же проблема:-(

2. «Один парень написал макрос для этого». — Не могли бы вы предоставить ссылку?

Ответ №1:

Представление табличных данных не имеет большого количества функций. То, что вы хотите, можно сделать различными способами с помощью форм, например, с помощью элемента управления таблицей. Но поскольку вам явно не нужны формы, вот один из способов, который должен сработать. Этот код макроса написан на 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 Объект содержит всю информацию, необходимую для получения данных скопированной строки. Используйте инструмент самоанализа, такой как МРТ, для отображения свойств и методов объекта. Затем вам нужно будет написать код для вставки новой записи в ту же таблицу с этими значениями, за исключением создания другого первичного ключа.

В качестве ссылки на этот ответ я нашел PDF-файл по адресу https://fivedots.coe.psu.ac.th /~ad/jlop/chaps/43. Using the Clipboard.pdf, в котором содержится немало полезной информации, в том числе раздел, посвященный Base. Однако это очень продвинутое кодирование макросов. Как предлагалось ранее, обычным решением было бы использовать формы, и даже это может быть не особенно просто, поскольку базовые макросы обычно сложнее, чем макросы Writer или Calc.

Еще одна идея: вы пробовали pgAdmin, чтобы узнать, делает ли он то, что вам нужно? Он может редактировать данные таблицы, если я правильно помню.

Не забудьте также опубликовать сообщение на форуме AskLO со ссылкой на этот вопрос. Ратслингер там эксперт по всем вещам Base.

Редактировать:

Я думал, что формы могут обрабатывать по одной записи за раз.

Вовсе нет. Мастер форм может создать элемент управления таблицей, который отображает все записи. На 5-м шаге мастера написано «Упорядочить элементы управления в вашей форме», которые, похоже, являются тем местом, где выбран элемент управления таблицей. Для меня управление таблицей было по умолчанию.

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

Мастер ограничен и не создает очень хороших форм. Итак, что я часто делаю, так это использую мастер для создания начальной формы, а затем использую представление дизайна формы и навигатор форм, чтобы удалить большую часть того, что он создал, и добавить таблицы и элементы управления по своему выбору структуры / отношений, редактируя элементы управления, чтобы указать SQL или поля, которые сообщают, как данные формыподключено.

Комментарии:

1. Спасибо Тебе, Джим, за ответ и код. » То, что вы хотите, можно сделать различными способами с помощью форм, например, с помощью элемента управления таблицей. » Я заинтригован! Не могли бы вы дать мне подход к этому вопросу на высоком уровне? Я думал, что формы могут обрабатывать по одной записи за раз.