(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Экспорт данных из Delphi в Excel (исходники)

Источник: DeVoid
DeVoid

Рано или поздно практически каждый программист сталкивается с необходимостью организовать экспорт данных в MS Office. При этом каждое "поколение" программистов натыкается на одни и те же вилы.

Вот три часто встречающихся вопроса:

  • 1. Как определить установлен ли Excel
  • 2. Как определить запущен ли Excel
  • 3. Как вывести данные в Excel

Большую помощь в понимании этих и других вопросов приносит чтение исходных текстов функций модуля ComObj. :)

Во всех случаях следует подключить модули ComObj и ActiveX

1. Как определить установлен ли Excel

Функция возвращает True если найден OLE-объект. Пример использования:

  if not IsOLEObjectInstalled('Excel.Application') then
    ShowMessage(
'Класс не зарегистрирован'
)
  else
    ShowMessage(
'Класс найден'
);

function IsOLEObjectInstalled(Name: String): boolean;
var
  ClassID: TCLSID;
  Rez : HRESULT;
begin

// Ищем CLSID OLE-объекта
  Rez := CLSIDFromProgID(PWideChar(WideString(Name)), ClassID);
  if Rez = S_OK then
 // Объект найден
    Result := true
  else
    Result := false;
end;

Если нужна более подробная информация об объекте, можно почитать хелп по функции API CLSIDFromProgID.

2. Как определить запущен ли Excel

Данный пример ищет активный экземпляр Excel и делает его видимым:

var
    ExcelApp : Variant;
begin
  try

// Ищем запущеный экземплят Excel, если он не найден, вызывается исключение
    ExcelApp := GetActiveOleObject('Excel.Application');

// Делаем его видимым
    ExcelApp.Visible := true;
  except
  end;

3. Как вывести данные в Excel

Можно выводить данные последовательно в каждую ячейку, но это очинь сильно замедляет работу. Лучше сформировать вариантный массив, и выполнить присвоение области (Range) этого массива.

var
    ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData  : Variant;
    TemplateFile : String;
    BeginCol, BeginRow, i, j : integer;
    RowCount, ColCount : integer;
begin

// Координаты левого верхнего угла области, в которую будем выводить данные
  BeginCol := 1;
  BeginRow := 5;

// Размеры выводимого массива данных
  RowCount := 100;
  ColCount := 50;

// Создание Excel
  ExcelApp := CreateOleObject(
'Excel.Application'
);

// Отключаем реакцию Excel на события, чтобы ускорить вывод информации
  ExcelApp.Application.EnableEvents := false;

 //  Создаем Книгу (Workbook)
 //  Если заполняем шаблон, то
 //  Workbook := ExcelApp.WorkBooks.Add('C:\MyTemplate.xls');
  Workbook := ExcelApp.WorkBooks.Add;

// Создаем Вариантный Массив, который заполним выходными данными
ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant);

 // Заполняем массив
  for I := 1 to RowCount do
    for J := 1 to ColCount do
      ArrayData[I, J] := J * 10 + I;

// Левая верхняя ячейка области, в которую будем выводить данные
  Cell1 := WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];

// Правая нижняя ячейка области, в которую будем выводить данные
  Cell2 := WorkBook.WorkSheets[1].Cells[BeginRow  + RowCount - 1, BeginCol +
ColCount - 1];

// Область, в которую будем выводить данные
  Range := WorkBook.WorkSheets[1].Range[Cell1, Cell2];

// А вот и сам вывод данных
  // Намного быстрее поячеечного присвоения
  Range.Value := ArrayData;

// Делаем Excel видимым
  ExcelApp.Visible := true;



 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Micro Focus/Borland »
Обсудить материал в конференции Microsoft »
Обсудить материал в конференции Дизайн, графика, обработка изображений »
Написать редактору 
 Рекомендовать » Дата публикации: 15.03.2008 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft SQL Server Standard Edition 2017 Sngl OLP 1License NoLevel
Microsoft Visual Studio Professional 2017 Sngl OLP 1License NoLevel
Microsoft SQL Server Standard Core 2017 Sngl OLP 2Licenses NoLevel CoreLic Qualified
Microsoft Windows Professional 10, Электронный ключ
Microsoft Visual Studio Professional w/MSDN AllLng Software Assurance OLP 1 License No Level Qualified
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Новые программы для Windows
Windows и Office: новости и советы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Работа в интернете.. (3)
Может тут кто имеет опыт работы в сети? И подскажет мне что нить?
 
Кто, что знает за карту рассрочки Совесть? (1)
Иногда требуется купить что-то очень нужное, но выделить средства нет возможности. В этом случае...
 
Написание программ для микроконтроллеров AVR, PIC, ARM, STM32 (15)
Напишу любую программу на любом искусственном языке. Профессиональный программист. Основная...
 
Разработка устройств на микроконтроллерах (31)
Профессиональный программист. Основная специализация: МИКРОКОНТРОЛЛЕРЫ, АССЕМБЛЕР для любых...
 
Пишу программы на заказ для студентов (217)
Пишу для студентов на с, с++, паскаль в средах ms visual studio, qt, builder, borland c, delphi....
 
 
 



    
rambler's top100 Rambler's Top100