Открытие нескольких документов в одном окне с помощью UNO
У меня есть скрипт на Python с использованием Pyuno, который извлекает данные из многих файлов Excel.
Моя проблема в том, что для каждого файла я открываю и закрываю окно с
url = unohelper.systemPathToFileUrl(os.path.abspath(file_name))
file = desktop.loadComponentFromURL(url, "_blank", 0, () )
а также
file.close(True)
Есть ли способ извлечь данные из файлов, не открывая окно вообще? Или хотя бы без открытия нового окна для каждого файла?
1 ответ
Это открывает документ без отображения:
// 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);