当前位置: 首页 > 知识库问答 >
问题:

LibreOffice-如何通过python宏创建文件对话框?

左丘季
2023-03-14

我想知道是否可以创建一个标准的文件对话框,通过python宏保存pdf。我试图根据这个过时的文档编写一些代码:wiki。openoffice。但LibreOffice在执行后崩溃:

import os
import uno
import sys
import traceback
from com.sun.star.ui.dialogs.TemplateDescription import FILESAVE_SIMPLE

def file_dialog():
    try:
        oCtx = uno.getComponentContext()
        oServiceManager = oCtx.getServiceManager()

        oFilePicker = oServiceManager.createInstanceWithArgumentsAndContext(
                'com.sun.star.ui.dialogs.FilePicker',
                (FILESAVE_SIMPLE,),
                oCtx
            )

        oFilePicker.Title = 'Export as'

        #oDisp = oFilePicker.Text

        oFilePicker.execute()

    except:
        pass
        #oDisp = traceback.format_exc(sys.exc_info()[2])

最后我需要传递选定的路径来编写文档,但是oDisp=oFilePicker。文本返回

有人有这方面的经验吗?


共有2个答案

邹俊拔
2023-03-14

给出并接受答案(因为问题是交叉发布的!)在这里:

import uno
from com.sun.star.beans import PropertyValue

#shortcut:
createUnoService = (
        XSCRIPTCONTEXT
        .getComponentContext()
        .getServiceManager()
        .createInstance 
                    )

def pypdf_test():

    desktop = XSCRIPTCONTEXT.getDesktop()
    doc = desktop.getCurrentComponent()

    # filter data
    fdata = []
    fdata1 = PropertyValue()
    fdata1.Name = "SelectPdfVersion"
    fdata1.Value = 1
    fdata2 = PropertyValue()
    fdata2.Name = "Quality"
    fdata2.Value = 100
    fdata.append(fdata1)
    fdata.append(fdata2)

    args = []
    arg1 = PropertyValue()
    arg1.Name = "FilterName"
    arg1.Value = "writer_web_pdf_Export"
    arg2 = PropertyValue()
    arg2.Name = "FilterData"
    arg2.Value = uno.Any("[]com.sun.star.beans.PropertyValue", tuple(fdata) )
    args.append(arg1)
    args.append(arg2)
    fileurl = FilePicker()
    if fileurl:        
        doc.storeToURL( fileurl, tuple(args) )

def FilePicker(path=None, mode=1):
    """
    Datei öffnen:  `mode in (0, 6, 7, 8, 9)`
    Datei Schreiben `mode in (1, 2, 3, 4, 5, 10)`
    see: ('''http://api.libreoffice.org/docs/idl/ref/
            namespacecom_1_1sun_1_1star_1_1ui_1_1
            dialogs_1_1TemplateDescription.html''' )
    """

    filepicker = createUnoService( "com.sun.star.ui.dialogs.OfficeFilePicker" )
    if path:
        filepicker.setDisplayDirectory(path )
    filepicker.initialize( ( mode,) )
    if filepicker.execute():
        return filepicker.getFiles()[0]  
关学
2023-03-14

我在oFilePicker物体上用了X光。有两个有趣的方法叫做setCurrentFilter和appendFilterGroup。仅根据名称,它们可能用于过滤可见的文件类型。不幸的是,我不知道如何使用它们。

同样使用X射线,我确定文本不是oFilePicker对象的方法或属性。我不确定代码片段在那里要做什么?如果检索文件路径,1)需要在。执行和2)所选文件路径存储为字符串数组,因此必须从数组中取出该路径。我在OpenOffice中的大部分工作都是在StarBasic中完成的;下面是打印用户选择的文件路径的基本工作示例:

Sub TestFilePicker
    oFilePickerDlg = createUnoService( "com.sun.star.ui.dialogs.FilePicker" )
    oFilePickerDlg.setTitle("My test title")

    If oFilePickerDlg.execute() > 0 Then
        Print ConvertFromURL(oFilePickerDlg.Files(0))
    End If

End Sub
 类似资料:
  • XlsxWriter是一个Python的第三方模块,用来创建Excel的xlsx文件。 ################################## # # A simple example of some of the features of the XlsxWriter Python module. # # Copyright 2013-2020, John McNamara, jmc

  • 问题内容: 我需要在JavaFX中创建一个对话框。我知道我可以通过修改模式,所有者和可调整大小的属性来使舞台表现得像对话框。 但是,如何从舞台窗口中隐藏“最小化”和“最大化”按钮?典型的对话框只有“关闭”按钮。 问题答案: 在Windows 7下,在显示窗口之前初始化为StageStyle.UTILITY将创建一个仅具有关闭按钮而没有最小化或最大化按钮的窗口: 如果您需要一整套基本的JavaFX对

  • 我需要用JavaFX创建一个对话框。我知道我可以通过修改modal、owner和resizable属性使Stage的行为像一个对话框。 但是我如何从舞台窗口隐藏“最小化”和“最大化”按钮呢?典型的对话框只有“关闭”按钮。

  • 问题内容: 我对Python中的鸡蛋文件有疑问。 我有很多按包组织的Python代码,并且我试图创建egg文件。我正在按照说明进行操作,但是它们很常见。 据此,看来我需要有一个setup.py文件。 您能告诉我我需要在setup.py文件中放入什么以及它应该放在哪里吗? 我想足以创建setup.py,然后启动“ setup.py bdist_egg”来获取egg文件。能否请你确认? 是否可以在鸡蛋

  • 问题内容: 我正在尝试在每天创建目录的目录中创建日志,但是fileHandler没有创建目录,而是其抛出异常 无法获取C:\ dir_date \ Logging.txt的锁 (此处dir_date不存在,我正在尝试创建登录到该目录)。我可以通过“ fileHandler”创建目录吗? log4J甚至可以创建目录(如果不存在),这是否可以通过fileHandler进行? 问题答案: julFile

  • 问题内容: 我对编程和python语言非常陌生。 我知道如何在python中打开文件,但问题是如何将文件作为函数的参数打开? 例: 这是我写出代码的方式: 问题答案: 您可以轻松地传递文件对象。 然后在您的函数中,返回行列表 另一个技巧是,python文件对象实际上具有读取文件行的​​方法。像这样: 第二种方法,就像您的功能一样。您不必再次调用它。 更新 这里是您应该如何编写代码的方法: 第一种方