Delphi скопировать лист в excel на другой лист

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

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

План статьи:

  • Объекты Microsoft Excel
  • Как активировать лист рабочей книги Excel?
  • Методы  листа книги Excel

Однако прежде, чем забираться в дебри Excel я хотел продемонстрировать Вам насколько глубоко мы сегодня заглянем.

1. Объекты Microsoft Excel

Объектная модель ExcelНа рисунке я попробовал изобразить объектную модель Excel в миниатюре. Т.е. из этой модели исключены не требующиеся пока нам элементы, например такие, как свойства рабочей книги или выделенные объекты Selection — об этом речь пойдет позже.

Как Вы можете судить по представленной модели, а также и по собственному опыту работы, приложение Excel в общем случае может содержать коллекцию рабочих книг (WorkBooks Collection). Для доступа к конкретной рабочей книге мы с Вами использовали свойства Item коллекции:

WorkBook:=WorkBooks.Item[index]

где index — порядковый номер рабочей книги в коллекции WorkBooks.

И на этом наше первое  знакомство с Excel закончилось. Между тем, каждая отдельная рабочая книга может содержать N листов, каждый из которых состоит из N ячеек, которые могут быть объединены в объекты Range.

На каждой из ступеней этой модели можно останавливаться и изучать её месяцами. Если будет особая необходимость в изучении каких-либо дополнительных свойств и методов — мы обязательно вернемся и изучим. А теперь, приступим к работе в Delphi с листами рабочей книги.

2. Как активировать лист рабочей книги Excel?

Как Вы знаете при создании пустой рабочей книги Excel автоматически добавляет в эту книгу 3 пустых листа. Чтобы работать с конкретным листом (WorkSheet или просто Sheet) этот лист необходимо активировать. Один из способов активации листа рабочей книги Excel в Delphi выглядит следующим образом:

resourcestring
  rsEInvalidSheetIndex = 'Задан неверный индекс для WorkBooks. Активация листа прервана';
  rsEInvalidSheetActivate = 'Активация листа завершена с ошибкой';
 
function ActivateSheet(WBIndex: integer; SheetName: string): boolean;
var
  i: integer;
begin
  Result := false;
  if WBIndex > MyExcel.WorkBooks.Count then
    raise Exception.Create(rsEInvalidSheetIndex);
  try
    for i := 1 to MyExcel.WorkBooks[WBIndex].Sheets.Count do
      if AnsiLowerCase(MyExcel.WorkBooks[WBIndex].Sheets.Item[i].Name)
        = AnsiLowerCase(SheetName) then
      begin
        MyExcel.WorkBooks[WBIndex].Sheets.Item[i].Activate;
        Result := true;
        break;
      end;
  except
    raise Exception.Create(rsEInvalidSheetActivate);
  end;
end;

Здесь в качестве параметров функции задается индекс рабочей книги (WBIndex) в коллекции WorkBooks и название листа.

Если хотите, то можете активировать тот же лист по индексу в коллекции WorkSheets — при этом сама функция немного упрощается (не требуется условие проверки названия листа).

Также, если вы уверены, что в данный момент времени активна необходимая Вам рабочая книга, то можно избежать использования лишней переменной (индекса рабочей книги WBIndex) и активировать лист вот так:

MyExcel.ActiveWorkBook.Sheets.Item[i].Activate;

Теперь рассмотрим более подробно методы, используемые объектом WorkSheet.

3. Методы  листа книги Excel

Теперь рассмотрим более подробно объект WorkSheet.

worksheet MethodsНа рисунке представлены те методы, которые я когда-либо использовал в своей работе.

Всего объект WorkSheet насчитывает 30 различных методов, которые Вы можете использовать.

Метод Описание
Activate Делает текущий лист активным. Работу метода мы уже с Вами рассмотрели
Calculate рассчитывает все открытые книги, конкретный лист в книге, или указанный диапазон ячеек на листе
CheckSpelling проверка орфографии на выбранном листе
SaveAs сохраняет все изменения в файле
Delete удаляет текущий лист WorkSheet
Select выделение листа
Copy копирует лист в другое место в рабочей книге
Paste вставляет содержимое буфера обмена на лист
ChartObjects возвращает объект, который представляет собой либо одну диаграмму (объект ChartObject) или совокупность всех диаграмм (объект ChartObjects) на листе
Move перемещение листа. Этот метод аналогичен методу Copy. Различие лишь в том, что после вcтавки копируемый лист удаляется из книги

Рассмотрим теперь каждый из представленных выше методов.

Ниже, в качестве expression должен выступать лист (WorkSheet), если не сказано иное.

Метод Calculate

Расчёт рабочей книги, листа или диапазона ячеек.

Стоит отметить, что вызов метода Calculate возможен не только для конкретного рабочего листа книги Excel. Рассмотрим варианты вызова метода Calculate.

Как рассчитать все открытые в данный момент книги Excel в Delphi?

var MyExcel: OleVariant;
MyExcel.Calculate

Как рассчитать отдельный лист книги Excel в Delphi?

в приведенном ниже фрагменте кода рассчитывается активный лист

MyExcel.ActiveWorkBook.ActiveWorkSheet.Calculate

Как рассчитать диапазон ячеек листа Excel в Delphi?

Рассчитаем все формулы в столбцах A, B и C:

MyExcel.ActiveWorkBook.ActiveWorkSheet.UsedRange.Columns("A:C").Calculate

Метод CheckSpelling

Вызов метода выглядит следующим образом:

expression.CheckSpelling(CustomDictionary, IgnoreUppercase, AlwaysSuggest, SpellLang)

При этом в качестве expression должен выступать лист (WorkSheet).

Параметр Тип Описание
CustomDictionary  Variant строка, указывающая имя файла пользовательского словаря, который будет рассмотрен, если слово не найдено в основном словаре. Если этот аргумент опущен, то будет использоваться словарь по-умолчанию
IgnoreUppercase Variant True, если необходимо, чтобы Microsoft Excel пропускал слова, которые написаны прописными буквами. False для того, чтобы Microsoft Excel проверить все слова. Если этот аргумент опущен, то используются текущие настройки Excel.
AlwaysSuggest Variant True, для того, чтобы Microsoft Excel отображал список предложений других вариантов написания при обнаружении неправильного написанного слова. False, чтобы Microsoft Excel ожидал ввода правильного написание. Если этот аргумент опущен, то используются текущие настройки.
SpellLang Variant язык словаря.  Может принимать значения одной из констант MsoLanguageID, например для русского языка SpellLang = 1049, для английского (США) SpellLang = 1033 и т.д. Более подробно про идентификаторы языков см. эту статью.

Как проверить грамматику на листе Excel в Delphi?

MyExcel.ActiveWorkBook.ActiveWorkSheet.CheckSpelling(CustomDictionary:=EmptyParam,  
                                                                        IgnoreUppercase:= false, 
                                                                        AlwaysSuggest:=EmptyParam, 
                                                                        SpellLang:=1033)

в этом случае MS Excel проверит текущий лист, включая проверку слов из прописных букв. Язык проверки — русский. Обратите внимание, что для того, чтобы вызвать метод мы явно указывали, какому параметру какое значение присвоить. Причём для того, чтобы пропустить какой-либо параметр, мы использовали EmptyParam (пустой параметр), который в Delphi представляет собой переменную типа OleVariant.

Понятно, что подобный способ вызова методов (с явным указанием всех параметров) для Вас не совсем удобен и широко не практикуется в программировании на Delphi, но тем не менее только так и никак иначе можно вызывать методы, используемые в Excel.

Метод SaveAs

Сохранение рабочего листа книги Excel.

Вызов метода:

expression.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AddToMru,TextCodepage, TextVisualLayout, Local)
Параметр Тип Описание
FileName Variant строка, представляющая собой имя сохраняемого файла. Необходимо указывать полный путь к файлу, иначе файл будет сохранен в папку Excel.
FileFormat Variant формат файла, который используется при сохранении. По умолчанию файл сохраняется в формате, который вы выбирали в последний раз в Excel.
Password Variant пароль для файла (не более 15 символов). Пароль чувствителен к регистру.
WriteResPassword Variant пароль, который будет использоваться для внесения изменений в рабочую книгу. Если пароль не будет указан, то книга будет открыта в режиме «Только для чтения»
ReadOnlyRecommended Variant если параметр равен True, то при открытии файла на дисплее появится сообщение, в котором рекомендуется, что бы файл был открыт только для чтения.
CreateBackup Variant True, для того, чтобы создать резервный файл
AddToMru Variant True, для того, чтобы добавить имя сохраняемого файла в список недавно открытых файлов в главном меню Excel
TextCodepage и TextVisualLayout Variant в настоящее время не используются и сохранены для обеспечения обратной совместимости
Local Variant не обязательный параметр, по-умолчанию равен False. Значение True — сохранение файлов с языковыми Microsoft Excel (в том числе настройки панели управления).

Как сохранить активный лист рабочей книги Excel в Delphi?

MyExcel.ActiveWorkBook.ActiveWorkSheet.SaveAs('C:MyExcelFile.xls')

В этом случае при сохранении будут использованы настройки по умолчанию.

Если Вам необходимо сохранить файл Excel в другом формате, то в параметре FileFormat можно использовать одно из значений перечислителя xlFileFormat. Некоторые значения xlFileFormat представлены в таблице ниже:

Имя Значение Описание Расширение файла
xlCSV 6 CSV *.csv
xlExcel8 56 Книга Excel 97-2003 *.xls
xlHtml 44 Формат HTML *.htm; *.HTML
xlOpenDocumentSpreadsheet 60 Электронная таблица OpenDocument *.ods
xlOpenXMLWorkbook 51 Книга Open XML *.xlsx

Как сохранить активный лист рабочей книги Excel в заданном формате?

Напишем небольшую процедуру, позволяющую сохранять лист Excel в различных форматах:

const
  xlCSV = 6;
  xlExcel8 = 56;
  xlHtml =44;
  xlOpenDocumentSpreadsheet = 60;
  xlOpenXMLWorkbook = 51;
 
resourcestring
  rsESaveActiveSheet = 'Ошибка сохранения активного листа книги';
 
procedure SaveAs(const AFileName: TFileName; AFileFormat: integer);
begin
 try
   MyExcel.ActiveWorkBook.ActiveSheet.SaveAs(AFileName, AFileFormat);
  except
    raise Exception.Create(rsESaveActiveSheet);
  end;
end;

Метод Delete

Удаление рабочего листа Excel.

Этот метод используется без параметров. Например, представленный ниже код удаляет активный лист рабочей книги:

MyExcel.ActiveWorkBook.ActiveWorkSheet.Delete

Метод Select

Выделение рабочего листа книги Excel.

Вызов метода:

expression.Select(Replace)
Параметр Тип Описание
Replace Variant True, чтобы заменить текущее выделение указанного объекта. False — продлить нынешний отбор включая все ранее выбранные объекты. По умолчанию используется True

Не стоит путать активный лист — тот который отображается в данный момент в книге и выделенный — выделить Вы можете хоть 10 листов (в Excel это делается с зажатым Ctrl), но активный — только один.

Как выделить листа рабочей книги Excel в Delphi?

MyExcel.ActiveWorkBook.WorkSheets.Item[3].Select

Выделяет третий лист книги

Метод Copy

Копирование листа в другое место в рабочей книге.

Вызов метода:

expression.Copy(Before, After)
Параметр Тип Описание
Before Variant  лист до которого будет вставлен копируемый лист.
After Variant лист после которого будет вставлен копируемый лист

При этом, если вы используете параметр Before, то вы не должны использовать After и наоборот. Обращу Ваше внимание, что указывается именно ЛИСТ, а не индекс листа.

Как копировать лист Excel в Delphi?

MyExcel.ActiveWorkBook.WorkSheets.Item[1].Copy(After:=MyExcel.ActiveWorkBook.WorkSheets.Item[2])

В этом случае первый лист будет скопирован и вставлен после третьего.

Метод Paste

Вставка содержимого буфера обмена на лист Excel.

Вызов метода:

expression.Paste(Destination, Link)
Параметр Тип Описание
Destination Variant диапазон ячеек листа, который определяет, где будет вставлено содержимое буфера. Если этот аргумент опущен, используется текущий диапазон. Этот аргумент может быть указан только, если содержимое буфера обмена можно вставить в заданном диапазоне. Если этот параметр задан, то аргумент Link может не указываться
Link Variant True, для того чтобы установить связь с источником вставляемых данных. Если этот параметр задан, Destination не может быть использован. Значение по умолчанию False

Как вставить содержимое буфера обмена на лист Excel в Delphi?

MyExcel.ActiveWorkBook.ActiveSheet.Paste(Destination:=MyExcel.ActiveWorkBook.ActiveSheet.Range("D1:D5"))

В этом случае содержимое буфера будет вставлено в столбец D в строки с 1 по 5. Следует отметить, что если содержимое буфера не удовлетворяет условию, например в буфере только 1 число, то вызывается исключительная ситуация.

Метод ChartObjects

Возвращает объект, который представляет собой либо одну диаграмму (объект ChartObject) или совокупность всех диаграмм (объект ChartObjects) на листе.

Вызов метода:

expression.ChartObjects[Index]
Параметр Тип Описание
index Variant индекс диаграммы в коллекции (нумерация начинается с 1)

Как получить диаграмму на листе Excel в Delphi?

MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects[1]

В этом случае будет получена первая диаграмма на листе.

Метод Move

Перемещение листа. Этот метод аналогичен методу Copy. Различие лишь в том, что после вcтавки копируемый лист удаляется из книги.

Вот та часть методов, которые я использовал когда-либо при работе с Excel в Delphi. Вообще можно сказать, что в Delphi можно управлять MS Excel не хуже, чем при непосредственной работе с этим приложением, главное не забывать, какой метод или свойство за что отвечает :). Ну, а для того, чтобы не забыть, я создал небольшой MindMap, который буду периодически дополнять и обновлять. Перейдя по ссылке, Вы сможете посмотреть объекты Excel, методы ими используемые, параметры методов и их типы в соответствии с типами Delphi. В общем небольшая графическая шпаргалка для любителей поразбираться с Excel в Delphi.

Книжная полка

Название:Разработка приложений Microsoft Office 2007 в Delphi

Описание Описаны общие подходы к программированию приложений MS Office. Даны программные методы реализации функций MS Excel, MS Word, MS Access и MS Outlook в среде Delphi.

купить книгу delphi на ЛитРес

0
0
голоса

Рейтинг статьи

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

 
s_t_d
 
(2010-02-03 12:44)
[0]

Уважаемые Мастера, если можно, пожалуйста подскажите. При работе приложения необходимо вывести результаты в Excel. Простейшим манипуляциям с MS_Excel (создать приложение, открыть/закрыть книгу, занести данные в ячейку) я научился.  Но вот потребовальсь в открытой раб.книге создать копию раб.листа. И вот это не получается. Макрорекодер MS_Excel пишет: »  Sheets(«Лист1»).Select    Sheets(«Лист1»).Copy After:=Sheets(3)   «… Попытка интерпретировать это в Delphi так:
 v.Workbooks[wb].Worksheets[ws].Select;
 v.Workbooks[wb].Worksheets[ws].Copy;
к успеху не привела… Пожалуйста посоветуйте, как быть.


 
12 ©
 
(2010-02-03 13:06)
[1]

еще раз вставить на другой лист?


 
oldman ©
 
(2010-02-03 13:13)
[2]


>  v.Workbooks[wb].Worksheets[ws].Select;
>  v.Workbooks[wb].Worksheets[ws].Copy;

А где Paste?


 
oldman ©
 
(2010-02-03 13:21)
[3]


> Макрорекодер MS_Excel пишет: »  Sheets(«Лист1»).Select  
>   Sheets(«Лист1»).Copy After:=Sheets(3)  

Мне пишет:

Sheets(«Лист1»).Select
Cells.Select
Selection.Copy
Sheets.Add
Cells.Select
ActiveSheet.Paste


 
s_t_d
 
(2010-02-03 19:54)
[4]

>oldman ©   (03.02.10 13:13) [2]
Видимо, плохо сформулировал вопрос…Но речь идет именно о СОЗДАНИИ КОПИИ раб.листа (это шаблон документа), а не о записи одних и тех же данных на разные листы…


 
s_t_d
 
(2010-02-03 21:43)
[5]

Добился. Вот так получилось.
 v.Workbooks[wb].Worksheets[ws].Select;
 v.Workbooks[wb].Worksheets[ws].Copy(After:=v.Workbooks[wb].Worksheets[ws]);
  где wb — имя книги, ws — имя копируемого листа


Студворк — интернет-сервис помощи студентам

Все уже перерыл, ни одно решение не работает.
Пробовал это решение:

Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button1Click(Sender: TObject);
var
Excel: Variant;
begin
Excel:=CreateOleObject('Excel.Application');
Excel.Workbooks.Open('C:book.xls');
Excel.Visible:=True;
Excel.Sheets[1].Select;
Excel.Sheets[1].Copy(Null, Excel.Sheets[1]);
end;

Ругается на Copy, говорит — ошибка на сервере.

Delphi
1
RWorkBook.Sheets['Лист1'].Copy(RWorkBook.Sheets[1])

тоже самое — ошибка. Лист1 — член группы не найден, если через индекс — неверный индекс скажет.

Помогите, плиз, уже не знаю куда копать. Нужно N-ное количество раз скопировать один и тот же лист.

>
Copy&Paste в Excel средствами Delphi
, Не пойму, я копирую данные или нет?.. И вообще..

  • Подписаться на тему
  • Сообщить другу
  • Скачать/распечатать тему



Сообщ.
#1

,
19.05.08, 10:15

    Здрасте!
    Я хочу скопировать строку таблицы Excel с первого листа и перенести ее на другой лист.
    Но я не пойму, что происходит когда ставлю метод «Copy» :

    ExpandedWrap disabled

      procedure TForm1.oleWordOpen();

       var

           exelPath:olevariant; // путь к документу Excel.

           exel,elist,elist2:variant;

      begin

      exelPath:=’D:2008.xls’;

       try

       exel:=CreateOleObject(‘Excel.Application’);

       exel.workbooks.open(exelPath);

       elist:=exel.workbooks[1].worksheets[‘Лист1’];//первый лист

       elist2:=exel.workbooks[1].worksheets[‘Лист2’];//Второй лист

       exel.visible:=true;

       exel.DisplayAlerts:=false;

      except

           ShowMessage(‘Невозможно открыть приложение Excel’);

           exit;

       end;

      elist.rows[3].select;

      {********************************}

      {Вот здесь непойму, что я сделал?}

      {Я чего нибудь скопировал?       }

      {********************************}

       elist.rows[3].copy;

      end.

    Если скопировал строку, то как с ней дальше обращаться?
    Я могу активировать второй лист книги, могу выделить в нем строку или ячейку:

    ExpandedWrap disabled

       elist2.Activate;

      // выделяется 4 ячейка в первом столбце второго листа. Даже записать в нее что-то возможно.

      elist2.range[‘A4’].select;

      // или

      // выделяется 4 строка

       elist2.rows[4].select;

    Но как всю строку из «Лист1» перенести в «Лист2» незнаю. Уже 3 день мучаюсь… В Excele -самом, макрос написал, все работает, но его методы здесь не проходят практически:

    ExpandedWrap disabled

      Rows(«16:16»).Select

          Selection.Copy

          Sheets(«Лист2»).Select

          Rows(«1:1»).Select

          ActiveSheet.Paste

    В инете по моему случаю мне ничего найти не удалось… :(


    adem



    Сообщ.
    #2

    ,
    19.05.08, 14:48

      Junior

      *

      Рейтинг (т): 2

      Лень это в Delphi проверить, но примерно так:

      ExpandedWrap disabled

        exel.workbooks[1].worksheets[‘Лист1’].Rows[‘1:1’].Copy;

        exel.workbooks[1].worksheets[‘Лист2’].Rows[‘1:1’].Paste;

      Сообщение отредактировано: adem — 19.05.08, 14:48

      Profi

      uborshik



      Сообщ.
      #3

      ,
      19.05.08, 16:09

        adem:

        Цитата

        ‘Method Paste’ not supported by automation object.//Однако..
        (process stopped.Use Step or Ран, //но нафик уже это надо, в моем положении :( …)

        Вот я не могу понять что надо сделать, что б поддерживался метод «Paste» :( , «Copy» то поддерживает …
        Наверняка, что-то есть. Раз Бейсик это может, то почему бы это невмочь Делфи?

        В данный момент, я смог добиться, что бы «програмка» смогла «поячеечно» копировать и вставлять в другой лист, т.е.
        циклом перебирать строку и каждую ячейку копировать в другой лист.
        Хотелось бы обойтись без этого гемороя, но чуствую придется, потому как еще больше вопросов с копированием целой строки предвидится: Там в строке попадаюстся ячейки с датами, а обычным, моим написанным методом, типа, как я хочу сделать, даты выводятся ввиде десятичного числа (или как там это число, типа, 39544 называется) и надо его переводить в «формат времени», если бы получилось моя идея «копи&паста» всей строки, то результат бы был очень странным и не устроит мое начальство, однозначно(хотело видеть,допустим 01.01.2008, а видит, типа, 36789). А «поячеечно», я хотя бы могу контролировать ячейки с датами.
        Наверняка есть способ и эту «занозу» обойти, но у меня знаний маловато :(

        Но все-таки «оч хочеца» узнать, а можно ли целыми строками манипулировать при работе Delphi-Excel …

        Сообщение отредактировано: uborshik — 19.05.08, 16:11

        Profi

        uborshik



        Сообщ.
        #4

        ,
        20.05.08, 08:50

          Все получилось.
          Проанализировав код VB (первый пост), пришел к выводу, что обращаться к методу Paste «от имени» rows (или range), в том виде как я хотел, нельзя.
          Короче вот с такой концовкой, написанного в первом посте кода, все работает:

          ExpandedWrap disabled

            ……………..

            elist.rows[3].select;

            elist2.Activate;

            elist2.rows[‘1:1’].select;

            exel.activeSheet.paste; // exel:=CreateOleObject(‘Excel.Application’);

            end.

          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

          0 пользователей:

          • Предыдущая тема
          • Delphi: Система, Windows API
          • Следующая тема

          [ Script execution time: 0,0449 ]   [ 16 queries used ]   [ Generated: 13.04.23, 22:37 GMT ]  

          Привожу, пару цитатт из справки Архангельского как работать с листами. Функцию копирования поищите как посоветовал Valico или же в хелпе к Вижуалбейсику в Excel-e
          ___________________________________

          Класс сервера Excel

          Модули Excel97, Excel2000, ExcelXP

          Описание

          Сервер COM класса TExcelApplication используется для управления из вашего приложения программой Excel. Сервер может использоваться в виде компонента, расположенного на странице Servers, или экземпляр сервера может создаваться программно во время выполнения. См. темы Работа с компонентами страницы библиотеки Servers, Работа с Microsoft Office как с серверами COM, в которых поясняется различие этих подходов, а также тему Адаптация к версии Microsoft Office, в которой рассмотрены вопросы адаптации приложения к версии Excel. Для работы со свойствами и методами серверов COM ознакомьтесь также с темой Обращение к свойствам и методам серверов COM.

          Некоторые свойства и метода сервера вы можете найти по указанным выше ссылкам: Некоторые свойства и Некоторые методы. Методика получения информации по другим свойствам и методам изложена в теме Где найти свойства и методы серверов COM.

          Среди множества свойств сервера следует отметить свойство ActiveWorkbook — активная рабочая книга Excel. Это объект ExcelWorkbook, реализующий интерфейс _Workbook и имеющий в свою очередь собственные свойства и методы.

          Если в Excel открыто несколько книг, получить к ним доступ можно с помощью свойства Workbooks — собрания всех открытых в данный момент книг. Каждая книга представлена в этом собрании как объект ExcelWorkbook. К отдельной книге в массиве Workbooks можно обращаться по индексу. Например, ExcelApplication1.Workbooks:1: – это книга, которая была открыта первой.

          Создание новой книги ExcelWorkbook и включение ее в собрание Workbooks осуществляется методом Add объекта Workbooks.

          Объект ExcelWorkbook в свою очередь имеет собрание листов Worksheets. К отдельному листу – объекту ExcelWorkSheet можно получить доступ по индексу, как и в собрании Workbooks. В объекте ExcelWorkbook имеется свойство ActiveSheet – активный лист книги.

          Создание нового листа ExcelWorkSheet и включение его в собрание Worksheets осуществляется методом Add объекта Worksheets.

          Можно не создавать в приложении отдельных объектов для книги и листа, а работать с книгами и листами непосредственно через объект сервера. Но обычно все-таки удобнее создать такие объекты. В этом случае код получается более компактным и наглядным.

          Создание объектов может выполняться тремя способами: с помощью компонентов страницы Servers, с помощью программного создания соответствующих объектов, и с помощью создания объектов интерфейсов.

          При использовании компонентов вы должны поместить на форме компоненты TExcelWorkbook – рабочая книга, и – TExcelWorksheet – лист. Программное создание таких объектов, а заодно и программное создание объекта сервера, может выглядеть так:


          var ExcelApplication1: TExcelApplication;

          ExcelWorkbook1: TExcelWorkbook;

          ExcelWorksheet1: TExcelWorkSheet;

          ...
          // Создание объектов
          ExcelApplication1 := TExcelApplication.Create(Self);
          ExcelWorkbook1 := TExcelWorkbook.Create(Self);
          ExcelWorksheet1 := TExcelWorkSheet.Create(Self);
          ... // Использование объектов
          // Удаление объектов
          ExcelApplication1.Free;
          ExcelWorkbook1.Free;
          ExcelWorksheet1.Free;

          Остальное не зависит от того, используются компоненты или программно созданные объекты. Подключение объектов книги и листа к активной книге и листу сервера выполняется методом ConnectTo
          , аргументом которого указывается объект сервера. Например:


          ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);
          ExcelWorksheet2.ConnectTo(
          ExcelWorkbook2.ActiveSheet as ExcelWorksheet);

          Во втором операторе используется операция as, чтобы привести интерфейс к требуемому типу.

          Следующий оператор создает новую книгу и подключает к ней объект ExcelWorkbook1:
          [/code]
          ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(
          EmptyParam, LOCALE_USER_DEFAULT));

          Тут использован метод Add объекта ExcelApplication1.Workbooks.

          Несколько иначе выглядит работа с объектами интерфейсов:


          var ExcelApplication1: TExcelApplication;
          ExcelWorkbook1: ExcelWorkbook;
          ExcelWorksheet1: ExcelWorkSheet;
          ...
          ExcelApplication1 := TExcelApplication.Create(Self);
          ...
          ExcelWorkbook1 := ExcelApplication1.Workbooks.Add(
          EmptyParam, LOCALE_USER_DEFAULT);
          ExcelWorksheet1 := ExcelWorkbook1.ActiveSheet;

          Тут не требуется метод ConnectTo. Соответствующим переменным просто присваиваются значения интерфейсов объектов сервера.

          Сервер Excel имеет также свойство Windows – коллекцию открытых окон. Метод Windows.Arrange позволяет упорядочить окна. Элементы Window коллекции Windows обеспечивают доступ к свойствам, описывающим отображение документа: свернутое, развернутое, разделенное, заголовок окна, полосы прокрутки.

          Сервер Excel имеет свойство Dialogs, являющееся собранием объектов Dialog, которые соответствуют встроенным диалогам Word. Доступ к конкретному диалогу осуществляется через выражение вида

          WordApplication1.Dialogs[WdWordDialog]

          где константа WdWordDialog может принимать одно из предопределенных значений.
          [/code]

           У объекта книги ExcelWorkbook сервера Excel TExcelApplication имеется свойство Worksheets -  собрание листов книги. Каждый лист представлен в этом собрании как объект ExcelWorksheet.

          Worksheets - это объект (точнее, интерфейс Sheets), имеющий ряд свойств и методов. К конкретному листу из коллекции Worksheets можно обращаться по индексу или по имени. Например, следующие операторы открывают и активизируют первый лист книги, представленной объектом ExcelWorkbook1, передают указатель на этот лист в переменную интерфейса ExcelWorksheet1 и активизируют лист, т.е. выдвигают его на первый план в окне Excel:
          [code]
          ExcelWorksheet1 := ExcelWorkbook1.Worksheets[1] as
          ExcelWorksheet;
          ExcelWorksheet1.Activate(LOCALE_USER_DEFAULT);

          Свойство Worksheets имеется также в объекте сервера. Это свойство относится к активной книге. Так что следующий оператор производит операции с активной книгой, открывая в ней лист, имя которого (например, «Лист1») задано в окне редактирования Edit1:


          ExcelWorksheet1 := ExcelApplication1.
          Worksheets[Edit1.Text] as ExcelWorksheet;
          ExcelWorksheet1.Activate(LOCALE_USER_DEFAULT);

          Если лист с заданным именем отсутствует в книге, будет генерироваться исключение. Так что если имеется подобная опасность, это исключение надо перехватить, например, следующим образом:
          [/code]
          try
          ExcelWorksheet1 := ExcelApplication1.
          Worksheets[Edit1.Text] as ExcelWorksheet;
          ExcelWorksheet1.Activate(LOCALE_USER_DEFAULT);
          except
          ShowMessage(‘Не удалось открыть лист «‘ + Edit1.Text + ‘»‘);
          end;
          [/code]
          Добавить новый лист в книгу можно методом Add объекта Worksheets:

          function Add(Before: OleVariant; After: OleVariant;
          Count: OleVariant; Type_: OleVariant;
          lcid: Integer): IDispatch;

          Параметры Before или After – это объект листа, перед которым или после которого осуществляется вставка. Обычно достаточно задать только один из этих параметров, а другой сделать равным EmptyParam. Если оба параметра равны EmptyParam, то новые листы вставляются перед текущим активным листом. Параметр Count указывает число вставляемых листов. Если этот параметр равен EmptyParam, то вставляется один лист. Параметр Type_ определяет тип вставки. При значении EmptyParam вставляется новый пустой лист.

          Например, следующий код вставляет один новый лист перед активным листом активной книги и передает указатель на него в переменную ExcelWorksheet1:


          ExcelWorksheet1 := ExcelApplication1.Worksheets.Add(
          EmptyParam, EmptyParam, EmptyParam,
          EmptyParam, LOCALE_USER_DEFAULT) as ExcelWorksheet;

          А следующий код вставляет два новых листа после третьего листа активной книги:


          var After, Num: OleVariant;
          ...
          After := ExcelApplication1.Worksheets[3];
          Num := 2;
          ExcelWorksheet1 := ExcelApplication1.Worksheets.Add(
          EmptyParam,After,Num,EmptyParam,
          LOCALE_USER_DEFAULT) as ExcelWorksheet;

          Удалить лист из книги можно методом Delete:

          ExcelWorksheet1.Delete(LOCALE_USER_DEFAULT);

          Понравилась статья? Поделить с друзьями:
        • Delphi выделить текст в word
        • Delphi работа с excel скачать
        • Delphi выгрузка в word
        • Delphi работа с excel лист
        • Delphi вывод таблицы в word