Проблема с Excel через MgOle2Auto

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Проблема с Excel через MgOle2Auto

Сообщение Climber » 11.02.2009 11:03:03

Использую модуль MgOle2Auto и объект TMgOleController из него (ссылки нашел на этом форуме). Есть две проблемы.
1. Вот такой код:
Код: Выделить всё
  OC := TMgOleController.Create;
  OC.CreateOleObject('Excel.Application');
  OC.SetProperty('Visible',[True]);
  OC.CallFunction('Excel.Workbooks.Add', []);
Выдает ошибку на последней строке. Судя по трассировке - название функции написано неправильно (пробовал 'Excel.Workbooks.Add', 'Workbooks.Add').
Методом научного тыка (используя OC.CallFunctionByID(i, ['test']) с диапазоном i от 1 до 10000, удалось установить, что функция, например, номер 357 - это InputBox. Но гадать так можно долго. Функции Workbooks.Open и Workbooks.Add я так и не нашел.
2. Вот такой код:
Код: Выделить всё
procedure TForm1.Button2Click(Sender: TObject);
begin
  OC.CallFunctionByID(357, ['test']);
end;
приводит к тому, что в экселе появляется окно InputBox, но с иероглифами. Танцы с бубном с попытками преобразовывать друг в друга Ansi, WideString, Utf8 ни на что не влияют - иероглифы всегда одни и те же (правда, я плохо представляю, что во что надо преобразовывать). А в таком коде:
Код: Выделить всё
procedure TForm1.Button2Click(Sender: TObject);
var
  res: pvariant;
begin
  res:=OC.CallFunctionByID(357, ['test']);
  ShowMessage(res^);
end;
передача текста работает в одну сторону. В Inputbox'е иероглифы вместо 'test', а слово, которое я в Inputbox ввожу, выводится нормально (если латиница).
Эти проблемы связаны друг с другом? Что я делаю не так?
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Проблема с Excel через MgOle2Auto

Сообщение v-t-l » 12.02.2009 14:36:43

А разве такой синтаксис MgOle поддерживает?
Код: Выделить всё
'Excel.Workbooks.Add'

По моему, надо сначала получить от интерфейса Excel получить интерфейс Workbooks и от него уже вызывать Add.
Конкретней, см. примеры.
v-t-l
энтузиаст
 
Сообщения: 734
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Проблема с Excel через MgOle2Auto

Сообщение Climber » 13.02.2009 11:36:26

Какой синтаксис MgOle поддерживает, я не знаю. Все, что у меня есть в скачанном архиве - это такой пример:
Код: Выделить всё
uses MgActiveX, MgOle2Auto;

var
  OC: TMgOleController;
  OC1: TMgOleController;
   obj: TObject;
begin
  OC := TMgOleController.Create;
  OC1 := TMgOleController.Create;
  OC.CreateOleObject('Word.Application');
  OC1.OleObject := OC.OleObject;
  OC.Free;
  OC1.SetProperty('Visible',[True]);
  OC1.Free;
Попробую поискать еще что-нибудь...
А с передачей текста в Excel что делать?
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Проблема с Excel через MgOle2Auto

Сообщение yuray » 13.02.2009 14:31:47

Если проблема только с Excel, то можно воспользоваться внешней dll. Работа с Excel там уже реализована.
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 34

Рейтинг@Mail.ru