Google sheetten veri almak

Katılım
26 Ocak 2013
Mesajlar
232
Excel Vers. ve Dili
Excel 2016 Türkçe
Altın Üyelik Bitiş Tarihi
26-11-2023
Kod:
Sub Verial()
'by Haluk
'Zaman = Timer
Set google = Sheets("Google")
Set googlebilgi = Sheets("Google Form Bilgi Alışı")
googlebilgi.Range("A9:G1000").ClearContents

For ders = 2 To 7
If googlebilgi.Cells(2, ders) <> "" Then
google.Select
    Dim myURL As String, mySh As Worksheet
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    google.Range("A1:ZZ1000") = ""
    
    myURL = googlebilgi.Cells(2, ders) 'Link

    
    
    With google.QueryTables.Add(Connection:="URL;" & myURL, Destination:=Range("$A$1"))
        .Name = "myTable"
'        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlOverwriteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        
        .RefreshPeriod = 0
        
        .WebSelectionType = xlSpecifiedTables
        .WebTables = 1
        
        .WebFormatting = xlWebFormattingNone
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
    'MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & Chr(10) & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation

    google.Rows(1).Delete
    google.Columns(1).Delete
    Application.DisplayAlerts = True
    son = google.Cells(google.Rows.Count, 1).End(3).Row
For i = son To 2 Step -1
If google.Cells(i, 1) = "" Then google.Rows(i).Delete
Next
    son = google.Cells(google.Rows.Count, 1).End(3).Row
For sil = son To 2 Step -1
If google.Cells(sil, 2) = google.Cells(sil - 1, 2) Then
google.Rows(sil - 1).Delete
End If
Next
For cevap = 1 To son
k = google.Cells(cevap, CDbl(googlebilgi.Cells(7, ders)))
    If k = CDbl(googlebilgi.Cells(3, ders)) Then
    cevapanahtarı = cevap
    GoTo cevapbulundu
End If
Next

cevapbulundu:
sonsut = google.Cells(1, google.Columns.Count).End(1).Column

For i = 1 To son

google.Cells(i, sonsut + 1) = google.Cells(i, 1) & ",,"
If googlebilgi.Cells(6, ders) <> "" Then
google.Cells(i, sonsut + 1) = google.Cells(i, sonsut + 1) & google.Cells(i, googlebilgi.Cells(6, ders)) & ","
Else
google.Cells(i, sonsut + 1) = google.Cells(i, sonsut + 1) & ","
End If
If googlebilgi.Cells(5, ders) <> "" Then
google.Cells(i, sonsut + 1) = google.Cells(i, sonsut + 1) & google.Cells(i, googlebilgi.Cells(5, ders)) & "," & google.Cells(i, googlebilgi.Cells(7, ders)) & ",,,,,,,,"
Else
google.Cells(i, sonsut + 1) = google.Cells(i, sonsut + 1) & "," & google.Cells(i, googlebilgi.Cells(7, ders)) & ",,,,,,,,"
End If



If googlebilgi.Cells(4, ders) <> "" Then
bas = CDbl(googlebilgi.Cells(4, ders))
Else
bas = 3
End If

For cevap = bas To sonsut
google.Cells(i, sonsut + 1) = google.Cells(i, sonsut + 1) & google.Cells(i, cevap) & "," & google.Cells(cevapanahtarı, cevap) & ",,,"
Next


Next
    Rows(cevapanahtarı).Delete
        For aktar = 1 To google.Cells(google.Rows.Count, 1).End(3).Row
            googlebilgi.Cells(aktar + 8, ders) = google.Cells(aktar, sonsut + 1)
        Next


End If
Next

Sheets("Google Form Bilgi Alışı").Select


End Sub
Bu kodla google sheetten veri alıyorum ve bazı düzenlemeler yapıyorum. Ama sorun 250 den fazla veri olmasına karşın sadece ilk 100 ünü alıyor. Acaba hepsini alması için ne yapmam gerekir?
 

kulomer46

Altın Üye
Katılım
23 Mart 2007
Mesajlar
1,513
Excel Vers. ve Dili
Microsoft Office LTSC Professional Plus 2021 - Türkçe
Altın Üyelik Bitiş Tarihi
08-06-2027
Merhaba

son = google.Cells(google.Rows.Count, 1).End(3).Row
kod satırını
son = google.Cells(google.Rows.Count, 1).End(3).Row+5000

olarak değiştirseniz acaba işe yarar mı?

Bir deneyiniz.

Selamlar...
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
100'den fazla satıra sahip Google Sheet'den tüm verileri almak için kullandığınız URL'i modifiye etmek gerekir.

Örneğin, aşağıdaki linke 363 satırlık bir dosya ekledim.

'https://docs.google.com/spreadsheets/d/1fHpPX-jrT1lr9HEC7cKeNI1ASt4KB0iPJPPJy5mqKow/edit?usp=sharing



Daha önceden hazırladığım kodla, bu linkten sadece ilk 100 satırın verilerini alabilirsiniz.

Ama, URL'i aşağıdaki yapıya değiştitirseniz, tüm 363 satırdaki verileri alabilirsiniz. (URL'in başındaki tek tırnak işareti olmayacak)



'https://spreadsheets.google.com/spreadsheets/tq?tqx=out:html&tq=&key=1fHpPX-jrT1lr9HEC7cKeNI1ASt4KB0iPJPPJy5mqKow&gid=1

.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
URL'i modifiye etmek için ekli dosyayı kullanabilirsiniz ....

"Sarı renkli" alana orjinal URL'i girince, hemen altında modifiye URL düzenlenecektir...

Not: Ek dosya için 13 No'lu mesaja bakınız...

.
 
Son düzenleme:

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Maalesef müneccim değilim, ne hatası veriyor...?

.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Orjinal URL'i verirseniz, duruma bakalım ...

.
 

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
4,014
Excel Vers. ve Dili
2013 Türkçe
Bu link çalıştı. Buna göre düzenlemem gerek o zaman. Ayrıca bu daha hızlı veri alıyor.
 

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
4,014
Excel Vers. ve Dili
2013 Türkçe
Haluk Bey, bu URL değişikliği verinin daha hızlı alınmasını sağlıyor. Dosyamdaki tüm adresleri bu yöntem ile değiştirdim. Çok daha iyi oldu.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Güzel haber .... kolay gelsin.

.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,047
Excel Vers. ve Dili
Office 2013 İngilizce
URL'i modifiye etmek için ekli dosyayı kullanabilirsiniz ....

"Sarı renkli" alana orjinal URL'i girince, hemen altında modifiye URL düzenlenecektir...

Not: Ek dosya için 13 No'lu mesaja bakınız...

.
Haluk Hocam aşağıdaki linkte verilen
Google sheet sayfasındaki verileri MS Excel ortamına çekmek için sizin burada vermiş olduğunuz uygulamayı kullandım; fakat boş geliyor, diğer bir deyişle herhangi bir veri getirmedi

https://docs.google.com/spreadsheets/d/1H81hDrhwlLkd7GCxgZDwSUPZvsDjyF1skK5hYFHiUqg/edit#gid=0

burada nerede nasıl bir hata yapıyor olabiliriz?
Desteğiniz için şimdiden teşekkürler,
 

Ekli dosyalar

Katılım
20 Şubat 2012
Mesajlar
242
Excel Vers. ve Dili
office2007 Türkçe
Alternatif .Alıntıdır.

Kod:
Sub Import_Sheets_to_Excel()
'İndirilecek google sheet önceden tam paylaşılmış olmalıdır.

Dim QRT As QueryTable, ul As String, ky As String
If ActiveSheet.QueryTables.Count > 0 Then ActiveSheet.QueryTables(1).Delete
ActiveSheet.Cells.Clear
ky = "1SQVA9h2hwPlj-dsdsddfEwLbxSslM7GeMM" ' Sheet id
ul = "https://spreadsheets.google.com/tq?tqx=out:html&key=" & ky
Set QRT = ActiveSheet.QueryTables.Add(Connection:="URL;" & ul, _
Destination:=Range("$A$1"))
With QRT
.WebSelectionType = xlAllTables
.WebFormatting = xlWebFormattingNone
.Refresh
End With
End Sub
 
Son düzenleme:

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,047
Excel Vers. ve Dili
Office 2013 İngilizce
Alternatif .Alıntıdır.

Kod:
Sub Import_Sheets_to_Excel()
'İndirilecek google sheet önceden tam paylaşılmış olmalıdır.

Dim QRT As QueryTable, ul As String, ky As String
If ActiveSheet.QueryTables.Count > 0 Then ActiveSheet.QueryTables(1).Delete
ActiveSheet.Cells.Clear
ky = "1SQVA9h2hwPlj-dsdsddfEwLbxSslM7GeMM" ' Sheet id
ul = "https://spreadsheets.google.com/tq?tqx=out:html&key=" & ky
Set QRT = ActiveSheet.QueryTables.Add(Connection:="URL;" & ul, _
Destination:=Range("$A$1"))
With QRT
.WebSelectionType = xlAllTables
.WebFormatting = xlWebFormattingNone
.Refresh
End With
End Sub
Hocam teşekkür ederim,
Kodu çalıştırmak istediğimde, ekli ekran görüntüsündeki durum ortaya çıkıyor.
Tamam' a tıklayınca görünürde herhangi bir işlem yapmıyor.

https://docs.google.com/spreadsheets/d/1H81hDrhwlLkd7GCxgZDwSUPZvsDjyF1skK5hYFHiUqg/edit?usp=sharing

google sheet' in linkini sizinle paylaşıyorum bir kontrol edin isterseniz,
iyi çalışmalar.
 

Ekli dosyalar

Son düzenleme:

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,047
Excel Vers. ve Dili
Office 2013 İngilizce
Hocam teşekkür ederim,
Kodu çalıştırmak istediğimde, ekli ekran görüntüsündeki durum ortaya çıkıyor.
Tamam' a tıklayınca görünürde herhangi bir işlem yapmıyor.

https://docs.google.com/spreadsheets/d/1H81hDrhwlLkd7GCxgZDwSUPZvsDjyF1skK5hYFHiUqg/edit?usp=sharing

google sheet' in linkini sizinle paylaşıyorum bir kontrol edin isterseniz,
iyi çalışmalar.
Paylaşım da "Genel ERİŞİM" kısmını kısmını düzenleyince sorun çözüldü, burada sanırım ilk tablodan verileri alıyor.

her şey için teşekkürler...
 

Ekli dosyalar

Katılım
20 Şubat 2012
Mesajlar
242
Excel Vers. ve Dili
office2007 Türkçe
İstenilen sayfa için sheet'in urlseinde bulunan gid no alınmalı.
Aşağıdaki makro ile



Kod:
Sub GoogleTable()
      Dim key As String, url As String
      Dim HTTPreq As Object, HTML As Object
      Dim r As Integer, c As Integer
      Set HTTPreq = CreateObject("MSXML2.ServerXMLHTTP")
     
      key = "16yoXS6l3IYfdsdfdfHEMKOyDaW5Rg" ' 'Sayfa id no
      gid = "123456789" ' Url gid no
      'url = "https://spreadsheets.google.com/tq?tqx=out:html&key=" & key  ' İlk sayfa
      url = "https://spreadsheets.google.com/tq?tqx=out:html&key=" & key & "&gid=" & gid  ' İstenilen sayfa gid no

      With HTTPreq
          .Open "GET", url, False
          .send
      End With
      Do Until HTTPreq.readyState = 4: Loop

   
      Set HTML = CreateObject("htmlFile")
      HTML.body.innerHTML = HTTPreq.responseText

     
      For Each tr In HTML.getElementsByTagName("tr")
          If tr.getElementsByTagName("td").Length > 0 Then
              r = r + 1
              'If r <= 10 Then
                  For Each td In tr.getElementsByTagName("td")
                      c = c + 1
                      Cells(r, c).Value = td.innerText
                  Next td
                  c = 0
             
          End If
      Next tr
  End Sub

Ayrıca;

Sayfanızdaki permission işlemini google script ile otomatik yapabilirsiniz.Bunu sayfada bir kısa yola atayabilirsiniz.
Kod:
function paylasimyap() {
var ss = SpreadsheetApp.getActiveSpreadsheet();

var fileidesi =  ss.getId()
var drivedoc = DriveApp.getFileById(fileidesi);
drivedoc.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.EDIT);
}

function paylasimkaldir() {

var ss = SpreadsheetApp.getActiveSpreadsheet();

var fileidesi =  ss.getId()
var drivedoc = DriveApp.getFileById(fileidesi);
drivedoc.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.NONE);

}
 
Son düzenleme:
Üst