Как вставить лист excel в delphi

useruser

165 / 89 / 38

Регистрация: 29.06.2015

Сообщений: 1,089

1

13.09.2016, 09:14. Показов 8437. Ответов 12

Метки нет (Все метки)


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

Код

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
var
Excel: OleVariant;
begin
 
//Создаем Excel файл
Excel := CreateOleObject('Excel.Application');
Excel.Visible := False;
Excel.DisplayAlerts:=False;
Excel.WorkBooks.Add;
//Тут надо добавить новый лист - Лист4
Excel.Save('c:test.xls');
Excel.Quit;
//Или тут надо снова открыть Excel и добавить новый лист

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



0



qwertehok

4891 / 4030 / 1012

Регистрация: 29.08.2013

Сообщений: 25,707

Записей в блоге: 3

13.09.2016, 09:32

2

Не по теме:

Цитата
Сообщение от useruser
Посмотреть сообщение

а рабочий код, либо ссылки на полные и рабочие примеры для Delphi 7.

а так же ключи от квартиры

Delphi
1
Sheet := WorkBook.WorkSheets.Add;

не работает?



0



useruser

165 / 89 / 38

Регистрация: 29.06.2015

Сообщений: 1,089

13.09.2016, 09:43

 [ТС]

3

Не по теме:

Цитата
Сообщение от qwertehok
Посмотреть сообщение

а так же ключи от квартиры

Либо код у вас настолько ценный, либо в квартире шаром покати…

Цитата
Сообщение от qwertehok
Посмотреть сообщение

Sheet := WorkBook.WorkSheets.Add; не работает?

Нет. Invalid variant operation.

Да вы и сами можете проверить (ctrl+c)

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
begin
var
Excel: OleVariant;
begin
 
//Создаем Excel файл
Excel := CreateOleObject('Excel.Application');
Excel.Visible := False;
Excel.DisplayAlerts:=False;
Excel.WorkBooks.Add;
WorkBook.WorkSheets.Add;
Excel.Save(full_path_to_file);
Excel.Quit;
end;



0



qwertehok

4891 / 4030 / 1012

Регистрация: 29.08.2013

Сообщений: 25,707

Записей в блоге: 3

13.09.2016, 09:59

4

Цитата
Сообщение от useruser
Посмотреть сообщение

Нет. Invalid variant operation.

потому что вы двоечник и лентяй

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var Excel, sheet, workbook: OleVariant;
i:integer;
begin
 
  //Создаем Excel файл
  Excel := CreateOleObject('Excel.Application');
  Excel.Visible := False;
  Excel.DisplayAlerts:=False;
  workbook:=Excel.WorkBooks.Add;
  for I := 1 to 10 do
  begin
    sheet:=WorkBook.WorkSheets.Add;
    sheet.name:=inttostr(i);
  end;
  workbook.SaveAs('1.xls');
  Excel.Quit;



1



D1973

Модератор

8382 / 5583 / 2275

Регистрация: 21.01.2014

Сообщений: 23,960

Записей в блоге: 3

13.09.2016, 10:01

5

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
begin
var
Excel, WB: OleVariant;
begin 
//Создаем Excel файл
Excel := CreateOleObject('Excel.Application');
Excel.Visible := False;
Excel.DisplayAlerts:=False;
WB := Excel.WorkBooks.Add;
WB.WorkSheets.Add;
Excel.Save(full_path_to_file);
Excel.Quit;
end;

Ну еще и поиском по форуму воспользоваться совсем не худо…
Вот, к примеру



0



165 / 89 / 38

Регистрация: 29.06.2015

Сообщений: 1,089

13.09.2016, 10:25

 [ТС]

6

Цитата
Сообщение от D1973
Посмотреть сообщение

Ну еще и поиском по форуму воспользоваться совсем не худо…

Пользовался, гуглил, гуглил на английском. Можете посмотреть — погуглить насколько разными будут ответы на этот вопрос.

Не по теме:

Цитата
Сообщение от qwertehok
Посмотреть сообщение

потому что вы двоечник и лентяй

Прямо и категорично. Мне нравится.
А может ещё и потому, что нет понятной документации и мануалов по делфи в силу мертвости языка?
Зачем тогда пишу на нём? Меня заставили. (
С радостью перейду на c# от майкрософта при первой же возможности (железо надо), дабы с легкостью писать с использованием фреймворка и «справкой» msdn.
И забуду этот синтаксис как страшный сон…



0



4891 / 4030 / 1012

Регистрация: 29.08.2013

Сообщений: 25,707

Записей в блоге: 3

13.09.2016, 10:36

7

Цитата
Сообщение от useruser
Посмотреть сообщение

Можете посмотреть — погуглить насколько разными будут ответы на этот вопрос.

facepalm

Цитата
Сообщение от useruser
Посмотреть сообщение

А может ещё и потому, что нет понятной документации и мануалов по делфи в силу мертвости языка?

facepalm

вы поищите на форуме посты пользователя Mawrat, его посты по работе с Excel нужно издавать отдельной книгой

PS ну а то что вы искать не умеете — это у вас либо скилл низкий, либо удача в минусе
PPS возьмите XLSReadWriteII и насладитесь работой с экселем.
хотите бесплатно — zexmlss или TcsExcelExport



0



Эксперт Pascal/Delphi

4884 / 2756 / 849

Регистрация: 04.10.2012

Сообщений: 10,054

13.09.2016, 11:05

8

Цитата
Сообщение от useruser
Посмотреть сообщение

Просьба писать не первые попавшиеся ссылки из гугла

А поиск по форуму у Вас не работает? Вот тема недельной давности https://www.cyberforum.ru/post9514218.html.

Цитата
Сообщение от useruser
Посмотреть сообщение

рабочий код

более рабочий код Вы вряд ли найдете

Цитата
Сообщение от useruser
Посмотреть сообщение

нет понятной документации и мануалов

там же ссылки на мануалы от Mawrat.

Не по теме:

Цитата
Сообщение от useruser
Посмотреть сообщение

нет понятной документации и мануалов по делфи в силу мертвости языка?

Объясните два момента:
1. С чего Вы взяли, что документация MS Office имеет прямое отношение к языку Delphi?
2.Докажите, что язык «мёртв». От того, что Вы сидите на древней 7-ке от Борланда, ещё не означает что он «мёртв».
Да, Object Pascal уже в прошлом. Существующий ныне язык Delphi будет ещё долго напоминать о себе.



0



useruser

13.09.2016, 12:44

 [ТС]

Не по теме:

Цитата
Сообщение от droider
Посмотреть сообщение

там же ссылки на мануалы от Mawrat

Предпочитаю msdn. Мануалов от Mawrat и других разрабов, в том числе на стеке и хабре полно.
Люблю официальную документацию. Когда фирма выпускает продукт — она выпускает документацию.
И сейчас в такой документации всё настолько подробно описано, что трудно ошибиться.

Цитата
Сообщение от droider
Посмотреть сообщение

1. С чего Вы взяли, что документация MS Office имеет прямое отношение к языку Delphi?

Не писал такого.
Microsoft Software Developer Network (англ. MSDN) — подразделение компании Майкрософт, ответственное за взаимодействие фирмы с разработчиками.
Office продукт Microsoft.
OLE Automation — технология компании Microsoft, позволяющая обращаться к COM-объектам.
Здесь везде Microsoft.
Скажем — здесь стык технологий Microsoft и Delphi.
Так, что если информации по Delphi нет в MSDN — проблемы Delphi. Думаю, что у Microsoft проблем нет. Ибо побольше будет. )

Цитата
Сообщение от droider
Посмотреть сообщение

2.Докажите, что язык «мёртв». От того, что Вы сидите на древней 7-ке от Борланда, ещё не означает что он «мёртв».

С одной стороны, не стоит связывать язык со средой разработки. С другой — в общем и целом:
1) синтаксис паскаля, мягко говоря не очень по сравнению с cишным.
2) при написании больших проектов ide delphi, средства отладки и рефракторинга уступают тому же визуал студио.
3) Qt. Все кросплатформенное пишут не на делфи, а на Qt. Это факт.

От себя
Мне стыдно признаться, что я пишу на делфи. Ни одна крупная организация не использует этот «язык».
Зарплаты соответственные.

В современном языке, то же чтение из файла можно выполнить в 1 команду. А с использованием фреймворка от Microsoft и ОС от Microsoft и инструкций от Microsoft по написанию программ на VS от Microsoft (MSDN ) — вы знаете, работает быстро и с первого раза.
А если будут вопросы, на них ответит инженер…Microsoft.
Куплю новое железо (пока на казёном) уйду в c#.



0



qwertehok

13.09.2016, 12:50

Не по теме:

M$ головного мозга



0



droider

13.09.2016, 12:53

Не по теме:

Цитата
Сообщение от useruser
Посмотреть сообщение

Люблю официальную документацию

для Вас ссылки на информацию с сайта Microsoft , которые предоставил Mawrat в своем посте — неофициальные?? :)

Не по теме:

Цитата
Сообщение от useruser
Посмотреть сообщение

не стоит связывать язык со средой разработки

А я и не связывал. Delphi уже давно существует как

самостоятельный

язык.

Не по теме:

Цитата
Сообщение от useruser
Посмотреть сообщение

Мне стыдно признаться, что я пишу на делфи

но ведь пишите :)



0



Модератор

8382 / 5583 / 2275

Регистрация: 21.01.2014

Сообщений: 23,960

Записей в блоге: 3

13.09.2016, 13:06

12

useruser,
1. Будьте добры, читайте, что Вам советуют

Цитата
Сообщение от D1973
Посмотреть сообщение

поиском по форуму воспользоваться

ключевая фраза выделена красным
2.

Цитата
Сообщение от useruser
Посмотреть сообщение

гуглил, гуглил на английском

Цитата
Сообщение от useruser
Посмотреть сообщение

Люблю официальную документацию

Любите официальную документацию — учите английский
3.

Цитата
Сообщение от useruser
Посмотреть сообщение

в силу мертвости языка

Не надо разводить турусы на колесах: «Delphi мертв, а я еще нет…» и т.д. Для этого существует отдельный раздел



0



droider

13.09.2016, 13:26


    Как добавить новый лист в Excel файл?

Не по теме:

Цитата
Сообщение от D1973
Посмотреть сообщение

не поддаемся на провокации, не надо холивара

Согласен. Ответ ТС-у по сути вопроса уже дан. Дальше сам.



0



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

В прошлые раз мы с Вами остановились на сохранении рабочей книги. В принципе, ничего сложного в запуске 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
голоса

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

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

Содержание

  1. Excel в Delphi. Методы объекта WorkSheet (лист).
  2. План статьи:
  3. 1. Объекты Microsoft Excel
  4. 2. Как активировать лист рабочей книги Excel?
  5. 3. Методы листа книги Excel
  6. Метод Calculate
  7. Метод CheckSpelling
  8. Метод SaveAs

Excel в Delphi. Методы объекта WorkSheet (лист).

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

План статьи:

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

1. Объекты Microsoft Excel

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Метод Calculate

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

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

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

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

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

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

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

Метод CheckSpelling

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

При этом в качестве 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?

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

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

Метод SaveAs

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

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

Параметр Тип Описание
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?

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

Если Вам необходимо сохранить файл 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 в различных форматах:

Источник

Для работы с Excel в Delphi, первым делом нужно в Uses указать модуль ComObj.

procedure TForm1.Button1Click(Sender: TObject);

var

XL: Variant;

begin

XL := CreateOLEObject(‘Excel.Application’); // Создание OLE объекта

XL.WorkBooks.add; // Создание новой рабочей книги

XL.visible := true;

end;

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

XL.WorkBooks[1].WorkSheets[1].Cells[1,1].Value:=’30’;

//Результатом является присвоение ячейке [1,1] первого листа значения 30. Также к ячейке

//текущего листа можно обратиться следующим образом:

XL.Cells[1, 1]:=’30’;

Как добавить формулу в ячейку листа Excel в Delphi

XL.WorkBooks[1].WorkSheets[1].Cells[3,3].Value := ‘=SUM(B1:B2)’;

Форматирование текста в ячейках Excel, производится с помощью свойств Font и Interior объекта Cell:

// Цвет заливки

XL.WorkBooks[1].WorkSheets[1].Cells[1,1].Interior.Color := clYellow;

// Цвет шрифта

XL.WorkBooks[1].WorkSheets[1].Cells[1,1].Font.Color := clRed;

XL.WorkBooks[1].WorkSheets[1].Cells[1,1].Font.Name := ‘Courier’;

XL.WorkBooks[1].WorkSheets[1].Cells[1,1].Font.Size := 16;

XL.WorkBooks[1].WorkSheets[1].Cells[1,1].Font.Bold := True;

Работа с прямоугольными областями ячеек, с помощью объекта Range:

XL.WorkBooks[1].WorkSheets[1].Range[‘A1:C5’].Value := ‘Blue text’;

XL.WorkBooks[1].WorkSheets[1].Range[‘A1:C5’].Font.Color := clBlue;

//В результате в области A1:C5 все ячейки заполняются текстом ‘Blue text’.

Как выделить группу (область) ячеек Excel в Delphi

XL.Range[‘A1:C10’].Select;

Как установить объединение ячеек, перенос по словам, и горизонтальное или вертикальное выравнивание Excel в Delphi

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

//Выделяем группу (область) ячеек

XL.Range[‘A1:C10’].Select;

// объединение ячеек

XL.Selection.MergeCells:=True;

// перенос по словам

XL.Selection.WrapText:=True;

// горизонтальное выравнивание

XL.Selection.HorizontalAlignment:=3;

//вериткальное выравнивание

XL.Selection.VerticalAlignment:=1;

//Возможны следующие значения:

//1 — выравнивание по умолчанию,

//2 — выравнивание слева,

//3 — выравнивание по центру,

//4 — выравнивание справа.

Как задать границы ячеек Excel в Delphi

XL.Selection.Borders.LineStyle:=1;

// значение может быть установлено от 1 до 10

Как выровнять столбцы Excel по ширине, в зависимости от содержания

XL.selection.Columns.AutoFit;

Как удалить столбец Excel в Delphi

Как задать формат ячеек Excel в Delphi

XL.columns[1].NumberFormat := ‘@’; // текстовый формат

XL.columns[1].NumberFormat := ‘m/d/yyyy’; //  формат дата

XL.columns[1].NumberFormat = ‘0.00%’ // формат процентный

XL.columns[1].NumberFormat = ‘h:mm;@’// формат время



Re[4]: Как добавить через Делфи лист в Excel?

От:

Whisperer

 
Дата:  25.06.02 04:46
Оценка:

3 (1)

Здравствуйте Whisperer, Вы писали:

W>Здравствуйте Yury_Malich, Вы писали:


YM>>Здравствуйте Whisperer, Вы писали:


W>>>Здравствуйте Yury_Malich, Вы писали:


YM>>>>Есть фукция

YM>>>>TExcelApplication.Worksheets.Add(Before: OleVariant; After: OleVariant; Count: OleVariant; Type_: OleVariant;
YM>>>>lcid: Integer): IDispatch; safecall;
YM>>>>Я пробовал её при самых разных параметрах (например:
YM>>>>Add(2,1,1,xlWorksheet,1);
YM>>>>Add(‘Лист2′,’Лист1’,1,xlWorksheet,1);
YM>>>>Add(ExcelApplBase.Worksheets.Item[2],ExcelApplBase.Worksheets.Item[1],1,xlWorksheet,1);
YM>>>>и множество других сочетаний параметров Before,After,lcid и Type_
YM>>>>), но при любом выскакивает ошибка:
YM>>>>’OLE error 800A03EC’. При этом с функцией Workbooks.Add никаких проблем нет.
YM>>>>Если мне кто-нибудь приведёт работающий пример, я буду очень благодарен.
YM>>>>Спасибо
YM>>>>Юрий
W>>>Я бы натвоем месте сначала почитал MSDN
W>>>вот кусок

W>>>Creates a new worksheet. The new worksheet becomes the active sheet. Returns a Worksheet object.

W>>>Syntax
W>>>expression.Add(Before, After, Count, Type)
W>>>expression Required. An expression that returns a Worksheets object.
W>>>Before Optional Variant. An object that specifies the sheet before which the new sheet is added.
W>>>After Optional Variant. An object that specifies the sheet after which the new sheet is added.
W>>>Count Optional Variant. The number of sheets to be added. The default value is one.
W>>>Type Optional Variant. The sheet type. Can be one of the following XlSheetType constants: xlWorksheet, xlExcel4MacroSheet, or xlExcel4IntlMacroSheet. The default value is xlWorksheet.
W>>>Remarks
W>>>If Before and After are both omitted, the new sheet is inserted before the active sheet.
W>>>———————————————————————————

YM>>Ну знаешь… В общем, как говорится, не умничайте. Я это уже читал. То же самое написано в справке VisualBasic к Excel. Ты мне работающий пример на Делфи приведи.

YM>>Спасибо, конечно, но ответ не катит.

W>Да вы необежайтесь — я не умнечаю, но так думаю ты пытаешься создать лист без страници вот и

W>ошибка васкакивает

W>Этот код работает


W>procedure TForm1.Button1Click(Sender: TObject);

W>var
W> lcid: Integer;
W> Before: OleVariant;
W> After: OleVariant;
W> Count: OleVariant;
W> Type_: OleVariant;
W>begin
W> ExcelApplication1.Workbooks.Add(xlWBATWorksheet,1); а если это убрать таже ошибка
W> Before:= ExcelApplication1.Sheets.Add(
W> EmptyParam,EmptyParam, EmptyParam,EmptyParam,0);
W> After:= EmptyParam;
W> lcid := 1;
W> Count := 1;
W> Type_ := xlWorksheet;
W> ExcelApplication1.Worksheets.Add(Before,After,Count,Type_,lcid);

W>end;


W>ну а дальше экспериментируй.

И так работает

ExcelApplication1.Workbooks.Add(xlWBATWorksheet,1);
Before:= ExcelApplication1.Worksheets.Item[1];
After:= EmptyParam;
lcid := 1;
Count := 10;
Type_ := xlWorksheet;
ExcelApplication1.Worksheets.Add(Before,After,Count,Type_,lcid);

так что извенения в студию, или хотябы ОЦЕНОЧКУ


Как добавить через Делфи лист в Excel?

От:

Yury_Malich

Германия

http://malich.ru
Дата:  24.06.02 10:41
Оценка:

Есть фукция
TExcelApplication.Worksheets.Add(Before: OleVariant; After: OleVariant; Count: OleVariant; Type_: OleVariant;
lcid: Integer): IDispatch; safecall;
Я пробовал её при самых разных параметрах (например:
Add(2,1,1,xlWorksheet,1);
Add(‘Лист2′,’Лист1’,1,xlWorksheet,1);
Add(ExcelApplBase.Worksheets.Item[2],ExcelApplBase.Worksheets.Item[1],1,xlWorksheet,1);
и множество других сочетаний параметров Before,After,lcid и Type_
), но при любом выскакивает ошибка:
‘OLE error 800A03EC’. При этом с функцией Workbooks.Add никаких проблем нет.
Если мне кто-нибудь приведёт работающий пример, я буду очень благодарен.
Спасибо
Юрий

«Практика — критерий истины» (c) Маркс


Re: Как добавить через Делфи лист в Excel?

От:

Whisperer

 
Дата:  24.06.02 12:33
Оценка:

Здравствуйте Yury_Malich, Вы писали:

YM>Есть фукция

YM>TExcelApplication.Worksheets.Add(Before: OleVariant; After: OleVariant; Count: OleVariant; Type_: OleVariant;
YM>lcid: Integer): IDispatch; safecall;
YM>Я пробовал её при самых разных параметрах (например:
YM>Add(2,1,1,xlWorksheet,1);
YM>Add(‘Лист2′,’Лист1’,1,xlWorksheet,1);
YM>Add(ExcelApplBase.Worksheets.Item[2],ExcelApplBase.Worksheets.Item[1],1,xlWorksheet,1);
YM>и множество других сочетаний параметров Before,After,lcid и Type_
YM>), но при любом выскакивает ошибка:
YM>’OLE error 800A03EC’. При этом с функцией Workbooks.Add никаких проблем нет.
YM>Если мне кто-нибудь приведёт работающий пример, я буду очень благодарен.
YM>Спасибо
YM>Юрий
Я бы натвоем месте сначала почитал MSDN
вот кусок

Creates a new worksheet. The new worksheet becomes the active sheet. Returns a Worksheet object.
Syntax
expression.Add(Before, After, Count, Type)
expression Required. An expression that returns a Worksheets object.
Before Optional Variant. An object that specifies the sheet before which the new sheet is added.
After Optional Variant. An object that specifies the sheet after which the new sheet is added.
Count Optional Variant. The number of sheets to be added. The default value is one.
Type Optional Variant. The sheet type. Can be one of the following XlSheetType constants: xlWorksheet, xlExcel4MacroSheet, or xlExcel4IntlMacroSheet. The default value is xlWorksheet.
Remarks
If Before and After are both omitted, the new sheet is inserted before the active sheet.
———————————————————————————


Re[2]: Как добавить через Делфи лист в Excel?

От:

Yury_Malich

Германия

http://malich.ru
Дата:  25.06.02 04:00
Оценка:

Здравствуйте Whisperer, Вы писали:

W>Здравствуйте Yury_Malich, Вы писали:


YM>>Есть фукция

YM>>TExcelApplication.Worksheets.Add(Before: OleVariant; After: OleVariant; Count: OleVariant; Type_: OleVariant;
YM>>lcid: Integer): IDispatch; safecall;
YM>>Я пробовал её при самых разных параметрах (например:
YM>>Add(2,1,1,xlWorksheet,1);
YM>>Add(‘Лист2′,’Лист1’,1,xlWorksheet,1);
YM>>Add(ExcelApplBase.Worksheets.Item[2],ExcelApplBase.Worksheets.Item[1],1,xlWorksheet,1);
YM>>и множество других сочетаний параметров Before,After,lcid и Type_
YM>>), но при любом выскакивает ошибка:
YM>>’OLE error 800A03EC’. При этом с функцией Workbooks.Add никаких проблем нет.
YM>>Если мне кто-нибудь приведёт работающий пример, я буду очень благодарен.
YM>>Спасибо
YM>>Юрий
W>Я бы натвоем месте сначала почитал MSDN
W>вот кусок

W>Creates a new worksheet. The new worksheet becomes the active sheet. Returns a Worksheet object.

W>Syntax
W>expression.Add(Before, After, Count, Type)
W>expression Required. An expression that returns a Worksheets object.
W>Before Optional Variant. An object that specifies the sheet before which the new sheet is added.
W>After Optional Variant. An object that specifies the sheet after which the new sheet is added.
W>Count Optional Variant. The number of sheets to be added. The default value is one.
W>Type Optional Variant. The sheet type. Can be one of the following XlSheetType constants: xlWorksheet, xlExcel4MacroSheet, or xlExcel4IntlMacroSheet. The default value is xlWorksheet.
W>Remarks
W>If Before and After are both omitted, the new sheet is inserted before the active sheet.
W>———————————————————————————

Ну знаешь… В общем, как говорится, не умничайте. Я это уже читал. То же самое написано в справке VisualBasic к Excel. Ты мне работающий пример на Делфи приведи.
Спасибо, конечно, но ответ не катит.

«Практика — критерий истины» (c) Маркс


Re[3]: Как добавить через Делфи лист в Excel?

От:

Whisperer

 
Дата:  25.06.02 04:40
Оценка:

Здравствуйте Yury_Malich, Вы писали:

YM>Здравствуйте Whisperer, Вы писали:


W>>Здравствуйте Yury_Malich, Вы писали:


YM>>>Есть фукция

YM>>>TExcelApplication.Worksheets.Add(Before: OleVariant; After: OleVariant; Count: OleVariant; Type_: OleVariant;
YM>>>lcid: Integer): IDispatch; safecall;
YM>>>Я пробовал её при самых разных параметрах (например:
YM>>>Add(2,1,1,xlWorksheet,1);
YM>>>Add(‘Лист2′,’Лист1’,1,xlWorksheet,1);
YM>>>Add(ExcelApplBase.Worksheets.Item[2],ExcelApplBase.Worksheets.Item[1],1,xlWorksheet,1);
YM>>>и множество других сочетаний параметров Before,After,lcid и Type_
YM>>>), но при любом выскакивает ошибка:
YM>>>’OLE error 800A03EC’. При этом с функцией Workbooks.Add никаких проблем нет.
YM>>>Если мне кто-нибудь приведёт работающий пример, я буду очень благодарен.
YM>>>Спасибо
YM>>>Юрий
W>>Я бы натвоем месте сначала почитал MSDN
W>>вот кусок

W>>Creates a new worksheet. The new worksheet becomes the active sheet. Returns a Worksheet object.

W>>Syntax
W>>expression.Add(Before, After, Count, Type)
W>>expression Required. An expression that returns a Worksheets object.
W>>Before Optional Variant. An object that specifies the sheet before which the new sheet is added.
W>>After Optional Variant. An object that specifies the sheet after which the new sheet is added.
W>>Count Optional Variant. The number of sheets to be added. The default value is one.
W>>Type Optional Variant. The sheet type. Can be one of the following XlSheetType constants: xlWorksheet, xlExcel4MacroSheet, or xlExcel4IntlMacroSheet. The default value is xlWorksheet.
W>>Remarks
W>>If Before and After are both omitted, the new sheet is inserted before the active sheet.
W>>———————————————————————————

YM>Ну знаешь… В общем, как говорится, не умничайте. Я это уже читал. То же самое написано в справке VisualBasic к Excel. Ты мне работающий пример на Делфи приведи.

YM>Спасибо, конечно, но ответ не катит.

Да вы необежайтесь — я не умнечаю, но так думаю ты пытаешься создать лист без страници вот и
ошибка васкакивает

Этот код работает

procedure TForm1.Button1Click(Sender: TObject);
var
lcid: Integer;
Before: OleVariant;
After: OleVariant;
Count: OleVariant;
Type_: OleVariant;
begin
ExcelApplication1.Workbooks.Add(xlWBATWorksheet,1); а если это убрать таже ошибка
Before:= ExcelApplication1.Sheets.Add(
EmptyParam,EmptyParam, EmptyParam,EmptyParam,0);
After:= EmptyParam;
lcid := 1;
Count := 1;
Type_ := xlWorksheet;
ExcelApplication1.Worksheets.Add(Before,After,Count,Type_,lcid);

end;

ну а дальше экспериментируй.


Re[5]: Как добавить через Делфи лист в Excel?

От:

Yury_Malich

Германия

http://malich.ru
Дата:  25.06.02 07:19
Оценка:

Здравствуйте Whisperer, Вы писали:

W>Здравствуйте Whisperer, Вы писали:


W>>Здравствуйте Yury_Malich, Вы писали:


YM>>>Здравствуйте Whisperer, Вы писали:


W>>>>Здравствуйте Yury_Malich, Вы писали:


YM>>>>>Есть фукция

YM>>>>>TExcelApplication.Worksheets.Add(Before: OleVariant; After: OleVariant; Count: OleVariant; Type_: OleVariant;
YM>>>>>lcid: Integer): IDispatch; safecall;
YM>>>>>Я пробовал её при самых разных параметрах (например:
YM>>>>>Add(2,1,1,xlWorksheet,1);
YM>>>>>Add(‘Лист2′,’Лист1’,1,xlWorksheet,1);
YM>>>>>Add(ExcelApplBase.Worksheets.Item[2],ExcelApplBase.Worksheets.Item[1],1,xlWorksheet,1);
YM>>>>>и множество других сочетаний параметров Before,After,lcid и Type_
YM>>>>>), но при любом выскакивает ошибка:
YM>>>>>’OLE error 800A03EC’. При этом с функцией Workbooks.Add никаких проблем нет.
YM>>>>>Если мне кто-нибудь приведёт работающий пример, я буду очень благодарен.
YM>>>>>Спасибо
YM>>>>>Юрий
W>>>>Я бы натвоем месте сначала почитал MSDN
W>>>>вот кусок

W>>>>Creates a new worksheet. The new worksheet becomes the active sheet. Returns a Worksheet object.

W>>>>Syntax
W>>>>expression.Add(Before, After, Count, Type)
W>>>>expression Required. An expression that returns a Worksheets object.
W>>>>Before Optional Variant. An object that specifies the sheet before which the new sheet is added.
W>>>>After Optional Variant. An object that specifies the sheet after which the new sheet is added.
W>>>>Count Optional Variant. The number of sheets to be added. The default value is one.
W>>>>Type Optional Variant. The sheet type. Can be one of the following XlSheetType constants: xlWorksheet, xlExcel4MacroSheet, or xlExcel4IntlMacroSheet. The default value is xlWorksheet.
W>>>>Remarks
W>>>>If Before and After are both omitted, the new sheet is inserted before the active sheet.
W>>>>———————————————————————————

YM>>>Ну знаешь… В общем, как говорится, не умничайте. Я это уже читал. То же самое написано в справке VisualBasic к Excel. Ты мне работающий пример на Делфи приведи.

YM>>>Спасибо, конечно, но ответ не катит.

W>>Да вы необежайтесь — я не умнечаю, но так думаю ты пытаешься создать лист без страници вот и

W>>ошибка васкакивает

W>>Этот код работает


W>>procedure TForm1.Button1Click(Sender: TObject);

W>>var
W>> lcid: Integer;
W>> Before: OleVariant;
W>> After: OleVariant;
W>> Count: OleVariant;
W>> Type_: OleVariant;
W>>begin
W>> ExcelApplication1.Workbooks.Add(xlWBATWorksheet,1); а если это убрать таже ошибка
W>> Before:= ExcelApplication1.Sheets.Add(
W>> EmptyParam,EmptyParam, EmptyParam,EmptyParam,0);
W>> After:= EmptyParam;
W>> lcid := 1;
W>> Count := 1;
W>> Type_ := xlWorksheet;
W>> ExcelApplication1.Worksheets.Add(Before,After,Count,Type_,lcid);

W>>end;


W>>ну а дальше экспериментируй.

W>И так работает



W> ExcelApplication1.Workbooks.Add(xlWBATWorksheet,1);

W> Before:= ExcelApplication1.Worksheets.Item[1];
W> After:= EmptyParam;
W> lcid := 1;
W> Count := 10;
W> Type_ := xlWorksheet;
W> ExcelApplication1.Worksheets.Add(Before,After,Count,Type_,lcid);

W>так что извенения в студию, или хотябы ОЦЕНОЧКУ

Спасибо тебе преогромное, выручил. Моя благодарность не будет иметь границ (в пределах разумного, разумеется ). Я потестит вся загвоздка заключалася в After=EmptyParam (или Before=EmptyParam, в принципе без разницы), остальной код в моём приложении остался без изменений.
Спасибо.
Юрий

«Практика — критерий истины» (c) Маркс


Re[6]: Как добавить через Делфи лист в Excel?

От:

Хитрик Денис

Россия

RSDN
Дата:  25.06.02 12:36
Оценка:

Здравствуйте Yury_Malich, Здравствуйте Whisperer, Вы писали:

[skipped]

Ребята, когда отвечаете на вопрос, достаточно и небольшого цитирования, чтобы адресат понял, к чему относится ваша реплика. Не ленИтесь нажимать Backspace!


Re[7]: Как добавить через Делфи лист в Excel?

От:

Whisperer

 
Дата:  26.06.02 04:21
Оценка:

Здравствуйте Хитрик Денис, Вы писали:

ХД>Здравствуйте Yury_Malich, Здравствуйте Whisperer, Вы писали:


ХД>[skipped]


ХД>Ребята, когда отвечаете на вопрос, достаточно и небольшого цитирования, чтобы адресат понял, к чему относится ваша реплика. Не ленИтесь нажимать Backspace!

А в чем собственна проблема. Текст много места незанимает, а так человек всю историю разговора видит.
Но замечания я приму к сведению.

Подождите ...

Wait...

  • Переместить
  • Удалить
  • Выделить ветку

Пока на собственное сообщение не было ответов, его можно удалить.

This step-by-step guide describes how to connect to Microsoft Excel, retrieve sheet data, and enable editing of the data using the DBGrid. You’ll also find a list of the most common errors that might appear in the process, plus how to deal with them.

What’s Covered Below:

  • Methods for transferring data between Excel and Delphi. How to connect to Excel with ADO (ActiveX Data Objects) and Delphi.
  • Creating an Excel spreadsheet editor using Delphi and ADO
  • Retrieving the data from Excel. How to reference a table (or range) in an Excel workbook.
  • A discussion on Excel field (column) types
  • How to modify Excel sheets: edit, add and delete rows.
  • Transferring data from a Delphi application to Excel. How to create a worksheet and fill it with custom data from an MS Access database.

How to Connect to Microsoft Excel

Microsoft Excel is a powerful spreadsheet calculator and data analysis tool. Since rows and columns of an Excel worksheet closely relate to the rows and columns of a database table, many developers find it appropriate to transport their data into an Excel workbook for analysis purposes; and retrieve data back to the application afterwards.

The most commonly used approach to data exchange between your application and Excel is Automation. Automation provides a way to read Excel data using the Excel Object Model to dive into the worksheet, extract its data, and display it inside a grid-like component, namely DBGrid or StringGrid.

Automation gives you the greatest flexibility for locating the data in the workbook as well as the ability to format the worksheet and make various settings at run time.

To transfer your data to and from Excel without Automation, you can use other methods such as:

  • Write data into a comma-delimited text file, and let Excel parse the file into cells
  • Transfer data using DDE (Dynamic Data Exchange)
  • Transfer your data to and from a worksheet using ADO

Data Transfer Using ADO

Since Excel is JET OLE DB compliant, you can connect to it with Delphi using ADO (dbGO or AdoExpress) and then retrieve the worksheet’s data into an ADO dataset by issuing an SQL query (just like you would open a dataset against any database table).

In this way, all the methods and features of the ADODataset object are available to process the Excel data. In other words, using the ADO components let you build an application that can use an Excel workbook as the database. Another important fact is that Excel is an out-of-process ActiveX server. ADO runs in-process and saves the overhead of costly out-of-process calls.

When you connect to Excel using ADO, you can only exchange raw data to and from a workbook. An ADO connection cannot be used for sheet formatting or implementing formulas to cells. However, if you transfer your data to a worksheet that is pre-formatted, the format is maintained. After the data is inserted from your application to Excel, you can carry out any conditional formatting using a (pre-recorded) macro in the worksheet.

You can connect to Excel using ADO with the two OLE DB Providers that are a part of MDAC: Microsoft Jet OLE DB Provider or Microsoft OLE DB Provider for ODBC Drivers. We’ll focus on Jet OLE DB Provider, which can be used to access data in Excel workbooks through installable Indexed Sequential Access Method (ISAM) drivers.

Tip: See the Beginners Course to Delphi ADO Database Programming if you’re new to ADO.

The ConnectionString Magic

The ConnectionString property tells ADO how to connect to the datasource. The value used for ConnectionString consists of one or more arguments ADO uses to establish the connection.

In Delphi, the TADOConnection component encapsulates the ADO connection object; it can be shared by multiple ADO dataset (TADOTable, TADOQuery, etc.) components through their Connection properties.

In order to connect to Excel, a valid connection string involves only two additional pieces of information — the full path to the workbook and the Excel file version.

A legitimate connection string could look like this:

ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:MyWorkBooksmyDataBook.xls;Extended Properties=Excel 8.0;';

When connecting to an external database format supported by the Jet, the extended properties for the connection needs to be set. In our case, when connecting to an Excel «database,» extended properties are used to set the Excel file version. 

For an Excel95 workbook, this value is «Excel 5.0» (without the quotes); use «Excel 8.0» for Excel 97, Excel 2000, Excel 2002, and ExcelXP.

Important: You must use the Jet 4.0 Provider since Jet 3.5 does not support the ISAM drivers. If you set the Jet Provider to version 3.5, you’ll receive the «Couldn’t find installable ISAM» error.

Another Jet extended property is «HDR=». «HDR=Yes» means that there is a header row in the range, so the Jet will not include the first row of the selection into the dataset. If «HDR=No» is specified, then the provider will include the first row of the range (or named range) into the dataset.

The first row in a range is considered to be the header row by default («HDR=Yes»). Therefore, if you have column heading, you do not need to specify this value. If you do not have column headings, you need to specify «HDR=No».

Now that you’re all set, this is the part where things become interesting since we’re now ready for some code. Let’s see how to create a simple Excel Spreadsheet editor using Delphi and ADO.

Note: You should proceed even if you lack knowledge on ADO and Jet programming. As you’ll see, editing an Excel workbook is as simple as editing data from any standard database.

Like this post? Please share to your friends:
  • Как вставить лист в альбомном формате word
  • Как вставить линию в график excel
  • Как вставить лист в word 2003
  • Как вставить линейку на word
  • Как вставить лист в excel первым