• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Google sheetten veri almak

Katılım
26 Ocak 2013
Mesajlar
232
Excel Vers. ve Dili
Excel 2016 Türkçe
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?
 
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...
 
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/spr...X-jrT1lr9HEC7cKeNI1ASt4KB0iPJPPJy5mqKow&gid=1

.
 
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:
Maalesef müneccim değilim, ne hatası veriyor...?

.
 
Sayfa bulunamadı diyor.
 

Ekli dosyalar

  • 170.jpg
    170.jpg
    84 KB · Görüntüleme: 8
Orjinal URL'i verirseniz, duruma bakalım ...

.
 
Bu link çalıştı. Buna göre düzenlemem gerek o zaman. Ayrıca bu daha hızlı veri alıyor.
 
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.
 
Güzel haber .... kolay gelsin.

.
 
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

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:
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

  • 123.jpg
    123.jpg
    86 KB · Görüntüleme: 4
Son düzenleme:
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

  • 123.jpg
    123.jpg
    25.5 KB · Görüntüleme: 3
İ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:
Geri
Üst