27.04.2018, 15:40
|
Прохожий
|
|
Регистрация: 27.04.2018
Сообщения: 1
Версия Delphi: Delphi 2005
Репутация: 10
|
|
Не работает подсчет количества книг Excel
Здравствуйте.
Бьюсь второй день. Задача простая. Записать данные в открытую книгу Excel. Если книга не открыта - открыть ее. Не могу правильно осуществить запись в открытую книгу. Дельфи ее не видит.
Код:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,OleServer, Excel2000, ExcelXP,ComObj;
type
TForm1 = class(TForm)
Button1: TButton;
OpenDialog1: TOpenDialog;
Edit1: TEdit;
Memo1: TMemo;
Button2: TButton;
ListBox1: TListBox;
ExcelApplication1: TExcelApplication;
Button3: TButton;
procedure Button3Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
countString: Integer;
public
{ Public declarations }
end;
function WorkBookIndex(WorkBookName: Ansistring): integer;
var
Form1: TForm1;
Buf, Buf2 : PByteArray;
Bufnew, Bufnew2 : PByteArray;
bpos : Integer;
bsize :Integer;
F, F2 : File;
E:variant;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
var
a_,i,n,k,cnt:integer;
WBk : OleVariant;
book: array of String;
ffname: String;
begin
k:=0;
ffname:='E:\2018\Работа_тест.xlsx';
try
E:=GetActiveOleObject('Excel.Application');
n:= E.Workbooks.Count;// Вот здесь считает n=0, независимо от количества открытых книг
SetLength(book,n+1);
if VarIsEmpty(E)=false then begin
k:=WorkBookIndex(ffname);
if k<>0 then
begin E.WorkBooks[k].Activate;
end; //if k
end;//if VarIsEmpty(E)=false
except
E := CreateOleObject('Excel.Application');
WBk := E.WorkBooks.Open(ffname);
end;
E.Visible := True;
end;
Проблема со строчкой n:= E.Workbooks.Count; Подскажите,пожалуйста, как исправить.
|