|
![]() |
#1 |
Участник
|
Долго бился с 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). |
Теги |
openoffice |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|