Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Вниз

Снова Excel и Delphi - plugin для Excel   Найти похожие ветки 

 
Roobee   (2004-10-03 11:12) [0]

Уважаемые мастера, подскажите, что я неправильно делаю:
создал dll, вызываю ее из макроса VBA, в качестве параметра передаю hWnd Excel. Что надо сделать чтобы получить в процедуре dll доступ к листам и ячейкам конкретной ОТКРЫТОЙ книги?

код dll
=========
library TestDll;

uses
 Windows, Excel97, Forms, Dialogs, SysUtils,
 Classes, Unit1 in "Unit1.pas" {Form1},
 Types97 in "Types97.pas";

{Определяем функцию как stdcall}
function GetSimpleText(var LangRus: Boolean): PChar; stdcall;
begin
 {В зависимости от LangRus возвращаем русскую (True) либо английскую (False) фразу}
 if LangRus then
   Result := PChar("Здравствуй, мир!")
 else
   Result := PChar("Hello, world!");
end;

function ShowDialog(): Boolean;
begin
 {Создаем экземпляр Form1 формы TForm1}
 Form1 := TForm1.Create(Application);
 {В Label1 выводим Msg}
 Form1.Label1.Caption := "Test form dll without parameters";
 {Возвращаем True только если нажата OK (ModalResult = mrOk)}
 Result := (Form1.ShowModal = idOk);// mrOk
 {Освобождаем память}
 Form1.Free;
end;

function ShowDialog4(var Msg: PChar): Boolean; stdcall;
begin
 {Создаем экземпляр Form1 формы TForm1}
 Form1 := TForm1.Create(Application);
 {В Label1 выводим Msg}
 Form1.Label1.Caption := Msg;
 {Возвращаем True только если нажата OK (ModalResult = mrOk)}
 Result := (Form1.ShowModal = idOk);// mrOk
 {Освобождаем память}
 Form1.Free;
end;

function ShowData(var hWnd : Integer): Boolean; stdcall;
var
  XlApp, XlBook, XlSheet, XlSheets, Range : Variant;
  s : string;
begin
  try
     XlApp  := hWnd; //CreateOleObject("Excel.Application");

     XlSheet  := XlApp.WorkBooks[1].Sheets[1]; // Active Sheet
     XlSheets := XlApp.Sheets; // Array of Sheets
     if VarType(XlApp) <> VarDispatch then begin  // If we are not connected with MsExcel
        ShowMessage("Ошибка подключения к MS Excel.");
        Result := False;
        Exit;
     end;
       s := XlSheet.Cells[1, 1];
       ShowMessage(s);
       Result := True;
  except
     XlApp.Quit;
     ShowMessage("Ошибка открытия OLE через MS Excel");
     Result := False;
  end;
end;

{Директива exports указывает, какие функции будут экспортированы этой DLL}
exports
  GetSimpleText, ShowDialog,
  ShowDialog4, ShowData;

begin

end.
============

объявление функций в VBA
============
Public Declare Function GetSimpleText Lib "TestDLL" (ByRef Msg As Boolean) As String
Public Declare Function ShowDialog Lib "TestDLL" () As Boolean
Public Declare Function ShowDialog4 Lib "TestDLL" (ByRef Msg As String) As Boolean
Public Declare Function ShowData Lib "TestDLL" (ByRef Msg As Long) As Boolean

=======
вызов функции из Excel (той, которая вызывает ошибку)

Sub Call8()
Dim flag As Boolean
Dim hWnd As Long
" stdcall
   hWnd = Application.hWnd
   flag = ShowData(hWnd)
End Sub

======

Функция вызывается, хэндл передается - но что с этим дальше делать, как получить доступ к Cells?

Заранее благодарю всех кто откликнется.


 
YurikGL ©   (2004-10-03 14:03) [1]

Может тебе что-то вроде этого надо?

 app := CreateOleObject("Excel.Application");
 App.Visible := True;
 App.activesheet.range["b1","b5"].formula:="То что мы хотим сюда записать";



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.038 c
3-1095888393
Relaxxx
2004-09-23 01:26
2004.10.17
Как заполнить ComboBox из Дата сета???


14-1095931164
Vetal
2004-09-23 13:19
2004.10.17
Посоветуйте красивые визуальные компоненты.


4-1095226248
Konrads
2004-09-15 09:30
2004.10.17
%SystemRoot%


1-1096529257
Term
2004-09-30 11:27
2004.10.17
Простой вопрос, как сделать что бы в TPageControl сделать нужную


14-1096539245
DSKalugin
2004-09-30 14:14
2004.10.17
Авторские права на ПО, патентование, контракт...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский