Delphi имена листов excel

324 / 316 / 84

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

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

1

16.10.2010, 17:57. Показов 10982. Ответов 8


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

Доброго времени суток. Возник вопрос как прочесть названия листов Excel и записать их CheckListBox1 например чтобы потом загрузить именно выбранный лист?



0



Mad_Dog

Фрилансер

452 / 433 / 117

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

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

16.10.2010, 18:25

2

Delphi
1
2
3
4
5
6
7
8
9
10
11
  try
    //если Эксель запущен, то получаю доступ к процессу...
    ExcelApp:=GetActiveOleObject('Excel.Application');
  except
    //если Эксель не запущен, то создаю процесс...
    ExcelApp:=CreateOleObject('Excel.Application')
  end;
 
 
 
  SheetNameXLS:=ExcelApp.Sheets.Item[IndexSheet].Name



0



324 / 316 / 84

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

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

17.10.2010, 17:37

 [ТС]

3

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

ExcelApp

А ЧТО ЗА ПЕРЕМЕННАЯ?



0



2184 / 1254 / 143

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

Сообщений: 4,592

17.10.2010, 18:34

4

Romantik_FM, Variant или OleVariant



0



324 / 316 / 84

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

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

17.10.2010, 21:50

 [ТС]

5

Спасибо, с переменной разобрался но не пойму как вывести список всё равно((



0



anonimus

2184 / 1254 / 143

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

Сообщений: 4,592

17.10.2010, 22:18

6

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

не пойму как вывести список всё равно((

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button1Click(Sender: TObject);
var ExcelApp:OleVariant;
i:integer;
begin
if not OpenDialog1.Execute then exit;
 
try
    ExcelApp:=GetActiveOleObject('Excel.Application');
  except
    ExcelApp:=CreateOleObject('Excel.Application')
  end;
ExcelApp.Workbooks.Open(OpenDialog1.FileName);
for i:=1 to ExcelApp.Worksheets.count do
CheckListBox1.Items.add(ExcelApp.Worksheets[i].Name);
end;



1



324 / 316 / 84

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

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

17.10.2010, 23:59

 [ТС]

7

не доступная опирация (((
а так должно работать в учебнике только нашёл это

Добавлено через 12 минут
Как сделать чтоб это работала при выключенном экселе?



0



2184 / 1254 / 143

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

Сообщений: 4,592

18.10.2010, 08:47

8

не доступная опирация (((

в Uses добавить модуль ComObj

Как сделать чтоб это работала при выключенном экселе?

в смысле?
это при включеном
GetActiveOleObject, это при выключеном
CreateOleObject. Все ж есть в примере



0



160 / 158 / 39

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

Сообщений: 461

18.10.2010, 12:16

9

Не по теме:

Меня интересует следующий вопрос, ответы нужно давать только использовать стандартные компоненты? ;)

Romantik_FM, что бы не заморачиваться с технлогией COM, которую я так понял ты пропустил в учебнике, открой google и в строке поиска напиши «Delphi компоненты Excel» поверь ты удивишся к-ву страниц. Качай компонент устанавливай и пользуйся.

Не по теме:

Delphi визуальный язык программирования, зачем выдумывать новый велосипед если уже кто то нашел его ;)



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

18.10.2010, 12:16

Помогаю со студенческими работами здесь

Название листов Excel
Здраствуйте! Есть книга Excel с кучей страниц. Они подписаны примерно так: Лист1(123), Лист2(125),…

Проверить название листов в книги Excel
Необходимо проверить название листов в книги Excel.
листы должны называться Лист1 и Лист2. В…

Определить, сколько можно купить тетрадей по 12 листов, по 48 листов и по 96 листов, зная цену
Определить, сколько можно купить тетрадей по 12 листов, по 48 листов и по 96 листов,
если цена…

Выбрав название столбца excel получть название зависимых строк
Требуется выбрав дисциплину (название столбцов) , получить зависимые компетенции(название строк)….

Использование в коде название листов и имен файлов на других языках
Добрый день! есть большая проблема. Макрос не хочет открывать файлы имя которых написано на…

Сравнение 2-х листов в Excel
Здравствуйте. Сравниваю 2 листа в книге Excel. На 1-м листе таблица: договор, номер этапа,……

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

9

Содержание

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

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 в различных форматах:

Источник

Delphi excel имя всех листов

Открываю нужный Excel файл:
ExcelApp:=CreateOleObject(«Excel.application»);
if OpenDialog1.Execute then
Edit1.Text:=OpenDialog1.FileName;
workbook:=ExcelApp.workbooks.add(Edit1.Text);
ExcelApp.visible:=True;

Далее мне нужно открыть нужный мне лист и вернуть его имя, типо так:
list:=Workbook.ActiveSheet.Name;
Только вот возвращает пока имя первого листа, а не тот который я открываю.
Как получить имя выбранного листа?


DiamondShark © ( 2008-01-24 12:55 ) [1]


> мне нужно открыть нужный мне лист

«Нужный» — это какой?
Доступ к листам осуществляется либо по индексу, либо по имени:
Workbook.Sheets(1).Activate
Workbook.Sheets(«Лист1»).Activate


> Только вот возвращает пока имя первого листа, а не тот который
> я открываю.

В приведённом коде ты никакой лист не «открываешь»


> Как получить имя выбранного листа?

«Выбранного» — это какого? Кем и каким образом выбранного?
В книге есть просто листы и активный (он же текущий) лист.
Тебе какой надо?


vvrz ( 2008-01-24 13:41 ) [2]

«Нужный» — это тот который выберет пользователь.
Пример: пользователь открывает через диалог файл xls, в нем допустим 5 листов, он просматривает содержимое каждого листа, находит лист с нужной информацией и оставляет этот лист активным(текущим), вот имя этого листа и нужно присвоить list.
Следующий файл может содержать, допустим 20 листов.
Имя файла xls, количество и наименование листов заранее не известно.

Источник

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

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

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

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

 
SiJack
 
(2003-05-06 08:30)
[0]

Делаю так

ExcelApp.conect;

worckBooks.Open(//документ//);

— как здесь получить список всех листов ?

ExcelApp.disconect;


 
sniknik
 
(2003-05-06 08:38)
[1]

не знаю как в твоем случае но так уверен будет работать быстрее

ADOConnection.ConnectionString:=

«Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:


 
SiJack
 
(2003-05-06 09:00)
[2]

ОК


 
StarCon
 
(2003-05-06 09:05)
[3]

// Коннект к Экселю

ExcelObject := «Excel.Application»;

Reg := TRegistry.Create;

Reg.RootKey := HKEY_CLASSES_ROOT;

try

if Reg.OpenKey(«Excel.ApplicationCurVer», False) then begin

ExcelObject := Reg.ReadString(«»);

Reg.CloseKey;

end;

finally

Reg.Free;

end;

if VarIsEmpty(XL) then begin

XL := CreateOleObject(ExcelObject);

end else begin

XL.Workbooks.Close;

end;

XL.Visible := Visible;

if (FileExists(FileName)) and

(UpperCase(ExtractFileExt(FileName)) = «.XLS») then begin

XL.Workbooks.Open(FileName);

end else begin

XL.WorkBooks.Add;

end;

// Цикл по Листам

for i := 1 to XL.WorkBooks[1].WorkSheets.Count do begin

// Поочередно сохраняем названия листов

NumForm := XL.WorkBooks[1].WorkSheets[i].Name;


XE3 use delphi with excel ole automation.
With this code I open and read / write in the cells, but I can not select different sheets (Sheet1, Sheet3 etc.)

begin
L_vi.Caption: = 'D:  bd1  file_supporto  Vi.xls';
Ex: = createoleobject ('Excel.Application');
Ex.visible: = true;
Ex.workbooks.open (L_vi.Caption);
Ex.cells [1,1]: = 'test';
Sheets: = Ex.Workbooks [1]. Worksheets ['Sheet3'];

Can you help?

thanks

P.S.
i resolved so:

Ex.Workbooks [1]. Worksheets ['Sheet3'].select;

thanks.

TLama's user avatar

TLama

74.7k17 gold badges210 silver badges386 bronze badges

asked Mar 30, 2013 at 10:53

user2225950's user avatar

This works well for me in XE3:

var
  XLApp: OleVariant;
  Sheet: OleVariant;
begin
  XLApp := CreateOleObject('Excel.Application');
  XLApp.Visible := True;
  XLApp.Workbooks.Open('C:TestTesting.xls');
  ShowMessage(XLApp.Workbooks[1].Worksheets[1].Name);  // Sheet1
  Sheet := XLApp.Worksheets.Item['Sheet3']; 
  ShowMessage(Sheet.Name);                             // Sheet3
  Sheet.Select;
  // This also works
  XLApp.WorkSheets.Item['Sheet1'].Select;              // Sheet1
end;

answered Mar 30, 2013 at 16:50

Ken White's user avatar

Ken WhiteKen White

123k14 gold badges222 silver badges438 bronze badges

0

Для начала необходимо использовать следующие модули:

uses
  Variants, Registry,
 ComObj, Excel2000,
 ActiveX;

Теперь простенькая функция определения установлен ли соответствующий
объект в системе или нет. С её помощью можно искать Excel, Word и т.д…Для начала необходимо использовать следующие модули:

functionIsOLEObjectInstalled(Name:string):boolean;
var
ClassID:TCLSID;
Rez:HRESULT;
begin
// Ищем CLSID OLE-объекта
Rez:=CLSIDFromProgID(PWideChar(WideString(Name)),ClassID);
if Rez=S_OKthen
// Объект найден
Result:=true
else
Result:=false;
end;

Например:

 IsOLEObjectInstalled('Excel.Application.8')

Так мы можем определить установлены ли объекты соответствующей версии Excel или нет.

Теперь попробуем запустить Excel.
Определим переменные:

var
  cls_ExcelObject: string;
  WorkSheet: Variant;
  Excel: Variant;
  RegData: TRegistry;

Для того, что бы избавится от локальных названий класса для каждой верcии Office Excel необходимо выбрать ветку реестра с текущей весией, и если эта ветка существует сменить название.

 begin
    // Это для того, чтобы не применять локальные
// для каждой версии
    // названия "Excel.Application.8", "Excel.Application.9".
    // Ко всему прочему приведенный пример
    // не работает с Excel95.
    cls_ExcelObject := 'Excel.Application';
    RegData := TRegistry.Create;
    RegData.RootKey := HKEY_CLASSES_ROOT;
    try
      if RegData.OpenKey('Excel.ApplicationCurVer', False) then
      begin
        cls_ExcelObject := regData.ReadString('');
        RegData.CloseKey;
      end
    finally
      regData.Free;
    end;

Определим установлен Excel на данный компьютер или нет.

    if not IsOLEObjectInstalled(cls_ExcelObject) then
    begin
      ShowMessage('Excel не установлен.');
      exit;
    end;

    // Вот теперь откроем Excel
    Excel := CreateOleObject(cls_ExcelObject);

Вот теперь самые интересные параметры работы с Excel. Мы отключает все события, интерактивную реакцию, в том числе и перерисовку, отображение в строке состояния, отображение границ листа и пересчет формул (если конечно не нужно пересчитывать формулы автоматически. А еще делаем процесс работы приложения невидимым.

  // Отключаем реакцию Excel на события,
    // чтобы ускорить обработку информации информации
    Excel.Application.ScreenUpdating := False
    Excel.Application.Calculation := xlCalculationManual;
    Excel.Application.EnableEvents := false;
    Excel.Application.Interactive := False;
    Excel.Application.DisplayAlerts := False;
    Excel.ActiveSheet.DisplayPageBreaks := False;
    Excel.Application.DisplayStatusBar := False;
    Excel.Visible := false;

А теперь создадим таблицу или откроем указанный файл:

    //  Создадим новую таблицу
   Excel.Workbooks.Add;
   // -------- или ---------
    //    Откроем существующую таблицу
    Excel.Workbooks.Open('FileName.xls');

Получим дополнительную информацию. Количество листов в книге, получим имена всех листов.

UsedRange — очень интересное свойство.
Через него можно узнать физическое количество заполненных ячеек
первую строку заполненного диапазона. Очень полезно для парсинга таблиц прайсов.

 // Количество значащих строк
 Rows := WorkSheet.UsedRange.Rows.Count;
// Количество значащих колонок
Columns := WorkSheet.UsedRange.Columns.Count;
// Первая строка диапазона
First := WorkSheet.UsedRange.Row;

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

// Количество листов в таблице
    SheetsCount := Excel.Sheets.Count;
// Получим имена всех листов в первой открытой книге
    for i := 1 to SheetsCount do
    begin
      WorkSheetsNames.Items.Add(Excel.Workbooks[1].WorkSheets[i].Name);
    end;

// Выберем первый лист первой книги
    WorkSheet := Excel.Workbooks[1].WorkSheets[1];
    Rows := WorkSheet.UsedRange.Rows.Count;
 // Количество значащих строк
    Columns := WorkSheet.UsedRange.Columns.Count;
 // Количество значащих колонок
    // Первая строка диапазона
    FirstString := WorkSheet.UsedRange.Row;

Дальше уже можно работать с таблицей. Обработка и парсинг Excel книги мы рассмотрим в следующей статье.

Но перед завершением программы не забудем вернуть свойства Excel в исходное состояние. В примере сохраняю в другой файл и закрываю Excel без запроса на сохранение. Т.е. если были открыты другие файлы и в них были изменения не будет выдано запроса на сохранение измененных файлов.

 
Excel.Application.EnableEvents := true;
Excel.Application.Interactive := true;
Excel.Application.DisplayAlerts := true;
Excel.ActiveWorkbook.SaveCopyAs('FileName.xls');
Excel.ActiveWorkbook.Close(0); // xlDontSaveChanges
Excel.Quit;
Excel := Unassigned;

Дополнительные ссылки:
Особенности работы с «Русским» Excel’ем


Tech Daily — Щоденні новини технологій

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