Все. Проблема решена.
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.