Содержание
- Excel в Delphi. Методы объекта WorkSheet (лист).
- План статьи:
- 1. Объекты Microsoft Excel
- 2. Как активировать лист рабочей книги Excel?
- 3. Методы листа книги Excel
- Метод Calculate
- Метод CheckSpelling
- Метод 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 в различных форматах:
Источник
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!
А в чем собственна проблема. Текст много места незанимает, а так человек всю историю разговора видит.
Но замечания я приму к сведению.
- Переместить
- Удалить
- Выделить ветку
Пока на собственное сообщение не было ответов, его можно удалить.
← →
Fishka
(2002-09-30 12:06)
[0]
Проверяю, запущено или нет приложение EXCEL. Если нет, то пишу так:
MSExcel := CreateOleObject(«Excel.Application»);
Если запущено, то необходимо добавить лист.Макрос выглядит так:
Sheets.Add
Все, что пробовалось мною, при запуске вылетело с ошибкой.
А как нужно написать в программе? Как обратиться к переменной MSEXCEL типа Variant?
← →
3JIA9I CyKA
(2002-09-30 12:32)
[1]
Что типа этого. Проверять и не думал. Если сразу заработает, то это случайно.
var
MSEXCEL, WB, WS : Variant;
begin
MSEXCEL := CreateOleObject(«Excel.Application»);
WB := MSEXCEL.Workbooks.Add;
WS := WB.Worksheets[1];
end;
← →
Fishka
(2002-09-30 15:54)
[2]
>3JIA9I CyKA © (30.09.02 12:32)
var MSEXCEL, WB, WS : Variant;
begin
>
MSEXCEL := CreateOleObject(«Excel.Application»);
Так я пишу, если EXCEL не запущен.
Но мне не нужен еще один EXCEL. Вопрос в том, как не создавая CreateOleObject, выполнить
MSEXCEL.Workbooks.Add;
а то программа при выполнении выдает на этой строке ошибку.
← →
Prooksius
(2002-09-30 16:04)
[3]
Нечто наподобие с Word-ом:
var
MsWord: Variant;
…
try
// Если Word уже запущен
MsWord := GetActiveOleObject("Word.Application");
// Взять ссылку на запущенный OLE объект
except
try
// Word не запущен, запустить
MsWord := CreateOleObject("Word.Application");
// Создать ссылку на зарегистрированный OLE объект
MsWord.Visible := True;
except
ShowMessage("Не могу запустить Microsoft Word");
Exit;
end;
end;
end;
← →
Fishka
(2002-10-01 09:46)
[4]
>Prooksius © (30.09.02 16:04)
Спасибо за GetActiveOleObject.
Мне, наверное, нужен номер книги и номер листа (i,j), чтобы добавить в книгу с номером i новый лист, который будет иметь номер j. (Для новой книги i=1, j=1).
MSExcel.Workbooks[i].Sheets.Add;
MSExcel.Workbooks[i].WorkSheets[j].Select;
Как найти i,j? Или это вообще все делается по-другому?
← →
3JIA9I CyKA
(2002-10-01 11:30)
[5]
Найди все. Выбери по названию.
Ку?
← →
Fishka
(2002-10-01 12:20)
[6]
А поподробнее можно? Пожалуйста.
← →
3JIA9I CyKA
(2002-10-01 12:43)
[7]
У коллекций Workbooks и Worksheets есть Count.
У Workbook и Worksheet есть Name.
Этого мало?
← →
Fishka
(2002-10-01 16:20)
[8]
>3JIA9I CyKA © (01.10.02 12:43)
Спасибо.
Но чего-то я не догоняю.
Пишу так:
MsExcel := GetActiveOleObject("Excel.Application");
count_books:=MSExcel.Workbooks.Count;
MSExcel.Workbooks[count_books].Sheets.Add;
count_sheets:=MSExcel.WorkSheets.Count;
MSExcel.Workbooks[count_books].WorkSheets[count_sheets].Select;
И далее заполняю ячейки. Новый лист в книгу добавляется, но почему-то
всегда заполняются ячейки 3-го листа, хотя последний добавленный лист в книге называется «лист6».
В чем мои ошибки?
← →
max2057
(2002-10-01 16:28)
[9]
function PrepareExcel(ListName :string): boolean;
begin
result := true ;
try
try
Excel:= GetActiveOleObject(«Excel.Application»);
except
try
Excel := CreateOleObject(«Excel.Application»);
except
ShowMessage(«
← →
3JIA9I CyKA
(2002-10-01 16:34)
[10]
2Fishka
Называться он может хоть «ЖоПа».
← →
Fishka
(2002-10-01 16:40)
[11]
>3JIA9I CyKA © (01.10.02 16:34)
Я вообще-то не про название говорю, а о том, почему всегда заполняются ячейки одного и того же листа, а не последнего добавленного.
← →
3JIA9I CyKA
(2002-10-01 16:51)
[12]
Ку
var ws : variant;
…
ws := MSExcel.Workbooks[count_books].Sheets.Add;
ws.Cells[1,1].Value := «жОпА»;
Для работы с 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;@’// формат время |