Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TOleContainer и Excel


Deltas ©   (2012-03-07 13:33:00) 

Можно ли сделать так, чтобы внутри котейнера отрисовывались ячейки листа не с позиции А1, а с другой... например с B2. То есть что-то вроде свойств TopRow, LeftColumn?


Deltas   (2012-03-11 17:29:00) [1]

procedure TForm1.Button1Click(Sender: TObject);
var
 wb: ExcelWorkbook;
 ws: ExcelWorksheet;
begin
 if Supports(OleContainer1.OleObjectInterface, ExcelWorkbook, wb) then
   if (wb.Sheets.Count > 0) and Supports(wb.Sheets[1], ExcelWorksheet, ws) then
     ws.Application.ActiveWindow.SmallScroll(1, 0, 0, 0);
end;


Так работает, но только если объект OLE открыт в серверном приложении (MS Office). В противном случае, ActiveWindow имеет значение nil. Хотелось бы крутить таблицу Excel туда-сюда без открытия листа в серверном приложении. Например, значения ячеек я ведь могу записать без открытия объекта в серверном приложении.


Deltas   (2012-03-11 17:18:00) [2]

Sub Макрос1()
'
' Макрос1 Макрос
'

'
   ActiveWindow.SmallScroll ToRight:=1
   ActiveWindow.SmallScroll Down:=1
End Sub

Пытаюсь сделать то же самое из Delphi:
В OleContainer1 (TOleContainer) создаю объект класса 'Excel.Sheet.8'.

procedure TForm1.Button1Click(Sender: TObject);
var
 wb: ExcelWorkbook;
 ws: ExcelWorksheet;
 v: Variant;
begin
 OleContainer1.Run;
 if Supports(OleContainer1.OleObjectInterface, ExcelWorkbook, wb) then
   if (wb.Sheets.Count > 0) and Supports(wb.Sheets[1], ExcelWorksheet, ws) then
 begin
   v := ws;
   v.ActiveWindow.SmallScroll.ToRight := 1;
 end;
end;


При нажатии Button1 получаю ошибку 'Method 'ActiveWindow' not supported by automation object'.


sniknik   (2012-03-11 17:01:00) [3]

без разницы, что угодно делается одинаково... - записываешь макрос, смотришь код.


Deltas   (2012-03-11 16:58:00) [4]

А каким образом можно прокрутить область листа, открытого в Microsoft Excel, т.е. чтобы верхняя левая ячейка была b2, например?


Deltas   (2012-03-07 21:37:00) [5]

Спасибо.


sniknik   (2012-03-07 13:51:00) [6]

Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 07.03.2012
'

'
   Selection.EntireRow.Hidden = True
   Selection.EntireColumn.Hidden = True
End Sub


Наверх

Титульная страница Поиск, карта сайта Написать письмо