|  23.04.2010, 14:14 | #1 | 
| Участник | OpenOffice (Sheet orientation, cell format) 
			
			Доброго времени суток, уважаемые жители сего  замечательного форума!  Пытаюсь подружить ахапту с опенофисом (через COM), да все никак..нужна помощь.. Вопросы следующие: 1. Каким образом установить ориентацию листа, поля? Т.е. элементы pagesetup.. 2. Каким образом отформатировать дробное число с определенным количеством знаков после запятой?  Очень жду ответов, благодарю спасибками   
				__________________ ..в каждой программе есть хотя бы одна ошибка.. | 
|  | 
|  26.04.2010, 08:10 | #2 | 
| Участник | 
			
			ап. Неужели нет решения?.. мне достаточно намеков, в какую сторону копать..код приводить необязательно. 
				__________________ ..в каждой программе есть хотя бы одна ошибка.. | 
|  | 
|  26.04.2010, 08:55 | #3 | 
| Участник | 
			
			Для MS Office, стандартным путём поиска ответа на вопросы а как программно (через COM) сделать то-то и то-то, является запись макроса, и дальнейший анализ его кода. Благо делается это в два клика мышкой, а внутренний интерфейс (VBA) совпадает с внешним (COM). P.S.: Как с этим дело обстоит в OpenOffice я не знаю | 
|  | |
| За это сообщение автора поблагодарили: Alexanderrrr (1). | |
|  26.04.2010, 09:27 | #4 | 
| Участник | 
			
			Да, с майкрософт офисом все отлично.. Спасибо и на этом вот с опенфисом как быть..многое получилось сделать и границы и ширину колонок..а вот эти два момента пока никак не решу.. 
				__________________ ..в каждой программе есть хотя бы одна ошибка.. | 
|  | 
|  26.04.2010, 11:35 | #5 | 
| сибиряк | Цитата: Learn.OpenOffice.org.Spreadsheet.Macro.Programming.pdf "OpenOffice.org.BASIC Guide.pdf" OpenOffice_Macros_rus.pdf в принципе, они легко находятся через google   
				__________________ С уважением, Вячеслав. | 
|  | |
| За это сообщение автора поблагодарили: Alexanderrrr (1). | |
|  27.04.2010, 09:55 | #6 | 
| Участник | 
			
			Спасибо, почитал.. Решил сделать на основе template. Проблем меньше. 
				__________________ ..в каждой программе есть хотя бы одна ошибка.. | 
|  | 
|  17.06.2010, 14:58 | #7 | 
| Участник | 
			
			Долго бился с OO, конечно. В конце концов оказалось проще сделать выгрузку отчета на базе template (шаблона).  Вот пример создания экземпляра документа OO из шаблона: X++: void createdocument() { COM MyStruct; COM oDeskTop; int i; COMVariant arg; COMVariant byte; Array arr = new Array(Types::Class); ComDispFunction Func; COMVariant varArg1 = new COMVariant(); COMVariant var = new COMVariant(); str filepath; ; //Создание экземпляра OpenOffice.org OpenOffice = new Com("com.sun.star.ServiceManager"); oDeskTop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop"); MyStruct = OpenOffice.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); Func = new COMDispFunction(MyStruct, "Name", COMDispContext::PropertyPut); varArg1.bStr("AsTemplate"); Func.call(varArg1); Func = new COMDispFunction(MyStruct, "Value", COMDispContext::PropertyPut); varArg1.boolean(true); Func.call(varArg1); var = COMVariant::createFromCOM(MyStruct); arr.value(1,var); // Создание документа arg = COMVariant::createFromArray(arr); filepath = "file://///path_to_template"; oDocument = oDeskTop.LoadComponentFromURL(filepath, "_blank", 0, arg); } X++:     oSheets   = oDocument.getSheets();
    oSheet    = oSheets.getByIndex(0);X++: oRange = oSheet.getCellByPosition(5,0);
oRange.Setstring("Пример");X++:     #define.BOLD(150)
    #define.FONTNAME("Arial Cyr")
    #define.FONTHEIGHT(10)
;
oRange.setPropertyValue("CharWeight", #BOLD);
oRange.setPropertyValue("CharFontName", #FONTNAME);
oRange.setPropertyValue("CharHeight", #FONTHEIGHT);
oRange.setPropertyValue("HoriJustify",2);X++: oRange.merge(true);X++:     oColumn = oSheet.getColumns();
    oColumn_new=oColumn.getByIndex(0);
    oColumn_new.setPropertyValue("IsVisible", False);X++:     oColumn = oSheet.getColumns();
    oColumn_new=oColumn.getByIndex(0);
    oColumn_new.setPropertyValue("Width",2440);X++: void SetBorder(COM range,boolean _left=true,boolean _right=true,boolean _top=true,boolean _bottom=true) { COM MyStruct; ComDispFunction func; COMVariant varArg1 = new COMVariant(); ; MyStruct = OpenOffice.Bridge_GetStruct("com.sun.star.table.BorderLine"); func = new COMDispFunction(MyStruct, "OuterLineWidth", COMDispContext::PropertyPut); varArg1.int(1); func.call(varArg1); func = new COMDispFunction(MyStruct, "InnerLineWidth", COMDispContext::PropertyPut); varArg1.int(0); func.call(varArg1); func = new COMDispFunction(MyStruct, "LineDistance", COMDispContext::PropertyPut); varArg1.int(0); func.call(varArg1); if (_top) range.SetPropertyValue('TopBorder', MyStruct); if (_left) range.SetPropertyValue('LeftBorder', MyStruct); if (_right) range.SetPropertyValue('RightBorder', MyStruct); if (_bottom) range.SetPropertyValue('BottomBorder', MyStruct); } X++:     oRange = oSheet.getCellRangeByName("A1:B1");
    this.SetBorder(oRange);Надеюсь это кому-то поможет.. 
				__________________ ..в каждой программе есть хотя бы одна ошибка.. | 
|  | |
| За это сообщение автора поблагодарили: alexbn (1), lev (6), sable102 (1), CHESER85 (1). | |
|  03.04.2013, 14:59 | #8 | 
| Участник | 
			
			Подскажите пожалуйста. хочу добавить диапазон значении в таком виде. X++:     COM Document, Sheets, Sheet, Range;
    ArrayExtend_RU  line = new ArrayExtend_RU(Types::String,3);
    .....
    Sheets   = Document.getSheets();
    Sheet    = Sheets.getByIndex(0);
    Range    = Sheet.getCellRangeByName("A2:C2");
    line.value(1, "a");
    line.value(2, "b");
    line.value(3, "c");
    Range.Value2(line);X++:   : COM     "Value2". | 
|  | 
|  05.04.2013, 08:34 | #9 | 
| Участник | 
			
			Совсем не хочет строку вставлять он у меня, по всякому перепробовал Вставка диапазона в ОО делается методом setDataArray(). но не могу подобрать параметр, тип параметра для передачи. По всякому пробовал X++:     COM Document, Sheets, Sheet, Range;
    Array arr = new Array(Types::Class);
    COMVariant var;
............
    Sheets   = Document.getSheets();
    Sheet    = Sheets.getByIndex(0);
    Range    = Sheet.getCellRangeByName("A2:C2");
   
    arr.value(1, COMVariant::createFromStr("a"));
    arr.value(2, COMVariant::createFromDate(systemdateget()));
    arr.value(3, COMVariant::createFromInt(1));
    var     = ComVariant::createFromArray(arr);
    Range.setDataArray(var);X++:     COM Document, Sheets, Sheet, Range;
    Array arr = new Array(Types::Class);
   
    COMVariant var_sf = new COMVariant(
                        COMVariantInOut::IN_OUT,
                        COMVariantType::VT_SAFEARRAY);
............
    Sheets   = Document.getSheets();
    Sheet    = Sheets.getByIndex(0);
    Range    = Sheet.getCellRangeByName("A2:C2");
   
    arr.value(1, COMVariant::createFromStr("a"));
    arr.value(2, COMVariant::createFromDate(systemdateget()));
    arr.value(3, COMVariant::createFromInt(1));
    
    var_sf.safeArray(arr, COMVariantType::VT_VARIANT);
    Range.setDataArray(var_sf);X++: : "setDataArray" COM- "<неизвестно>" 0x80020009 (DISP_E_EXCEPTION), : [automation bridge]com.sun.star.script.CannotConvertException in UnoConversionUtilities<T>::variantToAny! Message: conversion not possible!. | 
|  | 
|  08.04.2013, 13:44 | #10 | 
| Участник | 
			
			тишина, печаль(
		 | 
|  | 
|  09.04.2013, 11:39 | #11 | 
| Участник | 
			
			А что мешает написать метод, выводящий массив (или контейнер) поэлементно? X++: container string; ..... for (col = 1; col <= conlen(string); col++) { Cell = Sheet.getCellByPosition(col - 1, row - 1); Cell.Value = conpeek(string, col); } | 
|  | 
|  10.04.2013, 06:53 | #12 | 
| Участник | |
|  | 
|  10.04.2013, 07:20 | #13 | 
| Программатор | 
			
			медленно - не будет!   вообще тут много много много раз обсуждалось как быстро выгружать в эксель. TextBuffer, ADO и тд и тп. Оу сорри это опен офис, не знаю как там... Последний раз редактировалось Sada; 10.04.2013 в 07:22. | 
|  |