|
Вопрос # 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): Вопрос решен.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|