Как хранить временные данные для каждого открытого документа через UNO? - PullRequest
0 голосов
/ 23 мая 2018

У меня есть некоторые значения конфигурации (целые числа и строки), переданные в программу запуска, а затем необходимые и измененные в расширении.Они могут различаться в разных документах, но их нельзя сохранять вместе с ними.

Могу ли я сохранить их непосредственно в процессе LibreOffice?
У меня есть или я могу получить ссылку на документ как XStorable в любом случае.

До сих пор я пытался использовать XPropertyContainer.addProperty(...) в документе, но значения, которые я передаю, похоже, хранятся глобально вместо документа:

XDocumentPropertiesSupplier xDocumentPropertiesSupplier = UnoRuntime.queryInterface(XDocumentPropertiesSupplier.class, document);
XDocumentProperties xDocumentProperties = xDocumentPropertiesSupplier.getDocumentProperties();
XPropertyContainer xPropertyContainer = xDocumentProperties.getUserDefinedProperties();
xPropertyContainer.addProperty(propertyName, PropertyAttribute.TRANSIENT | PropertyAttribute.MAYBEDEFAULT, propertyValue);

1 Ответ

0 голосов
/ 23 мая 2018

В следующем коде Python значения различны для каждого документа и не сохраняются.

import uno
from com.sun.star.beans.PropertyAttribute import TRANSIENT
from com.sun.star.beans import UnknownPropertyException

def temp_prop():
    DIR = "/path/to/dir"
    LOG1 = DIR + "log1.txt"
    LOG2 = DIR + "log2.txt"
    PROPNAME = "myPropName"
    oDesktop = XSCRIPTCONTEXT.getDesktop()
    oDoc1 = oDesktop.loadComponentFromURL(
        "file:///" + DIR + "1.odt", "_default", 0, ())
    oDoc2 = oDesktop.loadComponentFromURL(
        "file:///" + DIR + "2.odt", "_default", 0, ())
    oDoc1props = oDoc1.getDocumentProperties().getUserDefinedProperties();
    oDoc2props = oDoc2.getDocumentProperties().getUserDefinedProperties();
    try:
        appendToFile(LOG1, oDoc1props.getPropertyValue(PROPNAME))
        appendToFile(LOG2, oDoc2props.getPropertyValue(PROPNAME))
    except UnknownPropertyException:
        appendToFile(LOG1, "Unknown Property")
        appendToFile(LOG2, "Unknown Property")
    oDoc1props.addProperty(PROPNAME, TRANSIENT, "a")
    oDoc2props.addProperty(PROPNAME, TRANSIENT, "b")
    appendToFile(LOG1, oDoc1props.getPropertyValue(PROPNAME))
    appendToFile(LOG2, oDoc2props.getPropertyValue(PROPNAME))
    oDoc1.store()
    oDoc2.store()
    oDoc1props = oDoc1.getDocumentProperties().getUserDefinedProperties();
    oDoc2props = oDoc2.getDocumentProperties().getUserDefinedProperties();
    appendToFile(LOG1, oDoc1props.getPropertyValue(PROPNAME))
    appendToFile(LOG2, oDoc2props.getPropertyValue(PROPNAME))

def appendToFile(fname, s):
    with open(fname, "a") as f: 
        f.write(s + ",")

Результаты:

logfile1: Unknown Property,a,a,
logfile2: Unknown Property,b,b,

Когда документы закрыты, а затемкод запускается снова, появляются те же самые результаты, доказывая, что свойство не сохраняется.

...