Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.05.2017, 11:47
derekt derekt вне форума
Прохожий
 
Регистрация: 18.05.2017
Сообщения: 6
Версия Delphi: delphi 7
Репутация: 10
По умолчанию Помогите с кодом delphi 7

Пытаюсь разобраться по работе 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  
Старый 18.05.2017, 19:13
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 6,925
Репутация: 49086
По умолчанию

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  
Старый 20.05.2017, 10:15
derekt derekt вне форума
Прохожий
 
Регистрация: 18.05.2017
Сообщения: 6
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Все равно та же ошибка.
Код:
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  
Старый 20.05.2017, 17:54
derekt derekt вне форума
Прохожий
 
Регистрация: 18.05.2017
Сообщения: 6
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Что не так ?
Ответить с цитированием
  #5  
Старый 21.05.2017, 00:25
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 6,925
Репутация: 49086
По умолчанию

Не так - код надо в посте правильно оформлять.

По поводу кода. У меня вот это работает:
Код:
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;
Delphi 7, Office 2003 Rus

Последний раз редактировалось lmikle, 21.05.2017 в 00:35.
Ответить с цитированием
  #6  
Старый 21.05.2017, 06:39
derekt derekt вне форума
Прохожий
 
Регистрация: 18.05.2017
Сообщения: 6
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

А как реализовать проверку программой наличия уже сохраненного файла ?
Ответить с цитированием
  #7  
Старый 21.05.2017, 19:21
derekt derekt вне форума
Прохожий
 
Регистрация: 18.05.2017
Сообщения: 6
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Не так - код надо в посте правильно оформлять.

По поводу кода. У меня вот это работает:
Код:
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;
Delphi 7, Office 2003 Rus

Подскажите пожалуйста как сделать чтобы не выскакивало окно подтверждения сохранения ? А еще если нажать отмену сохранения - то вылетает ошибка.
Ответить с цитированием
  #8  
Старый 21.05.2017, 20:10
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 6,925
Репутация: 49086
По умолчанию

1. Проверка файла:
Код:
if FileExists(FileName) Then ...
2. Диалог сохранения вылазит если файл уже существует или если в выбранное место запись запрещена. Т.е. мне специально пришлось указать путь в домашку как раз из за этого.

Последний раз редактировалось lmikle, 22.05.2017 в 18:52.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:41.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2017

ВКонтакте   Facebook   Twitter