Merhaba,
Birçok projede farklı yollarla Excel'den veri okuma işlemleri yapılabiliyor, konu ofis programları olunca farklı sorunlar ortaya çıkabiliyor. (Dosyayı tekrar okurken vb işlemlerde)
Siz bu konuda hangi yöntemleri tercih ediyorsunuz, bunu merak ediyorum. En stabil kullanabileceğim yöntemi arıyorum.
*Yapmak istediğim; Excel yüklü olmayan bir bilgisayarda excel dosyalarını okuyabilmek. (VCL projesi)
Araştırdığım yöntemler.
1-Delphi dışında MSSQL ile okumak.
2-ADOConnection'a bağlı AdoQuery ile veri okumak.
3-3. Parti bir Delphi bileşenleri ile okumak.
Teşekkürler.
TMS, devex native Office bağımsız okuma yazma yapıyor. Buna ilave olarak zamanında flexcell eski Delphi sürümleri için (5-6-7) yazılmış open source bileşen kullandım fakat tam verimli değil veya github üzerinde bakarsan bir Rus arkadaş open xml ile bir bileşen yazmış. github.com/3ddark gidersen kendi github hesabımda da o proje vardı. Hatta o projeyi fmx ile çalışan şekilde kendi bilgisayarımda duzenlemistim
Bunlar sadece okuma değil yazma da yapıyor
Ben bu işi önceden ole nesnesiyle yapıyordum. okuduğum verileri bir mem datasete veya string gride basıyordum. Ancak bu method biraz zahmetliydi. Sonraları Sql Server openrowset veya linkedserver ilede okuduğum oldu. Ancak hiçbiri AdoQuery ile direk okuma tadını ve hızını vermedi. AdoQuery ile 0 kodla excel verilerini okuyup datasete sorunsuzca alıyorum. Harici bileşen hiç kullanmadım.
Sadece bir adoquery ve connectionstring yetiyor : Provider=MSDASQL.1;Persist Security Info=False;Data Source=Excel Files;Initial Catalog=C:\Users\MalcomX\Desktop\test\siparis.xlsx
Pek kullanmasamda dataseti edit-insert-post ettiğinde excelede yazıyor güncelliyor.
Selamlar
Öncelikle ben de, excel programının kurulu olup olmadığını kontrol ettirdikten sonra, excel sayfasındaki ilgili sütunları döngü ile alarak, veritabanında ilgili alanlara ekliyorum. Tek yapmam gereken, cell adresi belirlemek oluyor.
Merhaba ;
Sizin de yazdığınız listede "1-Delphi dışında MSSQL ile okumak." seçeneğini kullanıyorum , pek sıkıntı yaşamadım ama ilk birkaç ayar bazen sorun çıkarsa da sonrasında gayet stabil çalışıyor.
(10-11-2020, Saat: 20:48)pro_imaj Adlı Kullanıcıdan Alıntı: [ -> ]Merhaba,
Birçok projede farklı yollarla Excel'den veri okuma işlemleri yapılabiliyor, konu ofis programları olunca farklı sorunlar ortaya çıkabiliyor. (Dosyayı tekrar okurken vb işlemlerde)
Siz bu konuda hangi yöntemleri tercih ediyorsunuz, bunu merak ediyorum. En stabil kullanabileceğim yöntemi arıyorum.
*Yapmak istediğim; Excel yüklü olmayan bir bilgisayarda excel dosyalarını okuyabilmek. (VCL projesi)
Araştırdığım yöntemler.
1-Delphi dışında MSSQL ile okumak.
2-ADOConnection'a bağlı AdoQuery ile veri okumak.
3-3. Parti bir Delphi bileşenleri ile okumak.
Teşekkürler.
Merhaba,
Devexpress DxSpreadSheet bileşenini kullanabilirsiniz. Dediğinizi karşılıyor. Kullanıyorum aktif olarak.
Merhaba,
Tüm cevaplar için teşekkür ederim, neredeyse tüm yöntemleri deneyerek aşağıdaki şekilde çalışmanın bana göre en zahmetsiz ve ücretsiz'i olduğunu gördüm.
Aşağıdaki şekilde excel kurulu olmayan bir bilgisayarda hiçbir ek işleme gerek kalmadan veriler kolayca okunabiliyor.
ADOConnection1.ConnectionString :=
'Provider=Microsoft.JET.OLEDB.4.0;Data Source="'+AStream.FileName+'";Extended Properties="Excel 8.0;"';
ADOConnection1.Connected := True;
ADOQuery1.SQL.Text := 'SELECT * FROM [Sayfa1$]';
ADOQuery1.Open;
*Ek önlem olarak; Veri girişi yapılacak excel dosyasında diğer tüm alanları kilitlemekte veri tutarlılığı açısından çok faydalı oluyor.
Teşekkürler.
(11-11-2020, Saat: 17:50)pro_imaj Adlı Kullanıcıdan Alıntı: [ -> ]Merhaba,
Tüm cevaplar için teşekkür ederim, neredeyse tüm yöntemleri deneyerek aşağıdaki şekilde çalışmanın bana göre en zahmetsiz ve ücretsiz'i olduğunu gördüm.
Aşağıdaki şekilde excel kurulu olmayan bir bilgisayarda hiçbir ek işleme gerek kalmadan veriler kolayca okunabiliyor.
ADOConnection1.ConnectionString :=
'Provider=Microsoft.JET.OLEDB.4.0;Data Source="'+AStream.FileName+'";Extended Properties="Excel 8.0;"';
ADOConnection1.Connected := True;
ADOQuery1.SQL.Text := 'SELECT * FROM [Sayfa1$]';
ADOQuery1.Open;
*Ek önlem olarak; Veri girişi yapılacak excel dosyasında diğer tüm alanları kilitlemekte veri tutarlılığı açısından çok faydalı oluyor.
Teşekkürler.
Eline sağlık. Böylelikle ben de, illa ki excel kullanılmasını şart koşmama gerek kalmadı müşterilerime.
Peki excel kayıt etmek istediğinizde nasıl kullanıyorsunuz. Mevcut DB kayıtlarını excel olarak kayıt edeceğim
(11-11-2020, Saat: 19:41)3ddark Adlı Kullanıcıdan Alıntı: [ -> ]Peki excel kayıt etmek istediğinizde nasıl kullanıyorsunuz. Mevcut DB kayıtlarını excel olarak kayıt edeceğim
Merhaba hocam,
Konu başlığında da belirtiğim gibi okumayla ilgili yöntemleri araştırmıştım.
Yazma konusunu ilgili dokümanın kendine has özellikleri olduğundan excel yüklü olmadan veya 3. parti bir bileşen olmadan olmayabilir, iyi araştırmak ve deneyimleri olanların paylaşması ile bu konuda hızlı sonuca ulaşabileceğimizi düşünüyorum.
Yukarıdaki yazınızdan, hücre hücre yazmak değil de excel olarak veriyi kaydetmek istediğinizi anlıyorum, bunun için;
Unigui tarafında ek bir bileşene ihtiyaç duymadan aktaracağınız veriler bir grid'e bağlayıp çok profosyonel yapıda bir excel dosyasına dönüştürebilirsiniz.
Aşağıdaki şekilde bir yapıyı tüm grid'ler için kullanıyorum.
procedure TDM.ExcelExport(Grid: TUniDBGrid; DosyaAd, Aciklama: string);
begin
Grid.Exporter.Exporter := UniGridExcelExporter1;
Grid.Exporter.FileName := DosyaAd;
Grid.Exporter.Title := Aciklama;
Grid.Exporter.IncludeGroups := True;
Grid.Exporter.IncludeSummary := True;
Grid.Exporter.ExportGrid;
end;
VCL ve FMX projelerinde daha önce kullandığım bir
UNativeXLSExport.pas dosyası var kullandınız mı bilmiyorum, fena sayılmayacak kadar iyi şekilde verdiğiniz dataset'i xls dosyasına çeviriyor.