0

我在 python 中有使用 pyuno 从许多 excel 文件中提取数据的脚本。

我的问题是,对于我打开和关闭一个窗口的每个文件

url = unohelper.systemPathToFileUrl(os.path.abspath(file_name))
file = desktop.loadComponentFromURL(url, "_blank", 0, () )

file.close(True)

有什么方法可以在不打开窗口的情况下从文件中提取数据?或者至少不为每个文件打开一个新窗口?

4

1 回答 1

0

这将打开一个文档而不显示:

// Call the bootstrap to get the Component context
com.sun.star.uno.XComponentContext oComponentContext = null;
try
{
    String oooExeFolder = "C:/Program Files/OpenOffice.org 3/program/";
    oComponentContext = BootstrapSocketConnector.bootstrap(oooExeFolder);
}
catch(com.sun.star.comp.helper.BootstrapException ex)
{
    System.out.println(ex.getMessage());
}

if(oComponentContext != null)
{

    com.sun.star.lang.XComponent oComponent;
    com.sun.star.sheet.XSpreadsheetDocument oSpreadDocument;
    com.sun.star.frame.XComponentLoader oComponentLoader;
    try
    {
        com.sun.star.lang.XComponent oComponent;
            // Get the service manager
        com.sun.star.lang.XMultiComponentFactory oMultiComponentFactory =
                oComponentContext.getServiceManager();
            // Create a new desktop instance
            Object oDesktop =
                oMultiComponentFactory.createInstanceWithContext(
                 "com.sun.star.frame.Desktop", oComponentContext);
             // Create a new component loader within our desktop
            oComponentLoader  =
                (com.sun.star.frame.XComponentLoader)
                com.sun.star.uno.UnoRuntime.queryInterface(
                com.sun.star.frame.XComponentLoader.class,
                                  oDesktop);
            /// Read the created file
            com.sun.star.beans.PropertyValue[] property = new com.sun.star.beans.PropertyValue[2];
            property[0] = new com.sun.star.beans.PropertyValue();
            property[0].Name = new String("ReadOnly");
            property[0].Value = new Boolean(true);
            property[1] = new com.sun.star.beans.PropertyValue();
            property[1].Name = new String("Hidden");
            property[1].Value = new Boolean(true);
            oComponent =
                oComponentLoader.loadComponentFromURL(
                        "file:///c:/test/sheetdoc.ods",
                        // "private:factory/swriter", //Blank document
                        "_default",                   // new frame
                        0,                      // no search flags
                        // read only
                        property);
            // Get the spread sheet
            oSpreadDocument =
                (com.sun.star.sheet.XSpreadsheetDocument)
                com.sun.star.uno.UnoRuntime.queryInterface(
                        com.sun.star.sheet.XSpreadsheetDocument.class, oComponent);
    }
catch(Exception  ex)
{
    System.out.println("An exception occurs at opening of document: "+ex.getMessage());
    return;
}

 } // end of if
 System.exit(0);
于 2010-08-16T10:38:05.760 回答