Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Разбить ячейки в таблице (OpenOffice.Writer)


Автор: Hang 15.12.2009, 12:25
Добрый день!

Ребята, прошу помощи. Нужно разбить ячейки таблицы в OpenOffice.Writer. Сколько уже в инете искал, ничего не могу подходящего найти. (Или может кто-нибудь знает как объединить ячейки, тоже информация будет полезна!)

ПО: OpenOffice.org 3.1

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  ServiceManager, Desktop : Variant;
  CoreReflection, PropertyValue, VA: Variant;
  Document: Variant;
  Table: Variant;
  objText, objCursor : Variant;
begin
  ServiceManager := CreateOleObject('com.sun.star.ServiceManager');
  CoreReflection := ServiceManager.createInstance('com.sun.star.reflection.CoreReflection');
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(PropertyValue);
  VA := VarArrayCreate([0, 0], varVariant);
  VA[0] := PropertyValue;

  Desktop := ServiceManager.createInstance('com.sun.star.frame.Desktop');
  Document := Desktop.LoadComponentFromURL('private:factory/swriter','_blank', 0,  VA);
  objText := Document.getText;
  //Create a cursor object
  objCursor := objText.createTextCursor;

  //Inserting some Table
  Table := Document.createInstance('com.sun.star.text.TextTable');
  Table.initialize(5, 4);  //row, column

  Document.getText.insertTextContent( objCursor, Table, false );

  //... ТУТ НАДО РАЗБИТЬ ЯЧЕЙКУ, НАПРИМЕР ЯЧЕЙКУ(1,1) НА 2 СТРОКИ
end;


Автор: Hang 15.12.2009, 13:10
Не знаю даже где еще глянуть. Уже весь OpenOffice.org Basic Guide проштудировал

Автор: Regulum 19.12.2009, 12:37
C помощью Dispatcher'a будет как-то так (точно не могу сказать, пишу по памяти, даже проверить в данный момент негде)

Код

var oDispatcher,oArgs:variant;
    CoreReflection,propertyValue0,propertyValue1,propertyValue2:variant;
    oFrame:variant;
begin

  oDispatcher:=StarOffice.createInstance('com.sun.star.frame.DispatchHelper');
  CoreReflection:=StarOffice.createInstance('com.sun.star.reflection.CoreReflection');
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(propertyValue0);
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(propertyValue1);
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(propertyValue2);
  oArgs:=VarArrayCreate([0,2],varVariant);
  propertyValue0.Name:='Amount';
  propertyValue0.Value:=2; //здесь указываем требуемое количество ячеек
  oArgs[0]:=propertyValue0;
  propertyValue1.Name:='Horizontal';
  propertyValue1.Value:=false;
  oArgs[1]:=propertyValue1;
  propertyValue2.Name:='Proportional';
  propertyValue2.Value:=false;
  oArgs[2]:=propertyValue2;
  oFrame:=Document.getCurrentController.getFrame;
  oDispatcher.executeDispatch(oFrame,'.uno:SplitCell','',0,oArgs);

end;


можно ещё поиграться с параметрами Horizontal и Proportional

и ещё, в ячейке должен находиться курсор (Кажется тот, который видимый (ViewCursor). У меня по крайней мере что-то в таком духе работало)

Автор: Hang 19.12.2009, 22:32
Regulum, я пробовал так сделать у меня не получилось. Может плохо пробовал. В строке 22 (твоего кода) вместо oFrame я использовал Document (значение переменной в моем коде). Я записывал Макрос, а потом на основе сформированного кода в макросе переносил его в Дельфи. Завтра попробую еще раз!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)