Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Запуск и закрытие Excel, добавление и удаление книг или листов

Delphi , Технологии , OLE Automation MSOffice



Автор: Lookin
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Запуск и закрытие Excel, добавление и удаление книг и листов

На данный момент работает:
- вызов и закрытие Excel
- добавление новых, открытие ранее созданных и удаление рабочих книг
- добавление и удаление листов в рабочие книги

Зависимости: ComObj, SysUtils,Dialogs,Controls;
Автор:       lookin, lookin@mail.ru, Екатеринбург
Copyright:   lookin
Дата:        04 мая 2002 г.
***************************************************** }

unit MSExcel;

interface

uses ComObj, SysUtils, Dialogs, Controls;

procedure CallExcel(Show: boolean);
procedure CloseExcel;
procedure AddWorkBook(WorkBookName: Ansistring);
procedure OpenWorkBook(WorkBookName: Ansistring);
procedure CloseWorkBook(WorkBookName: Ansistring);
procedure ActivateWorkBook(WorkBookName: Ansistring);
procedure ActivateWorkSheet(WorkBookName, WorkSheetName: Ansistring);
function WorkBookIndex(WorkBookName: Ansistring): integer;
function WorkSheetIndex(WorkBookName, WorkSheetName: Ansistring): integer;
procedure CheckExtension(Name: Ansistring);
procedure AddWorkSheet(WorkBookName, WorkSheetName: Ansistring);
procedure DeleteWorkSheet(WorkBookName, WorkSheetName: Ansistring);

var
  Excel: Variant;

implementation

procedure CallExcel(Show: boolean);
begin
  if VarIsEmpty(Excel) = true then
  begin
    Excel := CreateOleObject('Excel.Application');
    if Show then
      Excel.Visible := true;
  end;
end;

procedure CloseExcel;
begin
  if VarIsEmpty(Excel) = false then
  begin
    Excel.Quit;
    Excel := 0;
  end;
end;

procedure AddWorkBook(WorkBookName: Ansistring);
var
  k: integer;
begin
  CheckExtension(WorkBookName);
  if VarIsEmpty(Excel) = true then
  begin
    Excel := CreateOleObject('Excel.Application');
    Excel.Visible := true;
  end;
  k := WorkBookIndex(WorkBookName);
  if k = 0 then
  begin
    Excel.Workbooks.Add;
    Excel.ActiveWorkbook.SaveCopyAs(FileName := WorkBookName);
    Excel.ActiveWorkbook.Close;
    Excel.Workbooks.Open(WorkBookName);
  end
  else
    MessageDlg('Книга с таким именем уже существует.', mtWarning, [mbOk], 0);
end;

procedure OpenWorkBook(WorkBookName: Ansistring);
var
  k: integer;
begin
  CheckExtension(WorkBookName);
  if VarIsEmpty(Excel) = true then
  begin
    Excel := CreateOleObject('Excel.Application');
    Excel.Visible := true;
  end;
  k := WorkBookIndex(WorkBookName);
  if k = 0 then
    Excel.Workbooks.Open(WorkBookName)
  else
    MessageDlg('Книга с таким именем уже открыта.', mtWarning, [mbOk], 0);
end;

procedure CloseWorkBook(WorkBookName: Ansistring);
var
  k: integer;
begin
  if VarIsEmpty(Excel) = false then
  begin
    k := WorkBookIndex(WorkBookName);
    if k <> 0 then
      Excel.ActiveWorkbook.Close(WorkBookName)
    else
      MessageDlg('Книга с таким именем отсутствует.', mtWarning, [mbOk], 0);
  end;
end;

procedure ActivateWorkBook(WorkBookName: Ansistring);
var
  k: integer;
begin
  if VarIsEmpty(Excel) = false then
  begin
    k := WorkBookIndex(WorkBookName);
    if k <> 0 then
      Excel.WorkBooks[k].Activate;
  end;
end;

procedure ActivateWorkSheet(WorkBookName, WorkSheetName: Ansistring);
var
  k, j: integer;
begin
  if VarIsEmpty(Excel) = false then
  begin
    k := WorkBookIndex(WorkBookName);
    j := WorkSheetIndex(WorkBookName, WorkSheetName);
    if j <> 0 then
      Excel.WorkBooks[k].Sheets[j].Activate;
  end;
end;

procedure AddWorkSheet(WorkBookName, WorkSheetName: Ansistring);
var
  k, j: integer;
begin
  if VarIsEmpty(Excel) = false then
  begin
    k := WorkBookIndex(WorkBookName);
    if k <> 0 then
    begin
      Excel.DisplayAlerts := False;
      Excel.Workbooks[k].Sheets.Add;
      j := WorkSheetIndex(WorkBookName, WorkSheetName);
      if j = 0 then
        Excel.Workbooks[k].ActiveSheet.Name := WorkSheetName;
    end;
  end;
end;

procedure DeleteWorkSheet(WorkBookName, WorkSheetName: Ansistring);
var
  k, j: integer;
begin
  if VarIsEmpty(Excel) = false then
  begin
    k := WorkBookIndex(WorkBookName);
    Excel.DisplayAlerts := false;
    j := WorkSheetIndex(WorkBookName, WorkSheetName);
    if j <> 0 then
      Excel.Workbooks[k].Sheets[j].Delete
    else
      MessageDlg('Листа с таким именем в этой книге нет.', mtWarning, [mbOk],
        0);
  end;
end;

procedure CheckExtension(Name: Ansistring);
var
  s: string;
begin
  //проверка расширения
  s := ExtractFileExt(Name);
  if LowerCase(s) <> '.xls' then
    if
      MessageDlg('Вы задали имя книги с нестандартным расширением. Продолжить?',
      mtWarning, [mbYes, mbCancel], 0) = mrCancel then
      Abort;
end;

function WorkBookIndex(WorkBookName: Ansistring): integer;
var
  i, n: integer;
begin
  //проверка на наличие книги с этим именем
  n := 0;
  if VarIsEmpty(Excel) = false then
    for i := 1 to Excel.WorkBooks.Count do
      if Excel.WorkBooks[i].FullName = WorkBookName then
      begin
        n := i;
        break;
      end;
  WorkBookIndex := n;
end;

function WorkSheetIndex(WorkBookName, WorkSheetName: Ansistring): integer;
var
  i, k, n: integer;
begin
  //проверка на наличие листа с этим именем в книге с этим именем
  n := 0;
  if VarIsEmpty(Excel) = false then
  begin
    k := WorkBookIndex(WorkBookName);
    for i := 1 to Excel.WorkBooks[k].Sheets.Count do
      if Excel.WorkBooks[k].Sheets[i].Name = WorkSheetName then
      begin
        n := i;
        break;
      end;
  end;
  WorkSheetIndex := n;
end;

end.

Пример использования:

procedure TForm1.Button1Click(Sender: TObject);
begin
  //вызов Excel, true - если хотите при вызове Excel отобразить окно Excel
  CallExcel(true);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  //добавление новой рабочей книги с заданным именем
  //ВАЖНО: используйте полное имя рабочей книги, т.е. включая путь
  AddWorkBook('D:\qwerty.xls');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  //добавление листа с именем ff в рабочую книгу D:\qwerty.xls
  AddWorksheet('D:\qwerty.xls', 'ff');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  //активация рабочей книги
  ActivateWorkBook('D:\1234.xls');
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  //активация листа в рабочей книге
  ActivateWorkSheet('D:\qwerty.xls', 'ff');
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  //открытие рабочей книги
  OpenWorkBook('D:\qwerty.xls');
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
  //закрытие рабочей книги
  CloseWorkBook('D:\qwerty.xls');
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
  //удаление листа из рабочей книги
  DeleteWorkSheet('D:\qwerty.xls', 'ff');
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
  //закрытие Excel
  CloseExcel;
end;

end.

Программа на Delphi, которая обеспечивает взаимодействие с Microsoft Excel за счет интерфейса COM. Программа может выполнять различные задачи, такие как:

  1. Запуск и закрытие Excel.
  2. Добавление, открытие и закрытие файлов рабочих книг (.xls).
  3. Активация и деактивация рабочих книг и листов.
  4. Добавление и удаление листов.

Программа использует следующие процедуры:

  • CallExcel(Show: boolean): Запускает или закрывает Excel, в зависимости от значения параметра Show.
  • CloseExcel(): Закрывает Excel, если оно запущено.
  • AddWorkBook(WorkBookName: Ansistring): Добавляет новую рабочую книгу с указанным именем.
  • OpenWorkBook(WorkBookName: Ansistring): Открывает существующую рабочую книгу с указанным именем.
  • CloseWorkBook(WorkBookName: Ansistring): Закрывает рабочую книгу с указанным именем.
  • ActivateWorkBook(WorkBookName: Ansistring): Активизирует рабочую книгу с указанным именем.
  • ActivateWorkSheet(WorkBookName, WorkSheetName: Ansistring): Активизирует лист с указанным именем в рабочей книге с указанным именем.
  • AddWorkSheet(WorkBookName, WorkSheetName: Ansistring): Добавляет новый лист в рабочую книгу с указанным именем и присваивает ему указанное имя.
  • DeleteWorkSheet(WorkBookName, WorkSheetName: Ansestring): Удаляет лист с указанным именем из рабочей книги с указанным именем.

Программа также включает в себя несколько вспомогательных процедур:

  • CheckExtension(Name: Ansistring): Проверяет, является ли расширение файла указанного имени валидным (например, .xls).
  • WorkBookIndex(WorkBookName: Ansestring): integer : Возвращает индекс рабочей книги с указанным именем.
  • WorkSheetIndex(WorkBookName, WorkSheetName: Ansistring): integer : Возвращает индекс листа с указанным именем в рабочей книге с указанным именем.

Программа может быть использована для создания формы Delphi и добавления кнопок для вызова этих процедур. Например:

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Запускает Excel, true если вы хотите отображать окно Excel
  CallExcel(true);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  // Добавляет новую рабочую книгу с указанным именем
  AddWorkBook('D:\qwerty.xls');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  // Добавляет лист с именем "ff" в рабочую книгу "D:\qwerty.xls"
  AddWorksheet('D:\qwerty.xls', 'ff');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  // Активизирует рабочую книгу "D:\1234.xls"
  ActivateWorkBook('D:\1234.xls');
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  // Активизирует лист "ff" в рабочей книге "D:\qwerty.xls"
  ActivateWorksheet('D:\qwerty.xls', 'ff');
end;

Обратите внимание, что эта программа использует интерфейс COM для взаимодействия с Excel, что требует установки Excel на систему и настройки для коммуникации COM. Кроме того, программа предполагает, что файловые расширения валидны (например, .xls), и не выполняет никакой обработки ошибок или проверки, кроме как проверяет существование рабочей книги или листа.

Статья описывает компонент для управления Microsoft Excel в программировании на языке Delphi, который позволяет запускать и закрывать приложение Excel, добавлять и удалять книги или листы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: OLE Automation MSOffice ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-17 19:21:10/0.012210845947266/0