Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Линии в Excel


Автор: Foley 27.2.2006, 13:35
Как найти нарисованную линию в Excel и ее позицию и длину(или создать)?(не границы ячейки)

Автор: YurikGL 3.3.2006, 21:52
нужно пройтись по коллекции
ActiveSheet.Shapes...

Подробности можно посмотреть здесь http://forum.vingrad.ru/index.php?showtopic=84634

Автор: Foley 4.3.2006, 23:11
Статью я эту читал. Можно примерчик?

Автор: Albinos_x 5.3.2006, 07:10
добавить элемент коллекции просто, принцип такой же как в ворде (см. статью по указанной ссылке). покажу несколько примеров:
нарисовать линию:
Код
...
ExcelWorksheet1.Shapes.AddLine(70,150,120,160);
...

первые два параметра X,Y начала линии вторые два - конца.
нарисовать прямоугольник:
Код
...
ExcelWorksheet1.Shapes.AddShape(1,100,150,200,350);
...

второй и третий параметры - X,Y левого верхнего угла прямоугольника, следом два - правого нижнего.
первый параметр тип элемента коллекции:
1 - прямоугольник
2 - парралелограм
3 - трапеция
4 - ромб
5 - скруглённый прямоугольник
6 - восьмиугольник
и т.д.... можно посмотреть порядок открыв Excel - автофигуры - основные фигуры

все эти функции возращают элемент типа Shape, т.е. можно сделать так:
Код
...
var Sh:Shape;
begin
Sh:=ExcelWorksheet1.Shapes.AddLine(70,150,120,160);
// далее работаем с Sh
// допустим
Sh.Name:='MyLine'
...

тоже можно проделать и с OleVariant:
Код
...
var Sh:OleVariant;
begin
Sh:=ExcelWorksheet1.Shapes.AddLine(70,150,120,160);
// далее работаем с Sh
// допустим
Sh.Name:='MyLine'
...



Принцип же работы с элементами коллекции, также такой же как ворде (ещё немного похож на работу с таблицами в ворде).... т.е. сначало узнаём общее количество элементов коллекции на листе:
Код

var col:integer;
...
begin
col:=ExcelWorksheet1.Shapes.Count;

далее если они имеются, т.е. col<>0 выполняем нужные операции:
Код

var col:integer;
     i:integer
...
...
col:=ExcelWorksheet1.Shapes.Count;
if col<>0 then
   begin
   // перебираем коллекцию
   for i:=1 to col do
      begin
      // проверяем наша линия ли и вообще линия ли
      if ExcelWorksheet1.Shapes.Item(i).Name='Line 2' then
          begin
          // выполняем необходимые операции
          // выставляем позицию слева
          ExcelWorksheet1.Shapes.Item(i).Left:=158.25;  // по аналогии и с другими параметрами
          end;      
      end;
   end;
...

линия возращает name = Line через пробел идёт номер по порядку создания элементов коллекции, т.е. если первый прямоугольник, то у него будет имя = Rectangle 1, имя линии идущей следом будет = Line 2. Это если имена по умолчанию, т.к. имя можно и задать:
Код
...
ExcelWorksheet1.Shapes.Item(1).Name:='55555' ;
...

если хотим параметры выставлять в сантименрах, то это делается по аналогии с вордом:
Код
...
// позиция слева 2,5 см
ExcelWorksheet1.Shapes.Item(1).Left:=ExcelApplication1.CentimetersToPoints(2.5);
...



PS: то что здесь я написал, добавлено в статью по указанной ссылке

Автор: Foley 6.3.2006, 00:01
Albinos_x ну с меня тебе + горит, как тока власть появиться сразу отблагодарю 8оD...

Автор: Albinos_x 6.3.2006, 00:08
smile smile smile

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