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 |
|||
0 |
324 / 316 / 84 Регистрация: 03.03.2010 Сообщений: 1,364 |
|
17.10.2010, 17:37 [ТС] |
3 |
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 |
|||
не пойму как вывести список всё равно((
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 Как сделать чтоб это работала при выключенном экселе? в смысле?
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 Определить, сколько можно купить тетрадей по 12 листов, по 48 листов и по 96 листов, зная цену Выбрав название столбца excel получть название зависимых строк Использование в коде название листов и имен файлов на других языках Сравнение 2-х листов в Excel Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 9 |
Содержание
- Excel в Delphi. Методы объекта WorkSheet (лист).
- План статьи:
- 1. Объекты Microsoft Excel
- 2. Как активировать лист рабочей книги Excel?
- 3. Методы листа книги Excel
- Метод Calculate
- Метод CheckSpelling
- Метод SaveAs
- 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 в миниатюре. Т.е. из этой модели исключены не требующиеся пока нам элементы, например такие, как свойства рабочей книги или выделенные объекты 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 насчитывает 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. |
0
0
голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
← →
vvrz
(2008-01-24 12:01)
[0]
Открываю нужный 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, количество и наименование листов заранее не известно.
Создание документа
Внимание!!! Всегда когда создаете объект интерфейса, заключайте процедуру создания в модуль обработки ошибок:
try
создаем интерфейс;
формируем отчет;
освобождаем интерфейс;
Except
обрабатываем ошибки;
освобождаем интерфейс;
end;
Далее идет краткий справочник по основным функциям работы с EXCEL
try
// создаем обьект EXCEL
excel := CreateOleObject(‘Excel.Application’);
// Чтоб не задавал вопрос о сохранении документа
excel.DisplayAlerts := false;
// создаем новый документ рабочую книгу
excel.WorkBooks.Add;
// или загружаем его из директории с программой
excel.WorkBooks.Open(GetCurrentDir() + ‘отчет.xls’);
{ GetCurrentDir()- возвращает путь к директории с программой}
// Делаем его видимым данную функцию после отладки и тестирования лучше использовать в конце, после сформирования отчета (это ускоряет процесс вывода данных в отчет)
excel.Visible := true;
//задаем тип формул в формате R1C1
excel.Application.ReferenceStyle := xlR1C1;
// задаем тип формул в формате A1
excel.Application.ReferenceStyle := xlA1;
// Задаем название первому и второму листу
excel.WorkBooks[1].WorkSheets[1].Name := ‘Отчет1’;
excel.WorkBooks[1].WorkSheets[2].Name := ‘Отчет2’;
//задаем формат числа для первой и четвертой колонки формат числа
excel.WorkBooks[1].WorkSheets[1].Columns[1].NumberFormat := ‘0,00’;
excel.WorkBooks[1].WorkSheets[1].Columns[4].NumberFormat := ‘0,0’;
// задаем ширину первой и второй колонки
excel.WorkBooks[1].WorkSheets[1].Columns[1].ColumnWidth := 10;
excel.WorkBooks[1].WorkSheets[1].Columns[2].ColumnWidth := 20;
// задаем начертание, цвет, размер и тип шрифта для первого ряда
excel.WorkBooks[1].WorkSheets[1].Rows[1].Font.Bold := True; //жирный
excel.WorkBooks[1].WorkSheets[1].Rows[1].Font.Color := clRed; // цвет красный
excel.WorkBooks[1].WorkSheets[1].Rows[1].Font.Size := 12; //размер 12
excel.WorkBooks[1].WorkSheets[1].Rows[1].Font.Name := ‘Times New Roman’; //шрифт
//присваиваем ячейке 1,4 и 2,4 значения (1 — ряд, 4 — колонка)
excel.WorkBooks[1].WorkSheets[1].Cells[1, 4] := ‘А так можно внести значение в ячейку’;
excel.WorkBooks[1].WorkSheets[1].Cells[2, 4] := ‘А так можно внести значение в ячейку’;
//ввод в ячейку ‘A12’ формулы ‘=b5+c4’
excel.WorkBooks[1].WorkSheets[1].Range[‘A12′].Formula:=’=b5+c4’;
// Выравнивам первый ряд по центру по вертикали
excel.WorkBooks[1].WorkSheets[1].Rows[1].VerticalAlignment := xlCenter;
// Выравнивам первый ряд по центру по горизонтали
excel.WorkBooks[1].WorkSheets[1].Rows[1].HorizontalAlignment := xlCenter;
// Выравнивам в ячейке по левому краю
excel.WorkBooks[1].WorkSheets[1].Cells[3, 2].HorizontalAlignment := xlLeft;
// Выравнивам в ячейке по правому краю
excel.WorkBooks[1].WorkSheets[1].Cells[3, 4].HorizontalAlignment := xlRight;
// Обьединяем ячейки ‘A1:A8’
excel.WorkBooks[1].WorkSheets[1].Range[‘A1:A8’].Merge;
// Поворачиваем слова под углом 90 градусов для второго ряда
excel.WorkBooks[1].WorkSheets[1].Rows[2].Orientation := 90;
// Поворачиваем слова под углом 45 градусов для диапазона ячеек ‘B3:D3’
excel.WorkBooks[1].WorkSheets[1].Range[‘B3:D3’].Orientation := 45;
//рисуем границы выделенного диапазона левая
excel.Selection.Borders[xlEdgeLeft].LineStyle := xlContinuous; // стиль линии сплошная
excel.Selection.Borders[xlEdgeLeft].Weight := xlMedium;// толщина линии
//рисуем границы выделенного диапазона верхняя
excel.Selection.Borders[xlEdgeTop].LineStyle := xlContinuous;
excel.Selection.Borders[xlEdgeTop].Weight := xlMedium;
//рисуем границы выделенного диапазона нижняя
excel.Selection.Borders[xlEdgeBottom].LineStyle := xlContinuous;
excel.Selection.Borders[xlEdgeBottom].Weight := xlMedium;
//рисуем границы выделенного диапазона правая
excel.Selection.Borders[xlEdgeRight].LineStyle := xlContinuous;
excel.Selection.Borders[xlEdgeRight].Weight := xlMedium;
//рисуем границы выделенного диапазона вертикальные внутрениие
excel.Selection.Borders[xlInsideVertical].LineStyle := xlContinuous;
excel.Selection.Borders[xlInsideVertical].Weight := xlMedium;
//рисуем границы выделенного диапазона горизонтальные внутрениие
excel.Selection.Borders[xlInsideHorizontal].LineStyle := xlContinuous;
excel.Selection.Borders[xlInsideHorizontal].Weight := xlMedium;
//автозаполнение выделенного диапазона
//для примера заполним область ячеек ‘A10:C10’ словом ‘привет’
//и размножим его вниз еще на пять ячеек ‘A10:C15’
excel.WorkBooks[1].WorkSheets[1].Range[‘A10:C10′].Value:=’привет’;
//выделяем диапазон ячеек ‘A10:C10’
excel.WorkBooks[1].WorkSheets[1].Range[‘A10:C10’].Select;
//автозаполняем (копируем) выделенным диапазоном область ячеек ‘A10:C15’
excel.selection.autofill(excel.WorkBooks[1].WorkSheets[1].Range[‘A10:C15’],xlFillDefault);
//отключаем предупреждения, чтобы не задавал вопросов о сохранении и других
excel.DisplayAlerts := False;
//сохраняем документ в формате Excel 97-2003
excel.ActiveWorkBook.Saveas(GetCurrentDir() + ‘отчет.xls’,xlExcel8);
//сохраняем документ в текущем формате Excel 2007
excel.ActiveWorkBook.Saveas(GetCurrentDir() + ‘отчет.xlsx’);
//закроем все книги
excel.Workbooks.Close;
//закрываем Excel
excel.Application.quit;
//освобождаем интерфейсы
excel := Unassigned;
Except
//обрабатываем ошибки
showmessage(‘Внимание! Произошла ошибка при создании MS Excel приложения’);
//закроем все книги
excel.Workbooks.Close;
//закрываем Excel
excel.Application.quit;
//освобождаем интерфейсы
excel := Unassigned;
end;
end;
При работе с листом Excel мы можем использовать следующие варианты:
— работать с областью Range[‘B3:D3’];
— работать с ячейкой Cells[2, 4] где 2 — ряд, 4 — колонка;
— работать с рядами Rows[1] или с диапазоном рядов Rows[‘1:5’];
— работать с колонками Columns[1] или диапазоном колонок Columns[‘A:I’];
Range[‘A1’] и Cells[1, 1] обозначают одно и тоже.
После сформирования документа или возникновении ошибки вы должны правильно освободить интерфейсы.
Иначе при закрытии Excel он скрывается с экрана, но если открыть диспетчер задач он продолжает там висеть и если данный процесс не завершить , то при каждом новом запуске их будет накапливаться больше и больше, пока компьютер не начнет виснуть. Поэтому обязательно необходимо освобождать все интерфейсы с вязанные с Excel с его книгами и листами.
Например так:
//закроем все книги
excel.Workbooks.Close;
//закрываем Excel
excel.Application.quit;
//освобождаем интерфейсы
sheet:=Unassigned; //интерфейс листа если он был создан
WorkBook := Unassigned;//интерфейс рабочей книги если он был создан
excel := Unassigned;//интерфейс самого предложения если он был создан
end;
Ниже привожу пример вывода в Excel из Delphi таблицы умножения с подробными комментариями.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, comobj, StdCtrls, Excel_TLB;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
excel: variant; // Переменная в которой создаётся объект EXCEL
MyData: variant; // Переменная в которой формируется таблица умножения
i,j:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
try
// Обьект EXCEL
excel := CreateOleObject(‘Excel.Application’);
// Чтоб не задавал вопрос о сохранении документа
excel.DisplayAlerts := false;
// новый документ
excel.WorkBooks.Add;
//объявляем вариантный массив
MyData := VarArrayCreate([1,9,1,9],varVariant);
for I := 1 to 9 do
for J := 1 to 9 do
MyData[i,j]:=i*j;
// Обьединяем ячейки ‘A1:I1’
excel.WorkBooks[1].WorkSheets[1].Range[‘A1:I1’].Merge;
//Пишем заголовок
excel.WorkBooks[1].WorkSheets[1].Range[‘A1′].Value:=’Таблица умножения’;
// Выравнивам заголовок по центру
excel.WorkBooks[1].WorkSheets[1].Range[‘A1’].HorizontalAlignment := xlCenter;
// задаем ширину колонок с A по I
excel.WorkBooks[1].WorkSheets[1].Columns[‘A:I’].ColumnWidth := 3;
//выделяем область таблицы умножения [‘A2:I10’] и рисуем границы
excel.WorkBooks[1].WorkSheets[1].Range[‘A2:I10’].select;
//рисуем границы выделенного диапазона левая
excel.Selection.Borders[xlEdgeLeft].LineStyle := xlContinuous; // стиль линии сплошная
excel.Selection.Borders[xlEdgeLeft].Weight := xlThin;// толщина линии
//рисуем границы выделенного диапазона верхняя
excel.Selection.Borders[xlEdgeTop].LineStyle := xlContinuous;
excel.Selection.Borders[xlEdgeTop].Weight := xlThin;
//рисуем границы выделенного диапазона нижняя
excel.Selection.Borders[xlEdgeBottom].LineStyle := xlContinuous;
excel.Selection.Borders[xlEdgeBottom].Weight := xlThin;
//рисуем границы выделенного диапазона правая
excel.Selection.Borders[xlEdgeRight].LineStyle := xlContinuous;
excel.Selection.Borders[xlEdgeRight].Weight := xlThin;
//рисуем границы выделенного диапазона вертикальные внутрениие
excel.Selection.Borders[xlInsideVertical].LineStyle := xlContinuous;
excel.Selection.Borders[xlInsideVertical].Weight := xlThin;
//рисуем границы выделенного диапазона горизонтальные внутрениие
excel.Selection.Borders[xlInsideHorizontal].LineStyle := xlContinuous;
excel.Selection.Borders[xlInsideHorizontal].Weight := xlThin;
//присваиваем диапазону [‘A2:I10’] значения вариантного массива MyData это значительно ускоряет работу, нежели вывод по //ячеечно
excel.WorkBooks[1].WorkSheets[1].Range[‘A2:I10’].Value:=MyData;
// Делаем его видимым
excel.Visible := true;
//освобождаем интерфейсы
MyData:= Unassigned;
excel := Unassigned;
Except
showmessage(‘Внимание! Произошла ошибка при создании MS Excel приложения’);
//закрываем Excel
excel.Application.quit;
//освобождаем интерфейсы
MyData:= Unassigned;
excel := Unassigned;
end;
end;
end.
При написании статьи использовался материал с сайта http://vlad2000.h1.ru/Frames/Statyi/page_14.html