| 
| 
 | Вопрос # 5 188/ вопрос закрыт / | 
 |  Здравствуйте, эксперты!
 Мне нужно экспортировать данные из ListView в Excel.
 Нашел вот такую процедуру, но она не работает... ругается на
 Excel := CreateOleObject(′Excel.Application′);
 
 Еще в uses при нажатии на ExcelXP - вылазит сообщение, что не может найти файл ExcelXP.pas (unable to locate file "ExcelXP.pas").
 
 Помогите пожалуйста решить эту проблему.
 Приложение:Переключить в обычный режим procedure ListToExcel(ListView: TListView);var  row, i: integer;  Range, Sheet: VAriant;begin  try    Excel := CreateOleObject(′Excel.Application′);  except   end;  Screen.Cursor := crHourGlass;  Excel.SheetsInNewWorkBook := 1;  Excel.WorkBooks.Add;  Sheet := Excel.Workbooks[1].Sheets[1];  Range := Sheet.Columns;  Range.Columns[1].ColumnWidth := 30;  Range.Columns[n].ColumnWidth := 30;  Range.Columns[n + 1].ColumnWidth := 30;  Range.Columns.Font.Size := 8;  Range := Sheet.Range[′a1:f1′];  Range.Font.Size := 15;  Range.Font.Bold := True;  Range.Columns.Interior.ColorIndex := 6;  Range.HorizontalAlignment := 3;   Range := Sheet.Range[′a2:f2′];  Range.Font.Size := 10;  Range.Font.Bold := True;     Row := 3;  for i := 0 to List.Items.Count - 1 do  begin    Sheet.Cells[Row, 1] := ListView.Items.Item[i].Caption;    Sheet.Cells[Row, 2] := ListView.Items.Item[i].SubItems[n];    Sheet.Cells[Row, 3] := ListView.Items.Item[i].SubItems[n + 1];    inc(Row);  end;  Screen.Cursor := crDefault;  if SaveDialog.Execute then  end;
|  |   Вопрос задал: 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™ (статус: Доктор наук), 13 апреля 2011, 18:04 [#1]:Единственная причина - нефига копипастить хрензнаетчто к себе в программу, а потом удивляться, что не работает. Надо читать нужные статьи и писать прогу самому, причём мозги должны быть в положении "ВКЛ". 
 З.Ы. Код не читал. И не буду.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | 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): Вопрос решен. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |