![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Пытаюсь разобраться по работе delphi с таблицами excel. Возникли проблемы с использованием некоторых функций. Собственно сами функции:
Модули ComObj, ActiveX подключены. var MyExcel: OleVariant; - глобальная переменная 1. Определяем запущен ли excel Код:
function CheckExcelRun: boolean; begin try MyExcel:=GetActiveOleObject(ExcelApp); Result:=True; except Result:=false; end; end; 2.После создания рабочей книги функцией Код:
function AddWorkBook(AutoRun:boolean=true):boolean; begin if CheckExcelRun then begin MyExcel.WorkBooks.Add; Result:=true; end else if AutoRun then begin RunExcel; MyExcel.WorkBooks.Add; Result:=true; end else Result:=false; end; пытаюсь ее сохранить вызовом функции Код:
function SaveWorkBook(FileName:TFileName; WBIndex:integer):boolean; begin try MyExcel.WorkBooks.Item[WBIndex].SaveAs(FileName); if MyExcel.WorkBooks.Item[WBIndex].Saved then Result:=true else Result:=false; except Result:=false; end; end; но компилятор выдает ошибку при вызове функции Not enought actual parameters Could not compile used unit ..... Последний раз редактировалось Admin, 18.05.2017 в 19:25. |
|
#2
|
|||
|
|||
|
try this:
Код:
uses ComObj, Excel;
var Excel: OleVariant;
Excel := CreateOleObject('EXCEL.Application');
Excel.Application.Workbooks.Add;
Excel.Application.Workbooks[1].SaveAs('c:\test.xlsx', xlWorkbookDefault); // or xlOpenXMLWorkbook (51)
Excel.Application.Quit; |
|
#3
|
|||
|
|||
|
Все равно та же ошибка.
Код:
unit Unit1;
interface
uses
ComObj, ActiveX, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
MyExcel: OleVariant;
const
ExcelApp = 'Excel.Application';
implementation
function CheckExcelInstall:boolean;
var
ClassID: TCLSID;
Rez : HRESULT;
begin
Rez := CLSIDFromProgID(PWideChar(WideString(ExcelApp)), ClassID);
if Rez = S_OK then
Result := true
else
Result := false;
end;
function CheckExcelRun: boolean;
begin
try
MyExcel:=GetActiveOleObject(ExcelApp);
Result:=True;
except
Result:=false;
end;
end;
function RunExcel(DisableAlerts:boolean=true; Visible: boolean=false): boolean;
begin
try
if CheckExcelInstall then
begin
MyExcel:=CreateOleObject(ExcelApp);
MyExcel.Application.EnableEvents:=DisableAlerts;
MyExcel.Visible:=True;
Result:=true;
end
else
begin
MessageBox(0,'Ïðèëîæåíèå MS Excel íå óñòàíîâëåíî íà âàøåì êîìïüþòåðå','Îøèáêà',MB_OK+MB_ICONERROR);
Result:=false;
end;
except
Result:=false;
end;
end;
function AddWorkBook(AutoRun:boolean=true):boolean;
begin
if CheckExcelRun then
begin
MyExcel.WorkBooks.Add;
Result:=true;
end
else
if AutoRun then
begin
RunExcel;
MyExcel.WorkBooks.Add;
Result:=true;
end
else
Result:=false;
end;
function SaveWorkBook(FileName:TFileName; WBIndex:integer):boolean;
begin
try
MyExcel.WorkBooks[1].SaveAs('c:\test.xlsx',xlWorkbookDefault);
if MyExcel.WorkBooks[1].Saved then
Result:=true
else
Result:=false;
except
Result:=false;
end;
end;
{$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject);
begin
CheckExcelInstall;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
RunExcel;
AddWorkBook;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SaveWorkBook;
end;
end.Последний раз редактировалось Admin, 20.05.2017 в 10:38. |
|
#4
|
|||
|
|||
|
Что не так ?
|
|
#5
|
|||
|
|||
|
Не так - код надо в посте правильно оформлять.
По поводу кода. У меня вот это работает: Код:
procedure TForm1.Button1Click(Sender: TObject);
const
xlWorkbookDefault = 51;
var
Excel : OleVariant;
begin
Excel := CreateOleObject('EXCEL.Application');
Excel.Application.Workbooks.Add;
Excel.Application.Workbooks[1].SaveAs('C:\Users\Michael Nilov\Documents\test.xls', xlWorkbookDefault);
Excel.Application.Quit;
Excel := null;
end;Последний раз редактировалось lmikle, 21.05.2017 в 00:35. |
|
#6
|
|||
|
|||
|
А как реализовать проверку программой наличия уже сохраненного файла ?
|
|
#7
|
|||
|
|||
|
Цитата:
Подскажите пожалуйста как сделать чтобы не выскакивало окно подтверждения сохранения ? А еще если нажать отмену сохранения - то вылетает ошибка. |