Delphi excel вставить разрыв страницы

Обновлено: 06.07.2024

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

Как запустить Excel и открыть новый документ в Delphi

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

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

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

//Результатом является присвоение ячейке [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

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

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

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

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

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

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

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

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

Поиск по сайту

Okolokompa в Яндекс Дзен

Александр Шабля
дата публикации 26-05-2006 03:55

  • Как добавить новую книгу?
  • Как задать количество листов в новой книге?
  • Как открыть книгу, имеющуюся на диске?
  • Как сохранить книгу?
  • Как закрыть книгу без вопросов о сохранении? Как закрыть все книги?
  • Как узнать имена всех открытых книг?
  • Как найти определенную открытую книгу?
  • Как переименовать книгу?
  • Как спрятать книгу?
  • Как открыть текстовый файл в Excel'е?
  • Как узнать имена всех листов в книге и их количество?
  • Как получить ссылку на активный лист в активной книге?
  • Как добавить новый лист в книгу? Как удалить лист?
  • Нужно ли делать лист активным, чтоб записать в него данные?
  • Как задать имя листу в книге?
  • Как выделить один или несколько листов в книге?
  • Как скопировать/переместить лист в одной книге? В другую книгу?
  • Как задать/убрать область печати? Как вызвать PrintPreview? Как напечатать лист?
  • Как установить параметры печати: отступы на листе, ориентацию листа и др.?
  • Как установить свои разрывы страниц (HPageBreaks) в области печати? Как узнать номер строки HpagePreak?
  • Как сделать так, чтобы на каждой странице повторялись заголовки колонок таблицы?
  • Как спрятать рабочий лист?
  • Как установить пароль на существующий лист/книгу?
  • Как создать макрос из Delphi? Как выполнить макрос, имеющийся в книге?
  • Будет ли работать макрос при выставленной "Очень высокая безопасность макросов" в Excel'е пользователя?
  • Почему не работает макрос, записанный в книге?

Как добавить новую книгу?

Добавить новую пустую книгу:

В первом параметре метода Add можно указать стандартный тип шаблона Excel. Если же в нем указать имя (с полным путем) подготовленного файла (шаблоном может быть и "обычный" файл XLS, а не только файл XLT), то можно открыть книгу на диске как шаблон.

Откроет файл "MyTemplate1.xls", т.е. точно как обычный шаблон "Книга1.xls", но свой со своим форматированием, что позволит ускорить процесс экспорта данных в Excel, т.к. не придется форматировать ячейки и вызывать другие настройки листа.

Как задать количество листов в новой книге?

Задать количество листов в новой книге можно перед добавлением новой книги:

Как открыть книгу, имеющуюся на диске?

Если книга находится не в папке указанной в Excel.Application.DefaultFilePath, то нужно указывать полный путь к открываемому файлу .xls, даже если файл находится в текущей папке вашего приложения т.к. Excel ничего про него не знает.

Как сохранить книгу?

Как закрыть книгу без вопросов о сохранении? Как закрыть все книги?

Как узнать имена всех открытых книг?

Узнать имена всех книг экземпляра Excel.Application можно в цикле, например, так:

Как найти определенную открытую книгу?

Точно так же как в предыдущем ответе — по имени в свойстве Name. Если вы хотите сделать найденную книгу активной, то вызовите метод Activate

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

Переименовать книгу ни как нельзя — только сохранить под другим именем методом SaveAs (смотрите "Как сохранить книгу").

Как спрятать книгу?

Как открыть текстовый файл в Excel'е?

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

Как узнать имена всех листов в книге и их количество?

Узнать количество листов в книге можно в цикле по коллекции Workbook.Sheets. Количество листов — свойство Sheets.Count. Имя листа — свойство Worksheet.Name.

Как получить ссылку на активный лист в активной книге?

Обращаеясь к Excel.Application.ActiveSheet или WorkBook.ActiveSheet, вы получите ссылку на интерфейс IDispatch. Это происходит из-за того, что коллекция Excel.Application.Sheets может содержать объекты WorkSheet, Chart, Excel4MacroSheet (для поддержки Excel 4).

Определить тип листа можно, проверив свойство Worksheet.Type:

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

При добавлении можно указать тип нового листа (WorkSheet, Chart, Excel4MacroSheet) и текущее положение. Добавленный лист будет активизирован автоматически (на него будет указывать свойство ActiveSheet)

Нужно ли делать лист активным, чтоб записать в него данные?

Не нужно — переключение (активация) листов только замедлит экспорт данных. Получите ссылку на любой лист в книге (активной или нет) и работайте c ней, как с активной. Активизировать лист нужно только в случае необходимости, например, при вставке из буфера обмена, предварительном просмотре и др.

Как задать имя листу в книге?

Как выделить один или несколько листов в книге?

Как скопировать/переместить лист в одной книге? В другую книгу?

Как задать/убрать область печати? Как вызвать PrintPreview? Как напечатать лист?

Как установить параметры печати: отступы на листе, ориентацию листа и др.?

Установка параметров печати — довольно продолжительный процесс, поэтому советую настроить их в предварительно подготовленном шаблоне. Все параметры печати задаются в свойстве PageSetup объекта Worksheet. Но учтите, что текст в свойствах Footer или Header для Left, Right, Center суммарно не должен превышать 255 символов.

Для задания отступов в сантиметрах используйте функцию Excel.Application.CentimetersToPoints

Если вы выполните данный код, то заметьте как долго Excel настраивает все границы печати.

Как установить свои разрывы страниц (HPageBreaks) в области печати? Как узнать номер строки HpagePreak?

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

Также вы можете "переместить" разрыв, присвоив новое значение свойству Location объекта HPageBreak

Как сделать так, чтобы на каждой странице повторялись заголовки колонок таблицы?

Нужно задать "сквозные" строки заголовка таблицы.

Как спрятать рабочий лист?

Как установить пароль на существующий лист/книгу?

Как создать макрос из Delphi? Как выполнить макрос, имеющийся в книге?

Вам не удастся создать макрос программно, т.к. по умолчанию в Excel VBA Project отключен доступ к VBA из программ. Как включить эту возможность читайте "PRB: Programmatic Access to Office XP VBA Project Is Denied"

Пример создания макроса с параметром и вызов его из программы:

Если все же вам очень нужно добавить макрос, не зависимо от настроек доступа к VBA Project, можно воспользоваться листом макросов xlExcel4MacroSheet. Макроязык представляет собой "команды".

Будет ли работать макрос при выставленной "Очень высокая безопасность макросов" в Excel'е пользователя?

Записанные макросы в книге, открытой вашей программой всегда будут работать, не зависимо от выставленного в Excel'е "Уровня безопасности" для макросов.

Почему не работает макрос, записанный в книге?

Записанный в книге макрос может не работать по причине установленного антивируса. Например, установленный "Kaspersky Office Guard", входящий в состав "Антивирус Касперского", начисто отключает все вызовы VBA.

Как добавить новую книгу?

Добавить новую пустую книгу:

Delphi:

В первом параметре метода Add можно указать стандартный тип шаблона Excel. Если же в нем указать имя (с полным путем) подготовленного файла (шаблоном может быть и "обычный" файл XLS, а не только файл XLT), то можно открыть книгу на диске как шаблон.

Delphi:

Откроет файл "MyTemplate1.xls", т.е. точно как обычный шаблон "Книга1.xls", но свой со своим форматированием, что позволит ускорить процесс экспорта данных в Excel, т.к. не придется форматировать ячейки и вызывать другие настройки листа.

Как задать количество листов в новой книге?

Задать количество листов в новой книге можно перед добавлением новой книги:

Delphi:

Как открыть книгу, имеющуюся на диске?

Если книга находится не в папке, указанной в Excel.Application.DefaultFilePath, то нужно указывать полный путь к открываемому файлу .xls, даже если файл находится в текущей папке вашего приложения, т.к. Excel ничего про него не знает.

Delphi:

Как сохранить книгу?

Как закрыть книгу без вопросов о сохранении? Как закрыть все книги?

Delphi:

Как узнать имена всех открытых книг?

Узнать имена всех книг экземпляра Excel.Application можно в цикле, например, так:

Delphi:

Как найти определенную открытую книгу?

Точно так же, как в предыдущем ответе — по имени в свойстве Name. Если вы хотите сделать найденную книгу активной, то вызовите метод Activate

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

Переименовать книгу никак нельзя — только сохранить под другим именем методом SaveAs (смотрите "Как сохранить книгу").

Как спрятать книгу?

Delphi:

Как открыть текстовый файл в Excel'е?

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

Как узнать имена всех листов в книге и их количество?

Узнать количество листов в книге можно в цикле по коллекции Workbook.Sheets. Количество листов — свойство Sheets.Count. Имя листа — свойство Worksheet.Name.

Как получить ссылку на активный лист в активной книге?

Обращаеясь к Excel.Application.ActiveSheet или WorkBook.ActiveSheet, вы получите ссылку на интерфейс IDispatch. Это происходит из-за того, что коллекция Excel.Application.Sheets может содержать объекты WorkSheet, Chart, Excel4MacroSheet (для поддержки Excel 4).

Delphi:

Определить тип листа можно, проверив свойство Worksheet.Type:

Delphi:

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

При добавлении можно указать тип нового листа (WorkSheet, Chart, Excel4MacroSheet) и текущее положение. Добавленный лист будет активизирован автоматически (на него будет указывать свойство ActiveSheet)

Нужно ли делать лист активным, чтобы записать в него данные?

Не нужно — переключение (активация) листов только замедлит экспорт данных. Получите ссылку на любой лист в книге (активной или нет) и работайте c ней, как с активной. Активизировать лист нужно только в случае необходимости, например, при вставке из буфера обмена, предварительном просмотре и др.

Как задать имя листу в книге?

Как выделить один или несколько листов в книге?

Delphi:

Как скопировать/переместить лист в одной книге? В другую книгу?

Delphi:

Как задать/убрать область печати? Как вызвать PrintPreview? Как напечатать лист?

Delphi:

Как установить параметры печати: отступы на листе, ориентацию листа и др.?

Установка параметров печати — довольно продолжительный процесс, поэтому советую настроить их в предварительно подготовленном шаблоне. Все параметры печати задаются в свойстве PageSetup объекта Worksheet. Но учтите, что текст в свойствах Footer или Header для Left, Right, Center суммарно не должен превышать 255 символов.

Для задания отступов в сантиметрах используйте функцию Excel.Application.CentimetersToPoints

Delphi:

Если вы выполните данный код, то заметите, как долго Excel настраивает все границы печати.

Как установить свои разрывы страниц (HPageBreaks) в области печати? Как узнать номер строки HpagePreak?

Для того, чтобы "появились" автоматические разрывы страниц, нужно перейти в режим разметки.

Delphi:

Также вы можете "переместить" разрыв, присвоив новое значение свойству Location объекта HPageBreak

Delphi:

Как сделать так, чтобы на каждой странице повторялись заголовки колонок таблицы?

Нужно задать "сквозные" строки заголовка таблицы.

Delphi:

Как спрятать рабочий лист?

Delphi:

Как установить пароль на существующий лист/книгу?

Как создать макрос из Delphi? Как выполнить макрос, имеющийся в книге?

Вам не удастся создать макрос программно, т.к. по умолчанию в Excel VBA Project отключен доступ к VBA из программ. Как включить эту возможность, читайте "PRB: Programmatic Access to Office XP VBA Project Is Denied"

Пример создания макроса с параметром и вызов его из программы:

Delphi:

Если все же вам очень нужно добавить макрос, независимо от настроек доступа к VBA Project, то можно воспользоваться листом макросов xlExcel4MacroSheet. Макроязык представляет собой "команды".

Delphi:

Будет ли работать макрос при выставленной "Очень высокая безопасность макросов" в Excel'е пользователя?

Записанные макросы в книге, открытой вашей программой всегда будут работать, независимо от выставленного в Excel'е "Уровня безопасности" для макросов.

Почему не работает макрос, записанный в книге?

Записанный в книге макрос может не работать по причине установленного антивируса. Например, установленный "Kaspersky Office Guard", входящий в состав "Антивирус Касперского", начисто отключает все вызовы VBA.

RELEASE ole1, ole2

Открытие при создании нового документа

* способ, когда не исчезает после выхода:
ole1 = CreateObject("Excel.Application")
ole1.WorkBooks.add
ole2=ole1.Application
* способ, когда таб Excel исчезает после выхода:
ole1 = GetObject("","Excel.Sheet")
ole2 = ole1.Application

Открытие для существующего документа (Excel исчезает после выхода)
fil_excel = cfg_tgdef + "RECHNUNG_"+nominv_r+".xls"
filnam_r = "RECHNUNG_"+nominv_r+".xls"
ole1 = GetObject(fil_excel)
ole1.Application.Windows(filnam_r).Activate
ole2 = ole1.Application
ole2.Visible = .T.

Выход
ole1.Application.Quit

  • В начале работы, сразу после создания обьекта
    ole2.WindowState = xlMinimized && минимизировать окно
    ole2.ScreenUpdating = .F. && не отображать изменения на экране
  • В конце работы, перед показом отчета
    ole2.ScreenUpdating = .T.
    ole2.WindowState = xlMaximized

Запоминание результата в файл
ole2.ActiveWorkBook.Save && в тот же файл
ole2.ActiveWorkBook.SaveAs(fil_excel) && в новый файл

Разное
ole2.DisplayAlerts =.F. && Убрать запрос "Сохранить файл?" (перед выходом)
ole2.DisplayFormulaBar = .F. && Убрать панель формул
ole2.Version && Возвращает версию Excel

Удаление макроса
workbooks("book1").VBProject.VBComponents(5).CodeModule.DeleteLines 2,1
Удаляет строку номер 2 из модуля номер 5

  • 1-й способ:
    Ole1 = CREATEOBJECT('Excel.Application') && создание осн. обьекта
    Ole1f = CREATEOBJECT('Excel.Application') && cоздание фиктивного обьекта
    Тогда при открытии XLS-документа будет задействована вторая ссылка (т.е. ole2f), а сам работаешь с первой, ole1.Visible останется равной FALSE. В нужном месте (после того как полностью сформировал свой отчет) можно вставить release ole2, который на работе XLS-документов, если таковые открыты к тому времени, не отразится.
  • 2-й способ
    local ole1 as Excel.Application
    ole1 = CreateObject("Excel.Application")
    ole1.IgnoreRemoteRequests = .t.
    После этого у xlApp отключается механизм DDE, при помощи которого Винда и открывает в нем другую книгу. Теперь при открытии xls запустится новая копия экселя. После формирования отчета
    xlApp.IgnoreRemoteRequests = .f. && А можно этого и не делать

Работа с ячейками

Размеры
.RowHeight = 2 && высота строки (2 - узкая, прокладка, 15-20 - нормальная)
.ColumnWidth = 5 && ширина столбца (примерно в символах Courier, 9)

Ссылка на ячейку или диапазон
Ole2.Cells(2,4) && ячейка D2
Ole2.Range(ole2.Cells(2,4), ole2.Cells(3,6)) && D2:F3
То есть в Cells() указывается сначала строка (ряд), а затем столбец, причем для столбца вместо букв (указывает номер (A - 1, B - 2, …)

Выделение ячеек
Ole2.Cells(2,4).Select
Ole2.Range(ole2.Cells(2,4), ole2.Cells(3,6)).Select

Уменьшение писанины с одной ячейкой
WITH Ole2.Cells(2,4)
.Select
….
ENDWITH

Уменьшение писанины с диапазоном
Ole2.Range(ole2.Cells(2,4), ole2.Cells(3,6)).Select
WITH Selection
…..
ENDWITH

Разное при работе с ячейками или диапазоном
.MergeCells = .T. && обьединение ячееке
.Value = zag3_r && присвоение значения (можно без .Value: ole2.Cells(2,3)="aa")
.WrapText = .T. && текст переносится автоматом по словам внутри яч
.NumberFormat = "@" && не цифровой формат (число в виде текста)
.NumberFormat = "0.00" && числовой, всегда 2 дес знака после запятой
.interior.colorindex = число && цвет фона другой (38,42,…)

Вставка рисунка в ячейку
Range("B6").Select
ActiveSheet.Pictures.Insert("C:\VFP\EL\vaz_logo.jpg").Select

Как добавить разрыв страницы в Excel'е из VFP
Ole2.Range("A15").Select
Ole1.ActiveWindow.SelectedSheets.HPageBreaks.Add(ole2.ActiveCell)
где ole2 и ole1 - объекты страницы и Excel.
Можно в одну строчку и без перемещения курсора
Ole2.HPageBreaks.Add(ole2.Range("A15"))


Как узнать координаты ячейки
Selection.Address, Selection.Row, Selection.Column,
Selection.Rows.Count, Selection.Column1.Count

  • 1-й способ (не сработал):
    ole2.ActiveCell.Formula = '=SUM(D7:D20)'
  • 2-й способ:
    .FormulaR1C1 = "=<формула>"
    Пример
    ole2.Cells(5,6).Select
    r = "=RC[+3]"
    FOR i=2 TO tlmmk_r
    r = r + "+RC["+ALLT(STR(i*3,6))+"]"
    ENDFOR
    ole2.ActiveCell.FormulaR1C1 = r && записать формулу
    Пример
    FOR j= 1 to 5 && столбцы
    FOR i = 1 TO 3 && строки
    Ole2.cells[i,j].value = I * 10 + j
    ENDFOR
    WITH ole2.cells[4,j]
    .Select
    .FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)"
    ENDWITH
    ENDFOR

Процедура для облегчения работы с линиями
PROCEDURE cellborders && линии ячейки
PARAMETERS p1_cb, p2_cb, p3_cb, p4_cb
&& 1 - i нач, 2 - i кон, 3 - style, 4 - weight
FOR i_cb = p1_cb TO p2_cb
WITH .Borders(i_cb)
.LineStyle = p3_cb
IF p3_cb <> xlNone
.Weight = p4_cb
.ColorIndex = xlAutomatic
ENDIF
ENDWITH
ENDFOR
Вызов процедуры (пример):
DO cellborders WITH 7,12,xlnone,xlthin

Читайте также: