Показать сообщение отдельно
Старый 25.03.2002, 08:57   #13  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Все. Проблема решена.

X++:
    COM ExApp,Wbs,Wb,Wss,Ws,Rng;

    ExApp = new COM("Excel.Application");
    ExApp.Visible(True);
    Wbs = ExApp.Workbooks();
    Wb = Wbs.Add();
    Wss = Wb.WorkSheets();
    Ws = Wss.Add();
    Rng = Ws.Range("A1");
    Rng.Value2(1);
Вот так - работает. Похоже все оказалось гораздо проще.

Как я понял:

1. Аксапта не допускает использовать конструкции такого вида "%.%.%" с объектами типа COM, то есть такое выражение следует разбить на два таких "%.%". Если мы нарушаем это правило, то Аксапта ругается - "Таблица находится вне диапазона или не существует".
2. При этом Аксапта на этапе компиляции не проверяет корректность вызываемых методов. То есть мы можем написать: ExApp.ProsoMetod() и Аксапта это откомпилирует, а ошибка появится только во время выполнения.

P.S.

Если последнюю строку заменить на:

Rng.Value(1);

то этот вариант перестанет работать в Аксапте, хотя он прекрасно работает в Worde, Delphi и т.д.

Не понятно.

P.S.

Цитата:
rkouznet
Только если tlb импортировано.
Я конечно могу ошибаться, но по-моему это не так. По крайне мере в Tools/References напротив пункта Microsoft Word.. галочка не стоит. Кроме того, следующий код:

X++:
procedure TForm1.Button1Click(Sender: TObject);
var ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData  : Variant;
begin
  ExcelApp := CreateOleObject('Excel.Application');
  Workbook := ExcelApp.WorkBooks.Add;
  WorkBook.WorkSheets[1].Cells[1, 1]:='11';
  ExcelApp.Visible:=true;
end;
прекрасно работает в Delphi без импортирования tlb.