Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Каким способом проще всего вытянуть данные из ячеек 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]

Вопрос с бородой. отвечать лень (Поиск).


Наверх

Титульная страница Поиск, карта сайта Написать письмо