![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Каким способом проще всего вытянуть данные из ячеек Excel в Delph [D7]
ANB © (2005-11-15 13:55:00)Нужно обработать (проверить) лист (отчет в виде xls файла) из делфи. При этом на машине может быть любая версия офиса. Сам файл версии 95/97.
Каким способом легче воспользоваться ?
Stakan (2005-11-15 14:37:00) [1]http://www.delphikingdom.com/asp/viewitem.asp?catalogid=249
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=272
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=313
Занимательные статьи как раз по теме
guru-guru (2005-11-15 14:30:00) [2]Способ не самый быстрый. Но зато работает с любым офисом. А если тебе скорость нужна, то тебе только ОДБЦ юзать. (формат файла ХЛС я не встречал).
А если CSV выгрузишь, то вообще можно будет без офиса юзать и скорость будет большая.
Я использую позднее связывание - простота использования, а файлы у меня не такие уж и большие + возможность использования всех возможностей Екселя: диаграммы, формулы, и т.д. и все через делфи.
ANB (2005-11-15 14:18:00) [3]
> КиТаЯц © (15.11.05 14:01) [1]
Так я только способ спрашиваю - может проще в CSV формат выгрузить, или через ODBC подключить.
> guru-guru © (15.11.05 14:09) [2]
Спасибо за пример. А этот способ быстро работает (листы могут быть немаленькие) ?
guru-guru (2005-11-15 14:12:00) [4]Чтобы считать данные из екселя
s:=App.WorkBooks[1].WorkSheets['Лист1'].Cells[1,1].Value
Чтобы записать данные в ексел
App.WorkBooks[1].WorkSheets['Лист1'].Cells[1,1].Value:='А Я УЖЕ ТУТ!!!'
guru-guru (2005-11-15 14:09:00) [5]Для того, чтобы можно было работать с любой версией офиса, ты должен использовать пзднее связывание.
var
ServerIsRunning:boolean;
Unknown:IUnknown;
Result:HResult;
AppProgID: string;
App:Variant;
x,y,num:integer;
Doc,FileName,s:String;
sqlfrm:string;
t:integer;
begin
AppProgID:='Excel.Application';
ServerIsRunning:=false;
Result:=GetActiveObject(ProgIDToClassID(AppProgID),nil,Unknown);
if (Result=MK_E_UNAVAILABLE) then
App:=CreateOleObject(AppProgID)
else
begin
ShowMessage('Закройте все копии EXCEL и повторите попытку');
// здесь можно обработать по другому и сможешь работать с уже открытым документом
exit;
end;
try //мы создали объект и его нужно обязательно удалить.
App.Visible:=false;
App.WorkBooks.Open(FileName);
App.ActiveWorkBook.Close(false,prg_path+FileName);
finally
if not ServerIsRunning then App.quit;
App:=Unassigned;
end;
end;
КиТаЯц (2005-11-15 14:01:00) [6]Вопрос с бородой. отвечать лень (Поиск).