Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 188

/ вопрос закрыт /

Здравствуйте, эксперты!

Мне нужно экспортировать данные из ListView в Excel.
Нашел вот такую процедуру, но она не работает... ругается на
Excel := CreateOleObject(′Excel.Application′);

Еще в uses при нажатии на ExcelXP - вылазит сообщение, что не может найти файл ExcelXP.pas (unable to locate file "ExcelXP.pas").

Помогите пожалуйста решить эту проблему.

Приложение:
  1. procedure ListToExcel(ListView: TListView);
  2. var
  3. row, i: integer;
  4. Range, Sheet: VAriant;
  5. begin
  6. try
  7. Excel := CreateOleObject(′Excel.Application′);
  8. except
  9.  
  10. end;
  11. Screen.Cursor := crHourGlass;
  12. Excel.SheetsInNewWorkBook := 1;
  13. Excel.WorkBooks.Add;
  14. Sheet := Excel.Workbooks[1].Sheets[1];
  15. Range := Sheet.Columns;
  16. Range.Columns[1].ColumnWidth := 30;
  17. Range.Columns[n].ColumnWidth := 30;
  18. Range.Columns[n + 1].ColumnWidth := 30;
  19. Range.Columns.Font.Size := 8;
  20. Range := Sheet.Range[′a1:f1′];
  21. Range.Font.Size := 15;
  22. Range.Font.Bold := True;
  23. Range.Columns.Interior.ColorIndex := 6;
  24. Range.HorizontalAlignment := 3;
  25.  
  26. Range := Sheet.Range[′a2:f2′];
  27. Range.Font.Size := 10;
  28. Range.Font.Bold := True;
  29.  
  30.  
  31.  
  32. Row := 3;
  33. for i := 0 to List.Items.Count - 1 do
  34. begin
  35. Sheet.Cells[Row, 1] := ListView.Items.Item[i].Caption;
  36. Sheet.Cells[Row, 2] := ListView.Items.Item[i].SubItems[n];
  37. Sheet.Cells[Row, 3] := ListView.Items.Item[i].SubItems[n + 1];
  38. inc(Row);
  39. end;
  40. Screen.Cursor := crDefault;
  41. if SaveDialog.Execute then
  42.  
  43.  
  44. end;


mr_switch Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задал: mr_switch (статус: Посетитель)
Вопрос отправлен: 13 апреля 2011, 17:08
Состояние вопроса: закрыт, ответов: 1.

Ответ #1. Отвечает эксперт: Шичко Игорь

Здравствуйте, mr_switch!
В раздел uses необходимо добавить модуль ComObj.

Создание объектной модели Excel:
Excel:= CreateOleObject('Excel.Application');

Для того, чтобы не ругался на ExcelXP.pas необходимо его открыть. Находится он в каталоге:
...\Delphi7\Ocx\Servers

Удачи.

Ответ отправил: Шичко Игорь (статус: 9-ый класс)
Время отправки: 13 апреля 2011, 21:21
Оценка за ответ: 5

Комментарий к оценке: Здравствуйте, Игорь!

ComObj я добавил. Думал проблема в ExcelXP.pas не вчитывался в код процедуры, так как раньше с Excel не работал. Необходимо было создать переменную Excel:OleVariant; Думаю дальше разберусь. Спасибо за помощь, вопрос снимается.

Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 14 апреля 2011, 11:41; участников в обсуждении: 2.

13 апреля 2011, 17:46: Вопрос перемещён из тематического раздела Delphi » Работа с компонентами и библиотеками в раздел Delphi » COM, ActiveX и взаимодействие с другими приложениями модератором Ерёмин А.А.

min@y™

min@y™ (статус: Доктор наук), 13 апреля 2011, 18:04 [#1]:

Единственная причина - нефига копипастить хрензнаетчто к себе в программу, а потом удивляться, что не работает. Надо читать нужные статьи и писать прогу самому, причём мозги должны быть в положении "ВКЛ".

З.Ы. Код не читал. И не буду.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
mr_switch

mr_switch (статус: Посетитель), 14 апреля 2011, 11:41 [#2]:

Вообщем изменил немного процедуру, получилось то что мне было нужно. Может еще кому понадобится...

procedure ListToExcel(ListView: TListView);
var
  i,n: integer;
  Range, Sheet: VAriant;
  Excel:OleVariant;
  Dialog:TSaveDialog;
begin
  try
    Excel := CreateOleObject('Excel.Application');
  except
    raise Exception.Create('Íåâîçìîæíî
ïîäêëþ÷èòüñÿ ê
ñåðâåðó Excel');
  end;
  Screen.Cursor := crHourGlass;
  Excel.SheetsInNewWorkBook := 1;
  Excel.WorkBooks.Add;
  Sheet := Excel.Workbooks[1].Sheets[1];
  Range := Sheet.Columns;
  for i:= 0 to ListView.Columns.Count-1 do
    begin
      Sheet.Cells[1,i+1]:= ListView.Column[i].Caption; 
    end;
  for i:= 0 to ListView.Items.Count-1 do
    begin
      Sheet.Cells[i+2,1]:= ListView.Items[i].Caption;
      for n:= 1 to ListView.Columns.Count-1 do
        begin
          Sheet.Cells[i+2,n+1]:= ListView.Items[i].SubItems.Strings[n-1];
        end;
    end;
  Screen.Cursor := crDefault;
  Dialog:= TSaveDialog.Create(Application);
  if Dialog.Execute then
    Excel.WorkBooks[1].SaveAs(Dialog.FileName);
  Excel.WorkBooks[1].Close;
end;

14 апреля 2011, 13:43: Вопрос закрыт (решение принял автор вопроса — mr_switch): Вопрос решен.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.04 сек.