internet ortamında yayımlanan excel dosyasından güncelleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ahmet_sinav
Üye
Mesajlar: 263
Kayıt: 17 Nis 2004 07:44
Konum: İzmir Yeşilyurt Ulu Cami
İletişim:

internet ortamında yayımlanan excel dosyasından güncelleme

Mesaj gönderen ahmet_sinav »

iyi çalışmalar;
e-devlet tarafından yayımlanan bir excel dosyasını kendi programım içerisinden kontrol edip değişiklikleri güncellemem gerekiyor. Nasıl bir yöntem önerirsiniz? Excel dosyasını çekip tek tek satırları kontrol etmek haricinde? Excel dosyasının değiştirilme tarihine bakılabilir belki fakat netteki bir dosyanın file-age olayını nasıl alırım onu bilmiyorum.
Saygılar;
İmam Süleyman Yakub <==> Molla Mustafa Mansur
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Şöyle düşünebilirsin.

- Netteki bir dosya download edilirken bile yarım bir operasyona kaldığımız yerden başlayabiliyoruz. Bunu nasıl başarıyoruz ?

- Download başlamadan önce netteki dosyanın bilgileri bize dosya başlığında verilir ve/veya bizim talebimiz oraya iletilir.

- Gelen başlık bilgisi aşağıdaki şekildedir

Kod: Tümünü seç

Date: Tue, 11 Sep 2007 13:37:48 GMT
Server: Apache/2.0.52 (CentOS)
Last-Modified: Thu, 06 Sep 2007 22:41:39 GMT
ETag: "1c004-3f321-39ba8ec0"
Accept-Ranges: bytes
Content-Length: 258849
Content-Type: application/zip
- Aynı anda bu bilgi IdHttp'nin Response içinde ayrıştırılmış olarak da bulunurlar. Sorun gereği bize lazım olan Last-Modified olan başlık bilgisidir.

- Yapacağımız işlem bir dosyayı GET edecekmiş gibi davranıp hemen işlemi iptal etmek ve gelen başlık bilgisini değerlendirmek.

- Şimdi aşağıdaki kodu senin için ürettim. Dene ve kavramaya çalış.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Var
  DosyaURL  : String;
begin
  DosyaURL  := 'http://www.armantr.com/web/download/files/MSNTurk.zip';
  IdHTTP1.Get(DosyaURL);
end;

Kod: Tümünü seç

procedure TForm1.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Integer);
begin
  // İşlem başlar başlamaz durdurduk.. Bize sadece header gerekli idi..
  // Bu arada onu da aldık.. Çözümleme aşağıda..
  TIdHttp(ASender).Disconnect;
end;

Kod: Tümünü seç

procedure TForm1.IdHTTP1HeadersAvailable(Sender: TObject;
  AHeaders: TIdHeaderList; var VContinue: Boolean);
Const
  Aranan = 'Last-Modified:';
Var
  BaslikBilgi : String;
  Tarih       : String;
  FileAge     : TDateTime;
begin
  // Birinci Method
  FileAge := IdHTTP1.Response.LastModified;
  ShowMessage( 'Dosya Tarihi (Sunucu) : ' + DateTimeToStr(FileAge) );
  // Bu sonuç sunucu bilgisayardan geldiğinden GMT ayarına göre değişkendir.
  // Test ettiğim dosyam için bundan 3 saat çıkarıcam...
  // Uses'a DateUtils ekleyelim ki IncHour fonksiyonumuz çalışsın.
  FileAge := IncHour(IdHTTP1.Response.LastModified, -3);
  ShowMessage( 'Dosya Tarihi (3 saat düşülmüş hali...) : ' + DateTimeToStr(FileAge) );

  // İkinci Method
  // Bu methodda ise direk file headerden TEXT olarak bu tarih bilgisini alıcaz..
  // Klasik String Operasyonları (Copy, Pos, Delete vb.) ile işlem yürütücez
  BaslikBilgi := AHeaders.Text;
  If Pos(Aranan, BaslikBilgi) > 0 then begin
    Delete(BaslikBilgi, 1, Pos(Aranan, BaslikBilgi) + Length(Aranan)-1);
    Tarih := Trim( Copy(BaslikBilgi, 1, Pos(#10, BaslikBilgi)-1) );
    ShowMessage( 'Dosya Tarihi : ' + Tarih );
  end;
end;
Resim
Resim ....Resim
Kullanıcı avatarı
ahmet_sinav
Üye
Mesajlar: 263
Kayıt: 17 Nis 2004 07:44
Konum: İzmir Yeşilyurt Ulu Cami
İletişim:

Mesaj gönderen ahmet_sinav »

Cevap için saolun hocam. İşimi gördü.
Saygılar;
İmam Süleyman Yakub <==> Molla Mustafa Mansur
Cevapla