Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Excel secili satır
#1
Merhaba,
  

Excelden sadece secili satırları verilerini almak istiyorum. Ama bunu bir türlü çözemedim. Excelden seçili satırları nasıl alabilirim?

   
 
for I := 0 to OpenDialog.Files.Count - 1 do
      begin
        Excel := CreateOleObject('Excel.Application');
        Book := Excel.WorkBooks.Open(OpenDialog.Files[I]);
        Sheet := Book.WorkSheets['Master']; // Sayfa adı
        SonSatir := Excel.ActiveSheet.Cells.SpecialCells(ExcelSatirAdet, EmptyParam).Row;
        try
          for j := 2 to SonSatir do // Satrırdan başla
          begin
            // if Excel.ActiveWindow.SelectedSheets then
            if Sheet[j].Select then
            begin
Cevapla
#2
Open yaptığınız Excel dökümanı hücreleri seçili mi geliyor?

Aktif Excel'i, ardından da WorkSheet'i OleVariant değişkene alıp oradan yürüyün derim.

yani

GetActiveOleObject('Excel.Application');
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#3
Excel açık, kaydedip sonra satırı seçiyorum, bu seçtiğim satırları almak istiyorum.
Cevapla
#4
tamamdır

 createoleobject demeyin, onun yerine dediğim şekilde getactiveoleobject deyin.


kelime anlamına bakın, create dediğinizde yeni bir excel, getactive dediğinizde açık olan excel sayfasına işaret ediliyor. 

try except içinde yaparsanız ola ki excel açık değildir yakalar gereğini yaparsınız.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#5
Hocam,

excelde satırları seçiyorum fakat yinede exceldeki tüm satırı alıyor


Ekledim:
Excel :=GetActiveOleObject('Excel.Application');



   
  for I := 0 to OpenDialog.Files.Count - 1 do
      begin
        Excel :=GetActiveOleObject('Excel.Application');
        Book := Excel.WorkBooks.Open(OpenDialog.Files[I]);
        Sheet := Book.WorkSheets['Master']; // Sayfa adı
        SonSatir := Excel.ActiveSheet.Cells.SpecialCells(ExcelSatirAdet, EmptyParam).Row;
        try
          for j := 1 to SonSatir do // Satrırdan başla
          begin
           if  Sheet.Cells[j, 3].Select= true then
Cevapla
#6
opendialog falan yeni open edilecek dosyalar için.

Siz açık olan excel dökümanına odaklanacaktınız...

Bu döngü fazlalık ve engel, book :=  open olan fazlalık ve engel

Odaklanmanız gereken aktif excel dökümanına kakafoni katıyordur.

Book := Excel.ActiveWorkBook;

şeklinde aktif dökümanın workbook'una onun da WorkSheet'ine odaklanacaksınız.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#7
(26-02-2019, Saat: 17:15)ahmetb Adlı Kullanıcıdan Alıntı: Merhaba,

Excelden sadece secili satırları verilerini almak istiyorum. Ama bunu bir türlü çözemedim. Excelden seçili satırları nasıl alabilirim?
 

Yapmak istediginiz is tam olarak nedir kod örneginizden anlamadim ama istediginiz her seyi excel tarafinda macro yazarak da yapabilirsiniz. Bu daha efektif ve kullanisli olabilir.
Ornegin istediginiz veriler secili hucrelere göre bir veritabanina yazilabilir sonrasinda yolunuza delphi ile devam edebilirsiniz. Hatta delphi kodunu excel tarafindan tetikleyebilirsiniz de.

Baska bir alternatif de yine macro ile secili hucrelerin satirlarinda belirli bir kolona ornegin X isareti ekler daha sonra delphi tarafindan secili satirlar degil de falanca kolonda x isareti olan satirlar seklinde okuyabilirsiniz. bu islem sonrasi kalinti istemiyorsaniz x isaretlerini okuma esnasinda silebilirsiniz.
Cevapla
#8
Bilgiyi nereye kopyalamak istediğinizide belirtirseniz daha anlaşılır olur. 

Örneğin bir sütünü başka bir sütüna kopyalama 

ExcelApp.ActiveSheet.Used.Range.Copy;
ExcelApp.ActiveSheet.Range[ 'A1:E2' ].Copy;
ExcelApp.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
ExcelApp.ActiveSheet.Range.PasteSpecial;



Ayrıca excel 'de 
1) Belirttiğiniz satır ve sütündaki veriyi şöyle seçebilirsiniz. 
 Excel.ActiveSheet.Cells[1,1].Select;

2) Excelde üzerinde bulunduğunuz satır numarasına şöyle ulaşabilirsiniz.

 
 Excel.ActiveCell.Row;


3)Belli bir satırı kopyalamak için şöyle bir kod gördüm. Ama test etmedim
ExcelApp.ActiveSheet.Rows[2].copy;


4)! İncele !  Belli bir aralıkta satırları seçip silmek için şöyle bir örnek verilmiş. Bu örnekteki delete ifadeleri yerine copy varmı deneyin. Belki size kılavuz olur.
MsExcelWorkSheet1.ActiveSheet.Rows[IntToStr(StartRow)+':'+IntToStr(EndRow)].Select;

MsExcelWorkSheet1.ActiveSheet.Rows[IntToStr(StartRow)+':'+IntToStr(EndRow)].Delete;


Birde şöyle bir örnek gördüm , ama sizin istediğiniz mi emin değilim..

//Excel sayfasından seçimli kopyalama yapmak için.Sadece değerler yapıştırılır.

Function ExcelPasteValuesOnly(

 Excel         : Variant;

 ExcelFirstRow : Integer;

 ExcelFirstCol : Integer;

 ExcelLastRow  : Integer;

 ExcelLastCol  : Integer): Boolean;

Begin

 Result := True;

 try

   If ExcelVersion(Excel) = '8.0' Then

   Begin

     If Not ExcelSelectRange(

              Excel,

              ExcelFirstRow,

              ExcelFirstCol,

              ExcelLastRow,

              ExcelLastCol)

     Then

     Begin

       Result := False;

       ShowMessage('Unable to select the range to paste as values.');

       Exit;

     End;

     Excel.Selection.Copy;

     Excel.Selection.PasteSpecial(xlValues);

     Excel.Application.CutCopyMode := False;

   End

   Else

   Begin

     Excel.Range(

       ExcelColIntToStr(ExcelFirstCol)+IntToStr(ExcelFirstRow)+

       ':'+

       ExcelColIntToStr(ExcelLastCol)+IntToStr(ExcelLastRow)).Select;

     Excel.Selection.Copy;

     Excel.Selection.PasteSpecial(xlValues);

     Excel.Application.CutCopyMode := False;

     Excel.Selection.Replace('#N/A','0');

   End;

 except

   ShowMessage('Unable to paste range as values');

   Result := False;

 end;
End;

Cevapla
#9
(27-02-2019, Saat: 01:48)CesuR Adlı Kullanıcıdan Alıntı: Bilgiyi nereye kopyalamak istediğinizide belirtirseniz daha anlaşılır olur. 

Örneğin bir sütünü başka bir sütüna kopyalama

Cesur merhaba,

Ahmetin sordugu soru şu: Excelde bir satirin secili oldugunu nasil anlarim?

Bu amacla şu kodu kullanmis: "if Sheet.Cells[j, 3].Select= true"

Ama bu sorgu secili olsun olmasin her satir icin true dönuyormus. Yani secili olan satirlari bu sorgu ile yakalayamamis.

(26-02-2019, Saat: 19:30)ahmetb Adlı Kullanıcıdan Alıntı:            if  Sheet.Cells[j, 3].Select= true then[/ars]

Sheet.Cells[j, 3].Select= true zaten o satiri secili hale getiriyor. tum satirlarin donmesi gayet normal.
Bir satirin secili olup olmadigini gosteren bir property yok. Secili alan icinde olup olmadigini anlayabilirsin ama onda da kontrola basarak birbirine komsu olmayan satirlar sectiginde dogru calisirmi denemeden bilemedim.
Cevapla
#10
Selam;
aşağıdaki linkte sanırım aradığınız çözüm olabilir, bi inceleyin isterseniz.
Kullanıcının seçtiği aralığı StringGrid'e aktarır diyor.


http://www.delphigroups.info/2/59/456881.html

Test ettim çalışıyor, yalnız şöyle bir sorun var, misal A1;C3 aralığını seçtiniz, bunun yanında crtl basıp E4 ve D2 hücrelerinide seçtiniz, kod sadece A1;C3 aralığını aktarıyor, harici seçili hücreleri almıyor.
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  DbGrid'de Seçili Satırların Fast Reportta Raporlanması [ÇÖZÜLDÜ] bünyamin68 4 713 17-12-2023, Saat: 15:08
Son Yorum: bünyamin68
  Delphi Sürekli Adı Değişen Excel Dosyasından Veri Çekme bünyamin68 2 610 05-10-2023, Saat: 12:50
Son Yorum: mcuyan
  Excel Aktarım OZCANK 2 435 21-08-2023, Saat: 12:57
Son Yorum: frmman
  Fasreport Table nesnesinde satır yüksekliği cvheneburi 4 615 01-08-2023, Saat: 16:27
Son Yorum: cvheneburi
  Delphi 7 Excel'e Veri Aktarma mahone 6 1.091 02-05-2023, Saat: 08:34
Son Yorum: COMMANDX



Konuyu Okuyanlar: 1 Ziyaretçi