Скопировать лист в excel в delphi
Все уже перерыл, ни одно решение не работает.
Пробовал это решение:
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:
А следующий код вставляет два новых листа после третьего листа активной книги:
На этой странице представлена подборка статей, посвященные работе с Excel в Delphi. Все статьи расположены по порядку изложения материала в блоге, то есть от самых основ работы с Excel в Delphi до выполнения сложных операций, вставки диаграмм в книгу и так далее.
Работа с Excel в Delphi. Основы основ
Это вводная статья по работе с excel в delphi, которая поможет вам разобраться с основами по взаимодействия вашего приложения Delphi и Microsoft Excel. В статье рассмотрены следующие вопросы:
Excel в Delphi. Методы объекта WorkSheet (лист)
В статье рассмотрены вопросы о том, как можно работать с листами рабочей книги, изменять внешний вид ячеек, копировать таблицу из своего приложения Delphi в открытую рабочую книгу:
Диаграммы Excel в Delphi. Общие сведения
В статье рассмотрен способ добавления диаграммы в лист Excel через объект ChartObjects. План статьи следующий:
Excel в Delphi. Работа с объектом Range (диапазон)
Статья дает более полное представление о том, как можно работать с данными листа Excel в Delphi, используя объект Range (диапазон). Рассмотрены свойства и методы объекта range. План статьи:
Excel в Delphi. Как изменить внешний вид ячеек?
В статье рассматриваются вопросы оформления ячеек таблицы Excel в Delphi:
Полная автоматизация. Редактируем объекты Excel, содержащиеся в документах Word и наоборот
В статье рассматривается достаточно нетривиальный вопрос: как добраться до диаграммы Excel, внедренной в документ Word и работать с ней в Delphi? Статья состоит из трех частей:
Быстрая обработка данных Excel в Delphi
Эта статья раскрывает вопросы, касающиеся быстрой обработки данных при работе с Excel в Delphi. Одной из проблем, с которой сталкиваются начинающие разработчики, является то, что рассмотренные в предыдущих статьях методы чтения/записи данных в Excel работают очень медленно при большом количестве данных. Статья позволяет понять то, как сократить время операций при работе с Excel в Delphi в несколько раз, используя вариантные массивы и библиотеку XLSReadWrite.
Пост-ответ. Работа с примечаниями в Excel
В статье рассматривается то, как, используя Delphi вставлять и редактировать примечания в ячейках Excel. План статьи:
Excel в Delphi. Работа со свойствами документа
Статья раскрывает вопросы изменения свойств документа Excel в Delphi и состоит из трех частей:
Создаем свои контролы на ленте Microsoft Office
Небольшая заметка о том, как получить доступ у ленте Excel и добавить на неё свою кнопку.
Эти и другие статьи, посвященные работе с Excel в Delphi вы всегда сможете найти в блоге по тегу Excel в Delphi
Книжная полка
Описание Описаны общие подходы к программированию приложений MS Office. Даны программные методы реализации функций MS Excel, MS Word, MS Access и MS Outlook в среде Delphi.
В прошлые раз мы с Вами остановились на сохранении рабочей книги. В принципе, ничего сложного в запуске 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.
Вызов метода:
Как сохранить активный лист рабочей книги 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 в различных форматах:
Продолжаем копаться в листах Excel и изучать особенности работы с ними. Сегодня мы рассмотри свойства объекта WorkSheet.
Основными свойствами, которые Вы с большой вероятностью будете использовать в своей работе с Excel в Delphi являются:
- Cells — ячейки
- Columns — столбцы
- Name — название листа
- Range — диапазон ячеек
- Rows — сроки
- StandartHeight — высота строк «по умолчанию»
- StandartWidth — ширина столбцов «по умолчанию»
- UsedRange — задействованный диапазон ячеек
- Comments — комментарии
Всего у листа рабочей книги Excel насчитывается 54 различных свойств, но, как показвает практика, для использования Excel в Dephi достаточно 9-15 различных свойств листа, чтобы получить необходимый результат, обеспечивающий удобство и наглядность представляемых данных.
Рассмотрим применение указанных выше свойств листа Worksheet при работе с Excel в Delphi.
1. Свойство Cells
Возвращает объект диапазона, который представляет собой все ячейки на листе (а не только клетки, которые используются в настоящее время)
Однако использование свойства Cells возможно (и более практично) в другом виде. Вы можете указать сразу за словом Cells номера столбца и строки и, таким образом, получить доступ к конкретной ячейке листа. Например, забегая немного вперед, посмотрим, как можно удалить формулы из ячейки:
Выполнив такую операцию Вы удалите из ячейки С5 формулу (или любое другое содержимое). Как можно заметить, в отличие от работы с таблицами StringGrid Delphi, здесь вначале указывается номер строки, а затем номер столбца (у String Grid напротив — сначала указывается номер столбца, а затем номер строки).
Аналогичным образом Вы можете записать в ячейку данные:
Ну, а чтобы показать использование этого свойства на примере, давайте напишем простенькую процедуру копирования таблицы StringGrid в любую область листа Worksheet Excel.
Здесь в качестве параметров процедуры необходимо задать: номера первого столбца (FirstCol) и первой строки (FirstRow) на листе Excel, начиная с которых необходимо копировать данные из таблицы StringGrid (Grid). Заметьте, что вызов свойств Cells у StringGrid и WorkSheet происходит по-разному (см. индексы ячейки).
Естественно, что представленная процедура может с легкостью применяться при копировании небольших таблиц. Однако при импорте больших объемов данных в Excel эта процедура будет очень сильно тормозить работы основной программы. Более скоростной способ импорта данных из Excel в Delphi и наоборот мы рассмотрим позже, при рассмотрении объекта Range.
2. Свойство Columns
Возвращает объект диапазона, который представляет собой все столбцы на активном листе. Если активный документ не является листом (а, например, диаграммой), то вызов свойства Columns приводит к исключительной ситуации.
Это свойство удобно использовать при редактировании столбцов данных. Например вот так:
Вы сможете изменить шрифт в столбце А на полужирный. Также Вы можете изменять внешний вид столбцов, перерисовывать границы ячеек и т.д.
3. Свойство Name
С этим свойством мы уже сталкивались. Свойство Name возвращает имя рабочего листа книги.
Так мы изменили имя текущего активного листа Excel. Кроме этого, свойство Name удобо использовать при поиске необходимого листа.
4. Свойство Range
Возвращает объект, представляющий собой одну ячейку или диапазон ячеек.
Так, мы получили доступ к ячейке А1 и записали в неё текст. А следующий фрагмент кода демонстрирует быстрый способ экспорта данных из листа Excel в Delphi:
Так, мы за одно обращение к листу считали столбец данных и в дальнейшем, не используя напрямую объект WorkSheet, обработали все данные в вариантном массиве Numbers. Этот способ чтения данных с листа Excel является наиболее скоростным из всех известных мне в настоящее время. Если знаете способ более скоростной — буду очень рад, если поделитесь им.
5. Свойство Rows
Это свойство аналогично свойству Columns, но в отличие от него, возвращает объект, представляющий собой строку листа. С помощью этого свойства Вы также можете изменять внешний вид ячеек листа, изменять шрифт и т.д.
6. Свойства StandartHeight и StandartWidth
Эти свойства позволяют получить значения высоты и ширины ячеек листа «по умолчанию». Свойство доступно только для чтения, т.е. вызов:
Приведет к исключительной ситуации. Вы можете использовать это свойство, например, когда необходимо гарантировано установить значения высоты и ширины строк в значения «по умолчанию»
7. Свойство UsedRange
Возвращает диапазон занятых ячеек листа. Свойство очень удобно использовать, когда необходимо узнать количество занятых строк и столбцов на листе:
и далее, используя эти данные быстро прочитать весь занятый диапазон в вариантный массив для дальнейшей обработки.
8. Свойство Comments
Это свойство возвращает коллекцию комментариев на листе.
удалит второй комментарий из коллекции, а:
добавит в ячейку е5 новый комментарий.
Итак, резюмируем. Сегодня мы узнали: как записать данные в ячейку листа Excel, как прочитать данные из диапазона ячеек, как скопировать таблицу из Delphi в Excel, как быстро экспортировать данные из Excel в Delphi.
В следующий раз займемся работой с ячейками листа, а именно научимся копировать таблицы из Delphi в Excel один-к-одному с сохранением всех цветов, границ ячеек и т.д., а также, попробуем строить диаграммы, которые опять же очень часто требуются при разработке бизнес-приложений.
Перенос значения одного столбца Excel в другой
Привет всем, мне нужно перенести значение одного столбца в другой. как я сделал: var Rows.
Перенос данных с одного листа на другой в Excel
Доброго времени суток! Голову сломал, не найти полезной инфы. Есть лист "1" - дано (вписываем от.
Перенос данных в Excel c одного листа на другой
Возникла необходимость поковыряться в Excel, раньше на VBA не программировал, поэтому рассчитываю.
Filoreal, а где Вы такую чушь увидели, что имя файла, которое отдает TOpenDialog имеет тип Variant? И к чему там проверка на заполненность какого-то Label-а? Если метод Execute возвращает истину - файл выбран, это без вариантов.
Filoreal, а где Вы такую чушь увидели, что имя файла, которое отдает TOpenDialog имеет тип Variant? И к чему там проверка на заполненность какого-то Label-а? Если метод Execute возвращает истину - файл выбран, это без вариантов.
Filoreal, я попробовал смоделировать ситуацию на основе представленного Вами кода.
Что сразу бросилось в глаза: почему Вы создаете OLE-объект как
После этого изменения у меня ошибка исчезла и все данные считывались, как положено.
Добавлено через 1 минуту
И кстати, на кой ляд Вам там двумерный массив из 4-х элементов, если используется только 2? А даже если и больше: двумерный-то зачем?
что это за х..ня?! Тебе что мешает написать lbl4.Caption:= dlgOpen2.FileName ??
тем более, что File_2 нигде больше не используется в процедуре btn1Click
А ничего, что переменные File_1, File_2 обьявлены два раза. Один раз, как глобальные string, второй раз в процедурах, как Variant.
А я ещё раз хочу спросить ТС про 118 строку. В ней упоминается некая переменная Sheet, которой нигде не присваевается какое либо значение.
Решение
А я ещё раз хочу спросить ТС про 118 строку. В ней упоминается некая переменная Sheet, которой нигде не присваевается какое либо значение.
northener, точняк! Filoreal использует переменную Sheet, которую он явно скопировал из какого-то примера, но вот код, где этой переменной присваивается ЛИСТ книги, он скопировать забыл.
естественно, что система при попытке обратиться к методу несуществующего (мусорного) указателя выдаёт ошибку.
Filoreal, ты зачем удалил эти строчки??
mr-Crocodile, Спасибо, все получилось, но теперь вопрос. Есть такой формат Excel как веб-страница, при этом выводится следующая ошибка. Есть ли вариант заставить программу работать с таким форматом Excel?
нет. эта же ошибка выводится, если просто в Excel попытаться открыть выложенный тобой файл.
очевидно, что там ещё нужны файлы:
да и не настоящий это файл, поэтому и получить оттуда данные через объектную модель Excel (Workbook, WorkSheet, Cells) не выйдет.
Перенос данных с одного листа на другой в Excel
На первом листе есть данные. При активации следующих листов проверить наличие данных в этих листах.
Перенос данных из одного файла Excel в другой
Добрый вечер! Я новичок в программирование. надеюсь поможете. такая задачка. имеется файл эксель в.
Перенос картинок в Excel с одного листа на другой
Добрый день! Я умею худо бедно программировать на VBA, а хочу сделать программу для Android, делаю.
Перенос диаграммы с одного листа Excel на другой
Здравствуйте форумчане, имеется файл ексель где есть 2 листа на одном координаты, на 2 построен.
Перенос информации из одного Excel файла в другой
Приветствую. Подскажите пожалуйста какой функцией в VB можно перенести данные из одного excel.
Читайте также: