Имя: Пароль:
1C
1C 7.7
v7: Как указать способ сохранения в LibreOffice (или OpenOffice), в коде?
0 aka AMIGO
 
27.08.15
11:08
Макрос эту операцию "Сохранить как", почему-то не отлавливает.

Пример взят отсюда: Книга знаний: Интеграция OpenOffice Calc с 1С 7.7

там операторы сохранения в "Excel 97" такие:
SaveParam = scr.Eval("ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
   SaveParam.Name = "FilterName";
   SaveParam.Value = "MS Excel 97";
   scr.CodeObject.SetItem(0,SaveParam);
   Document.storeToURL("file:///c:/Test.xls",Массив);

Мне-же надо в Excel 2007..
Поискал в инете, что-то не видно..
1 aka AMIGO
 
27.08.15
11:10
да, MS Office у меня на компе не установлен
2 alex4x
 
28.08.15
11:05
А можно в HTML сохранить и потом открыть в опен офисе!
Я так делал.
3 mehfk
 
28.08.15
11:09
4 aka AMIGO
 
28.08.15
11:12
(2) не, это для меня непреодолимо :)
(3) вот, спасибо! а то я уж отчаялся получить инфу :)
5 mehfk
 
28.08.15
11:12
Calc MS Excel 2007 XML
6 mehfk
 
28.08.15
11:13
7 aka AMIGO
 
28.08.15
11:34
(5) (6) жаль, если я правильно понял, для 2007 возможен только IMPORT

Ладно, спасибо в любом случае, а мои бушки обойдутся и *.xls в 95-м :)
8 aka AMIGO
 
28.08.15
11:43
Функция мПрочитатьТабличныйДокументИзOpenOffice(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1)
    ОчиститьОкноСообщений();
    Попытка
        scr = СоздатьОбъект("MSScriptControl.ScriptControl");
        scr.language = "javascript";
        scr.eval("MyArray=new Array()");
        ServiceManager=СоздатьОбъект("com.sun.star.ServiceManager");
        scr.AddObject("ServiceManager",ServiceManager);
        scr.eval("MyArray[0]=ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
        scr.eval("MyArray[0].Name='Hidden'");
        scr.eval("MyArray[0].Value=true");
        Массив = scr.eval("MyArray");
        
        Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
        Document = Desktop.LoadComponentFromURL("file://localhost/"+ИмяФайла, "_blank", 0, Массив);
        
        Листы = Document.getSheets();
        //Лист = Листы.getByIndex(0);
        Лист = Листы.getByIndex(1);
    Исключение
        Сообщить("Ошибка.");
        Возврат "-1";    
    КонецПопытки;
    
    
    ТабличныйДокумент=Document;
    
    
    oCell = Лист.GetCellbyPosition(0, 0);
    oCursor = Лист.createCursorByRange(oCell);
    oCursor.GotoEndOfUsedArea(1);
    aAddress = oCursor.RangeAddress;
    ВсегоКолонок = aAddress.EndColumn;
    ВсегоСтрок = aAddress.EndRow;
    

    Сообщить("Количество строк в документе: " + (ВсегоСтрок+1) + "
    |Количество столбцов в документе: " + (ВсегоКолонок+1));
    
    
      begCol = 0;
    begRow = 1;
    endCol = ВсегоКолонок-1;
    endRow = ВсегоСтрок;
    
    
    //rem -- из макроса --------------------------------------------------------------------
    //dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    //
    //dim args1(0) as new com.sun.star.beans.PropertyValue
    //args1(0).Name = "Nr"
    //args1(0).Value = 2
    //
    //dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())
    //rem ----------------------------------------------------------------------
    //dim args2(0) as new com.sun.star.beans.PropertyValue
    //args2(0).Name = "ToPoint"
    //args2(0).Value = "$A$487:$I$492"
    //
    //dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
    //
    //rem ----------------------------------------------------------------------
    //dim args3(0) as new com.sun.star.beans.PropertyValue
    //args3(0).Name = "Flags"
    //args3(0).Value = "SVDFN"
    //
    //dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args3())
    
    Лист = Листы.getByIndex(0); //потому, что далее: "JumpToTable"
    
    dispatcher = ServiceManager.createInstance("com.sun.star.frame.DispatchHelper");
    
    scr.eval("args1=new Array()");
    scr.eval("args1[0]=ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
    scr.eval("args1[0].Name = 'Nr'");
    scr.eval("args1[0].Value = 2"); //номер листа для чистки
    args = scr.eval("args1");
    
    dispatcher.executeDispatch(document.CurrentController.Frame, ".uno:JumpToTable", "", 0, args);
    
    scr.eval("args2=new Array()");
    scr.eval("args2[0]=ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
    scr.eval("args2[0].Name='ToPoint'");
    scr.eval("args2[0].Value='$A$1:$I$"+endRow+"'");
    
    args = scr.eval("args2");
    
    //dispatcher = ServiceManager.createInstance("com.sun.star.frame.DispatchHelper");
    dispatcher.executeDispatch(Document.CurrentController.Frame, ".uno:GoToCell", "", 0, args);
    
    scr.eval("args3=new Array()");
    scr.eval("args3[0]=ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
    scr.eval("args3[0].Name = 'Flags'");
    scr.eval("args3[0].Value = 'SVDFN'");
    args = scr.eval("args3");
    
    dispatcher.executeDispatch(document.CurrentController.Frame, ".uno:Delete", "", 0, args);

    scr.eval("Массив=new Array()");
    Массив=scr.eval("Массив");

    SaveParam=Document.setPropertyValue("FilterName","MS Excel 97");
    scr.eval("Массив[0]=ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
    scr.eval("Массив[0].Name='FilterName'");
    scr.eval("Массив[0].Value='MS Excel 97'");
    Document.storeToURL("file:///" + "C:/ДругоеСТО/"+"Отчет.xls",Массив);    
    Document.unLockControllers();
    Document.removeActionLock();
    
    
    Document.Close(-1);
    
    Возврат "+1";
    
    
КонецФункции
9 aka AMIGO
 
28.08.15
11:47
Вот что получилось из моих попыток.

ИмяФайла, что читается в начале кода = файл.xlsm
выходной файл Отчет.xls

Сформирован правильно, бантики развешивать - уже понтов нет, есть очередное задание-хотелка, ей и буду заниматься :)
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn