google script kod çalışması hk. destek

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,076
Excel Vers. ve Dili
Office 2013 İngilizce
Arkadaş Merhaba,

Aşağıdaki Kod ile Kaynak ('ana_tablo') sayfada yer alan 'B8:K18' hücre aralığını Hedef ('Kurye') sayfaya satır-satır aktarmak istiyorum.

Bu işlemi yaparken Kaynak sayfadaki "B" sütunu dolu ise yapacak, B sütunundaki hücre boş ise bu satırı atlayarak diğer satıra geçecek

Sorun ekli görselde yer alan Kaynak sayfa 18. satırdaki verileri hedef sayfaya aktarmıyor.

desteğiniz için şimdiden teşekkürler, iyi akşamlar.

Kod:
  var ss = SpreadsheetApp.getActive();
  var sourceSheet = ss.getSheetByName('ana_tablo');
  var targetSheet2 = ss.getSheetByName('Kurye');

  const arrData = targetSheet2.getRange('A:A').getValues();
  var lastA = arrData.map(x => x[0]).indexOf('') + 1;
  var lastB = targetSheet2.getLastRow() + 1;

  var rw = 0;
  rw = lastA - 1

  const sube = sourceSheet.getRange('B3').getValue();
  const tarih = sourceSheet.getRange('C5').getValue();

  var data = [];
  data = sourceSheet.getRange('B8:K18').getValues()
  var stRow = data.map(x => x[0]).indexOf('') + 1;
  for (var i = 0; i < data[i].length; i++) {
    if (data[i][0] != '') {
      targetSheet2.getRange(lastB + i, 1).setValue(rw);
      targetSheet2.getRange(lastB + i, 2).setValue(sube);
      targetSheet2.getRange(lastB + i, 3).setValue(tarih);
      for (var j = 0; j < data[i].length; j++) {
        targetSheet2.getRange(lastB + i, j + 4).setValue(data[i][j]);
      }
    }
  }
 

Ekli dosyalar

tugkan

Altın Üye
Katılım
6 Kasım 2004
Mesajlar
477
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
16-10-2025
Merhaba,
Dener misiniz.
"18. satırdaki veriler neden aktarılamıyor" sorununun, döngü içinde data.length kullanılarak her bir satırın sütun uzunluğuna erişmeye çalışılmasından kaynaklanabileceğini düşünüyorum. Bunun yerine döngü sınırlarını doğru bir şekilde belirlemek ve data.length değerini kontrol etmek daha güvenilir olacaktır.

Sorunu çözmek için aşağıdaki düzenlemeleri yapabilirsiniz:

1. for Döngüsünün İyileştirilmesi
Dıştaki for döngüsünde, i değişkenini sınırlandırırken data.length kullanılmalıdır. Ayrıca, iç döngüde data.length ile kontrol yapmanız doğru bir yaklaşım.

2. Boş Satırları Atlamak İçin Şartın Düzeltilmesi
data[0] != '' kontrolü doğru çalışıyor gibi görünse de, boş hücrelerde tam doğruluk sağlayamayabilir. Daha sağlam bir kontrol için data[0].trim() kullanabilirsiniz.

Geliştirilmiş Kod
Aşağıdaki düzenlenmiş kodun, tüm verilerinizi doğru şekilde aktarmasını sağlaması gerekiyor:

Kod:
function transferData() {
  var ss = SpreadsheetApp.getActive();
  var sourceSheet = ss.getSheetByName('ana_tablo');
  var targetSheet2 = ss.getSheetByName('Kurye');

  const arrData = targetSheet2.getRange('A:A').getValues();
  var lastA = arrData.map(x => x[0]).indexOf('') + 1;
  var lastB = targetSheet2.getLastRow() + 1;

  var rw = 0;
  rw = lastA - 1;

  const sube = sourceSheet.getRange('B3').getValue();
  const tarih = sourceSheet.getRange('C5').getValue();

  var data = sourceSheet.getRange('B8:K18').getValues();

  // Ana döngü
  for (var i = 0; i < data.length; i++) {
    if (data[i][0] && data[i][0].toString().trim() != '') {
      targetSheet2.getRange(lastB, 1).setValue(rw);
      targetSheet2.getRange(lastB, 2).setValue(sube);
      targetSheet2.getRange(lastB, 3).setValue(tarih);
      for (var j = 0; j < data[i].length; j++) {
        targetSheet2.getRange(lastB, j + 4).setValue(data[i][j]);
      }
      lastB++; // Sadece dolu satırlar için artır
    }
  }
}
Yaptığım Değişiklikler:
  1. data[0] Kontrolü:
    • Boş hücreleri atlama kontrolü data[0].toString().trim() != '' şeklinde daha güvenilir hale getirildi.

    [*]Satır İndeksini Yönetmek:
    • lastB değişkeni yalnızca dolu bir satır hedef sayfaya aktarıldığında artırılır.
    [*]for Döngüsü Sınırları:
    • Dıştaki döngü data.length ile sınırlandırıldı.

Öneriler:
  • Daha büyük verilerle çalışıyorsanız, hücre hücre işlemek yerine toplu aktarımı optimize etmek için setValues yöntemini kullanabilirsiniz.
  • Debugging için Logger.log(data); kullanarak aktarılan her satırı kontrol edebilirsiniz.

Bu kodla, B8:K18 aralığındaki verilerin doğru şekilde aktarıldığından emin olabilirsiniz.
 
Katılım
11 Temmuz 2024
Mesajlar
208
Excel Vers. ve Dili
Excel 2021 Türkçe
Alternatif ve çözüm olabilmesi adına sunuyorum;

Kod:
function veriAktar() {
  var ss = SpreadsheetApp.getActive();
  var sourceSheet = ss.getSheetByName('ana_tablo');
  var targetSheet = ss.getSheetByName('Kurye');

  var arrData = targetSheet.getRange('A:A').getValues();
  var arrDataFlat = arrData.map(function(row) { return row[0]; });
  var lastA = arrDataFlat.indexOf('') + 1;
  if (lastA === 0) {
    lastA = arrDataFlat.length + 1; 
  }

  var rw = lastA - 1; 

  var sube = sourceSheet.getRange('B3').getValue();
  var tarih = sourceSheet.getRange('C5').getValue();
  var data = sourceSheet.getRange('B8:K18').getValues();

  var outputData = [];
  for (var i = 0; i < data.length; i++) {
    if (data[i][0] !== '') { 
      rw++; 
      var outputRow = [];
      outputRow.push(rw); 
      outputRow.push(sube); 
      outputRow.push(tarih); 
      outputRow = outputRow.concat(data[i]); 
      outputData.push(outputRow);
    }
  }

  if (outputData.length > 0) {
    targetSheet.getRange(lastA, 1, outputData.length, outputData[0].length).setValues(outputData);
  }
}
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,076
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba,
Dener misiniz.
"18. satırdaki veriler neden aktarılamıyor" sorununun, döngü içinde data.length kullanılarak her bir satırın sütun uzunluğuna erişmeye çalışılmasından kaynaklanabileceğini düşünüyorum. Bunun yerine döngü sınırlarını doğru bir şekilde belirlemek ve data.length değerini kontrol etmek daha güvenilir olacaktır.

Sorunu çözmek için aşağıdaki düzenlemeleri yapabilirsiniz:

1. for Döngüsünün İyileştirilmesi
Dıştaki for döngüsünde, i değişkenini sınırlandırırken data.length kullanılmalıdır. Ayrıca, iç döngüde data.length ile kontrol yapmanız doğru bir yaklaşım.

2. Boş Satırları Atlamak İçin Şartın Düzeltilmesi
data[0] != '' kontrolü doğru çalışıyor gibi görünse de, boş hücrelerde tam doğruluk sağlayamayabilir. Daha sağlam bir kontrol için data[0].trim() kullanabilirsiniz.

Geliştirilmiş Kod
Aşağıdaki düzenlenmiş kodun, tüm verilerinizi doğru şekilde aktarmasını sağlaması gerekiyor:

Kod:
function transferData() {
  var ss = SpreadsheetApp.getActive();
  var sourceSheet = ss.getSheetByName('ana_tablo');
  var targetSheet2 = ss.getSheetByName('Kurye');

  const arrData = targetSheet2.getRange('A:A').getValues();
  var lastA = arrData.map(x => x[0]).indexOf('') + 1;
  var lastB = targetSheet2.getLastRow() + 1;

  var rw = 0;
  rw = lastA - 1;

  const sube = sourceSheet.getRange('B3').getValue();
  const tarih = sourceSheet.getRange('C5').getValue();

  var data = sourceSheet.getRange('B8:K18').getValues();

  // Ana döngü
  for (var i = 0; i < data.length; i++) {
    if (data[i][0] && data[i][0].toString().trim() != '') {
      targetSheet2.getRange(lastB, 1).setValue(rw);
      targetSheet2.getRange(lastB, 2).setValue(sube);
      targetSheet2.getRange(lastB, 3).setValue(tarih);
      for (var j = 0; j < data[i].length; j++) {
        targetSheet2.getRange(lastB, j + 4).setValue(data[i][j]);
      }
      lastB++; // Sadece dolu satırlar için artır
    }
  }
}
Yaptığım Değişiklikler:


    • data[0] Kontrolü:
      • Boş hücreleri atlama kontrolü data[0].toString().trim() != '' şeklinde daha güvenilir hale getirildi.

      [*]Satır İndeksini Yönetmek:
      • lastB değişkeni yalnızca dolu bir satır hedef sayfaya aktarıldığında artırılır.
      [*]for Döngüsü Sınırları:
      • Dıştaki döngü data.length ile sınırlandırıldı.

Öneriler:

    • Daha büyük verilerle çalışıyorsanız, hücre hücre işlemek yerine toplu aktarımı optimize etmek için setValues yöntemini kullanabilirsiniz.
    • Debugging için Logger.log(data); kullanarak aktarılan her satırı kontrol edebilirsiniz.

Bu kodla, B8:K18 aralığındaki verilerin doğru şekilde aktarıldığından emin olabilirsiniz.
@pitchoute ve @tugkan hocalarım;
vermiş olduğunuz destekler için çok teşekkür ederim.
her ikisnizin vermiş olduğun bilgiler gerçekten çok kıymetli

sağ olun, var olun!
 
Son düzenleme:
Katılım
11 Temmuz 2024
Mesajlar
208
Excel Vers. ve Dili
Excel 2021 Türkçe
Sizler de sağ olun, iyi çalışmalar hocam
 
Üst