Скопировать лист в excel в delphi
Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.
Закрытие документа может быть осуществлено с помощью метода Cl ose одним из следующих способов:
Просто сохранить рабочую книгу, не закрывая ее, можно с помощью метода Save:
Используется также метод SaveAs:
Метод SaveAs имеет более десятка параметров, влияющих на то, как именно сохраняется документ (под каким именем, с паролем или без него, какова кодовая страница для содержащегося в ней текста и др.).
Закрыть само приложение Excel можно с помощью метода Quit объекта Excel. Application. В случае Excel этот метод параметров не имеет.
Вывод документа Excel на устройство печати можно осуществить с помощью метода Printout объекта WorkBook, например:
Арр.Acti veWorkBook.Pri ntOut:
Если нужно изменить параметры печати, следует указать значения соответствующих параметров метода Pri ntOut (в случае Excel их восемь).
Вы здесь
В прошлой статье (Читаем файл Excel (xls) в Delphi) был рассмотрен способ чтения данных из xls файла и его импорт в Delphi. Теперь перейдем к сохранению, т.е. к экспорту данных из Delphi. Экспорт, как и импорт, будет осуществляться через посредника, т.е. Excel. Поэтому для работы приложения потребуется установленная копия MS Excel 2003-2010 (выше не тестировал).
Добавьте на форму кнопку, диалог сохранения, и таблицу StringGrid. Для того чтоб появилась возможность редактирования таблицы StringGrid необходимо в ее свойствах включить опцию goEditing:
Визуальные приготовления для нашего примера готовы. Переходим к написанию кода.
Как и в случае чтения xls нам понадобится библиотека ComObj. Добавьте ее в uses. Ниже приведен листинг процедуры экспорта, добавьте его после ключевого слова implementation.
procedure Xls_Save(XLSFile:string; Grid:TStringGrid);
const
xlExcel9795 = $0000002B;
xlExcel8 = 56;
var
ExlApp, Sheet: OLEVariant;
i, j, r, c:integer;
//делаем окно Excel невидимым
ExlApp.Visible := false;
//создаем книгу для экспорта
ExlApp.Workbooks.Add;
//создаем объект Sheet(страница) и указываем номер листа (1)
//в книге, в который будем осуществлять экспорт
Sheet := ExlApp.Workbooks[1].WorkSheets[1];
//считываем кол-во столбцов и строк в StringGrid
r:=Grid.RowCount;
c:=Grid.ColCount;
//считываем значение из каждой ячейки и отправляем в таблицу Excel
for j:= 1 to r do
for i:= 1 to c do
sheet.cells[j,i]:=Grid.Cells[i-1,j-1];
//отключаем все предупреждения Excel
ExlApp.DisplayAlerts := False;
//закрываем приложение Excel
ExlApp.Quit;
//очищаем выделенную память
ExlApp := Unassigned;
Sheet := Unassigned;
В прошлые раз мы с Вами остановились на сохранении рабочей книги. В принципе, ничего сложного в запуске 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 | язык словаря. Может принимать значения одной из констант MsoLanguage > |
Как проверить грамматику на листе Excel в Delphi?
в этом случае MS Excel проверит текущий лист, включая проверку слов из прописных букв. Язык проверки — русский. Обратите внимание, что для того, чтобы вызвать метод мы явно указывали, какому параметру какое значение присвоить. Причём для того, чтобы пропустить какой-либо параметр, мы использовали EmptyParam (пустой параметр), который в Delphi представляет собой переменную типа OleVariant.
Понятно, что подобный способ вызова методов (с явным указанием всех параметров) для Вас не совсем удобен и широко не практикуется в программировании на Delphi, но тем не менее только так и никак иначе можно вызывать методы, используемые в Excel.
Метод SaveAs
Сохранение рабочего листа книги 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 в различных форматах:
Все уже перерыл, ни одно решение не работает.
Пробовал это решение:
procedure TForm1.Button1Click(Sender: TObject);
var
Excel: Variant;
begin
Excel:=CreateOleObject('Excel.Application');
Excel.Workbooks.Open('C:\book.xls');
Excel.Visible:=True;
Excel.Sheets.Select;
Excel.Sheets.Copy(Null, Excel.Sheets);
end;
Ругается на Copy, говорит - ошибка на сервере.
тоже самое -- ошибка. Лист1 -- член группы не найден, если через индекс -- неверный индекс скажет.
Помогите, плиз, уже не знаю куда копать. Нужно N-ное количество раз скопировать один и тот же лист.
/PS: И зачем НГС самодеятельностью занимается. Синтаксис проги показывает как смайлы!
Самый действенный метод узнать, как надо написать - записать макрос на нужные действия, а потом посмотреть как это выглядит в редакторе VBA.Nissan Presage, U-30, KA24DE, 00г.
Nissan Lafesta, 10г.
Привожу, пару цитатт из справки Архангельского как работать с листами. Функцию копирования поищите как посоветовал Valico или же в хелпе к Вижуалбейсику в Excel-e
___________________________________
Класс сервера Excel
Модули Excel97, Excel2000, ExcelXP
Сервер COM класса TExcelApplication используется для управления из вашего приложения программой Excel. Сервер может использоваться в виде компонента, расположенного на странице Servers, или экземпляр сервера может создаваться программно во время выполнения. См. темы Работа с компонентами страницы библиотеки Servers, Работа с Microsoft Office как с серверами COM, в которых поясняется различие этих подходов, а также тему Адаптация к версии Microsoft Office, в которой рассмотрены вопросы адаптации приложения к версии Excel. Для работы со свойствами и методами серверов COM ознакомьтесь также с темой Обращение к свойствам и методам серверов COM.
Некоторые свойства и метода сервера вы можете найти по указанным выше ссылкам: Некоторые свойства и Некоторые методы. Методика получения информации по другим свойствам и методам изложена в теме Где найти свойства и методы серверов COM.
Среди множества свойств сервера следует отметить свойство ActiveWorkbook - активная рабочая книга Excel. Это объект ExcelWorkbook, реализующий интерфейс _Workbook и имеющий в свою очередь собственные свойства и методы.
Если в Excel открыто несколько книг, получить к ним доступ можно с помощью свойства Workbooks - собрания всех открытых в данный момент книг. Каждая книга представлена в этом собрании как объект ExcelWorkbook. К отдельной книге в массиве Workbooks можно обращаться по индексу. Например, ExcelApplication1.Workbooks – это книга, которая была открыта первой.
Создание новой книги ExcelWorkbook и включение ее в собрание Workbooks осуществляется методом Add объекта Workbooks.
Объект ExcelWorkbook в свою очередь имеет собрание листов Worksheets. К отдельному листу – объекту ExcelWorkSheet можно получить доступ по индексу, как и в собрании Workbooks. В объекте ExcelWorkbook имеется свойство ActiveSheet – активный лист книги.
Создание нового листа ExcelWorkSheet и включение его в собрание Worksheets осуществляется методом Add объекта Worksheets.
Можно не создавать в приложении отдельных объектов для книги и листа, а работать с книгами и листами непосредственно через объект сервера. Но обычно все-таки удобнее создать такие объекты. В этом случае код получается более компактным и наглядным.
Создание объектов может выполняться тремя способами: с помощью компонентов страницы Servers, с помощью программного создания соответствующих объектов, и с помощью создания объектов интерфейсов.
При использовании компонентов вы должны поместить на форме компоненты TExcelWorkbook – рабочая книга, и – TExcelWorksheet – лист. Программное создание таких объектов, а заодно и программное создание объекта сервера, может выглядеть так:
Остальное не зависит от того, используются компоненты или программно созданные объекты. Подключение объектов книги и листа к активной книге и листу сервера выполняется методом ConnectTo
, аргументом которого указывается объект сервера. Например:
Во втором операторе используется операция as, чтобы привести интерфейс к требуемому типу.
Следующий оператор создает новую книгу и подключает к ней объект ExcelWorkbook1:
[/code]
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(
EmptyParam, LOCALE_USER_DEFAULT));
Тут использован метод Add объекта ExcelApplication1.Workbooks.
Несколько иначе выглядит работа с объектами интерфейсов:
Тут не требуется метод ConnectTo. Соответствующим переменным просто присваиваются значения интерфейсов объектов сервера.
Сервер Excel имеет также свойство Windows – коллекцию открытых окон. Метод Windows.Arrange позволяет упорядочить окна. Элементы Window коллекции Windows обеспечивают доступ к свойствам, описывающим отображение документа: свернутое, развернутое, разделенное, заголовок окна, полосы прокрутки.
Сервер Excel имеет свойство Dialogs, являющееся собранием объектов Dialog, которые соответствуют встроенным диалогам Word. Доступ к конкретному диалогу осуществляется через выражение вида
где константа WdWordDialog может принимать одно из предопределенных значений.
[/code]
Свойство Worksheets имеется также в объекте сервера. Это свойство относится к активной книге. Так что следующий оператор производит операции с активной книгой, открывая в ней лист, имя которого (например, "Лист1") задано в окне редактирования Edit1:
Если лист с заданным именем отсутствует в книге, будет генерироваться исключение. Так что если имеется подобная опасность, это исключение надо перехватить, например, следующим образом:
[/code]
try
ExcelWorksheet1 := ExcelApplication1.
Worksheets[Edit1.Text] as ExcelWorksheet;
ExcelWorksheet1.Activate(LOCALE_USER_DEFAULT);
except
ShowMessage('Не удалось открыть лист "' + Edit1.Text + '"');
end;
[/code]
Добавить новый лист в книгу можно методом Add объекта Worksheets:
Параметры Before или After – это объект листа, перед которым или после которого осуществляется вставка. Обычно достаточно задать только один из этих параметров, а другой сделать равным EmptyParam. Если оба параметра равны EmptyParam, то новые листы вставляются перед текущим активным листом. Параметр Count указывает число вставляемых листов. Если этот параметр равен EmptyParam, то вставляется один лист. Параметр Type_ определяет тип вставки. При значении EmptyParam вставляется новый пустой лист.
Например, следующий код вставляет один новый лист перед активным листом активной книги и передает указатель на него в переменную ExcelWorksheet1:
А следующий код вставляет два новых листа после третьего листа активной книги:
Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.
Мы рассмотрели в разд. 6.4.2 основные операции, связанные с книгами. Теперь перейдем к операциям с листами книги. Коллекция листов содержится в свойстве Worksheets объекта книги. Эта коллекция по своим свойствам подобна рассмотренной ранее коллекции Workbooks. К листу можно обращаться по индексу или по имени. Например, следующие операторы при работе с серверами СОМ открывают и активизируют первый лист книги, представленной объектом Excel Workbook 1, передают указатель на этот лист в переменную Excel Worksheet 1 и активизируют лист, т.е. выдвигают его на первый план в окне Excel:
При работе с серверами автоматизации OLE аналогичные операторы выглядят так:
Свойство Worksheets имеется также в объекте сервера. Это свойство относится к активной книге. Так что следующие операторы при работе с серверами СОМ производят операции с активной книгой, открывая и активизируя в ней лист, имя которого (например, "Лист1") задано в окне редактирования Editl:
При работе с серверами автоматизации OLE аналогичные операторы выглядят так:
Если лист с заданным именем отсутствует в книге, будет генерироваться исключение. Так что если имеется подобная опасность, это исключение надо перехватить, например, следующим образом:
Worksheets[Editl.Text] as ExcelWorksheet; ExcelWorksheetl.Activate(LOCALE_USER_DEFAULT); except
Добавить новый лист в книгу можно методом Add объекта Worksheets:
Параметры Before или After - это объект листа, перед которым или после которого осуществляется вставка. Обычно достаточно задать только один из этих параметров, а другой сделать равным EmptyParam. Если оба параметра равны EmptyParam, то новые листы вставляются перед текущим активным листом. Параметр Count указывает число вставляемых листов. Если этот параметр равен EmptyParam, то вставляется один лист. Параметр Туре__ определяет тип вставки. При значении EmptyParam вставляется новый пустой лист.
Например, следующий код при работе с серверами СОМ вставляет один новый лист перед активным листом активной книги и передает указатель на него в переменную ExcelWorksheetl:
А следующий код вставляет два новых листа после третьего листа активной книги:
При работе с серверами автоматизации OLE аналогичные операторы выглядят так:
Имя вставленного или любого имеющегося листа можно изменить с помощью свойства Name. Например:
ExcelWorksheetl.Name := 'Счет-фактура'; Удалить лист из книги можно методом Delete:
Напечатать лист можно методом Printout, не отличающимся от аналогичного метода, описанного ранее для книги. Например, печать текущей страницы при работе с серверами СОМ может быть оформлена так:
При работе с серверами автоматизации OLE получается попроще:
Предварительный просмотр листа перед печатью можно осуществить методом PrintPreview:
Параметр EnableChanges указывает возможность внесения изменений при просмотре. Например, следующий оператор обеспечивает при работе с серверами СОМ предварительный просмотр активного листа книги:
Для работы с 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 в Яндекс Дзен
Читайте также: