• DİKKAT !

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak Dosya Yükleme tamamen ücretsizdir.

Çözüldü CSV Dosya İçeriğindeki Tarihe Göre Veri Aktarımı

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Durum
Konu Çözümlendiği İçin Kapatılmıştır.

noartist

Yeni Üye
Katılım
17 Mar 2022
Mesajlar
114
Aldığı beğeni
8
Excel V
Office 2016 EN
Konu Sahibi
Merhaba arkadaşlar,

Ekteki dosyada Makro içerikli Rapor dosyası ve 3 adet CSV dosyası bulunuyor, CSV dosyasındaki veriler dosya ismindeki tarihe göre Rapor dosyasındaki ilgili tarih alanına aktarılıyor.

Ancak CSV dosyalarında şöyle bir durum söz konusu dosya ismindeki tarih ile CSV içeriğinde "G" sütunundaki tarihler farklı olabiliyor.

Mesela dosya adı "UserProductivitySummaryGridReport_28-11-2022_13-17-53" şeklinde olan dosyada normalde "UserProductivitySummaryGridReport_28-11-2022" dosya ismindeki tarihe bakarak Rapor dosyasında aynı tarihin altına verileri aktarıyor.

Ancak CSV içeriğinde 29.11.2022 / 30.11.2022 gibi bir sonraki veya önceki tarihlere ait verilerde oluyor.

Bu yüzden değişiklik yaparak tarihi dosya isminden okumak yerine CSV dosyalarındaki "G" sütununda bulunan tarihlere göre kullanıcı verilerinin rapor dosyasına aktarılması konusunda yardımcı olabilir misiniz ?

Yardımlarınız için şimdiden teşekkür ederim.
 
Boş olan hücrelere hangi veriler girilecek.
Kullanıcı Bilgileri28.11.2022
Per noUsernameİsim SoyisimLokasyonGörevFirst Activity TimeLast Activity TimeTotal Time SpentActive Timewfica32Diger UygulamalarTarayıcılarToplam
100​
DOMAIN\test.user1test user1istanbulsatınalma
08:39:18​
21:13:50​
12:34:00​
09:10:00​
101​
DOMAIN\test.user13test user13Ankaraidari işler
08:35:34​
18:11:56​
09:36:00​
08:25:00​
102​
DOMAIN\test.user3test user3İzmirBilgi işlem
00:00:40​
17:55:17​
17:54:00​
05:11:00​
103​
DOMAIN\test.user4test user4TrabzonGüvenlik
08:36:59​
16:53:29​
08:16:00​
07:10:00​
104​
DOMAIN\test.user5test user5SamsunOperasyon
08:32:41​
19:32:03​
10:59:00​
07:17:00​
105​
DOMAIN\test.user10test user10EskişehirUlaşım
07:55:39​
17:33:13​
09:37:00​
08:17:00​
106​
DOMAIN\test.user7test user7AdanaDepo
08:31:55​
23:59:56​
15:28:00​
12:09:00​
107​
DOMAIN\test.user8test user8istanbulAtölye
08:18:36​
17:56:55​
09:38:00​
05:55:00​
108​
DOMAIN\test.user9test user9Ankaraidari işler
109​
DOMAIN\test.user6test user6İzmirBilgi işlem
08:28:16​
00:00:12​
15:31:00​
11:10:00​
110​
DOMAIN\test.user11test user11TrabzonGüvenlik
07:39:52​
17:30:40​
09:50:00​
07:47:00​
111​
DOMAIN\test.user12test user12SamsunOperasyon
112​
DOMAIN\test.user2test user2EskişehirUlaşım
113​
DOMAIN\test.user14test user14Adanasatınalma
 
Son düzenleme:
Konu Sahibi
Alicimri hocam mevcut rapor dosyasında bulunan veri akışıyla ilgili değişiklik olmayacak. Normalde verileri dosya adındaki tarihe göre CSV dosyasından çekiyordu. Artık dosya adındaki tarihe bakmadan CSV dosyasının "G" sütununda bulunan tarihlere göre kullanıcı verileri rapor dosyasına aktarılması gerekmektedir.
 
G sütunundaki tarihler teker teker test edilmesi gerektiğinden sizin kodlarınızı revize edemedim, başka bir mantık ile çözüm üretmeye çalıştım.
Eksik de olsa bir noktaya vardım. kodlar aşağıda.
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
#2 nolu mesajdaki resimde boş sütunların hesaplanma mantığı konusunda bilgi verirseniz yardıma devam edebilirim.
 
aşağıdaki kodu dener misiniz?
HTML:
CSS:
İçeriği görebilmek için Giriş yap ya da Üye ol.
 
Son düzenleme:
Yanlışlıkla dosya adındaki tarih kontrolünü devre dışı bırakmışım onu düzeltmem gerek Şu haliyle klasördeki tüm CSV dosyalarını kontrol ediyor Bu nedenle çok fazla CSV dosyası varsa işlem uzun sürer, uygun bir zamanda ilgilenmeye çalışırım.
Bu arada aklıma birşey takıldı
CSV dosyalarinda sadece birgün önceki yada sonraki veriler mi var?
Bu durumda sadece excel sayfasındaki tarihe bakarak dosyaları incelersek eksik bilgi alınmış olmaz mı?
Yani diyelim sayfada 1.Aralık.2022 -7.Aralık.2022 arası tarih girildiği için sadece bu tarihlere sahip CSVler incelenecek ama 30 kasım dosyasında da 1 aralık verisi olmayacak mı?
Not: tüm CSV dosyalarını arama sorununu duzelttim gibi ama kodu deneme imkanim olmadi. önceki mesaj düzeltildi
 
Son düzenleme:
Konu Sahibi
Yanlışlıkla dosya adındaki tarih kontrolünü devre dışı bırakmışım onu düzeltmem gerek Şu haliyle klasördeki tüm CSV dosyalarını kontrol ediyor Bu nedenle çok fazla CSV dosyası varsa işlem uzun sürer, uygun bir zamanda ilgilenmeye çalışırım.
Bu arada aklıma birşey takıldı
CSV dosyalarinda sadece birgün önceki yada sonraki veriler mi var?
Bu durumda sadece excel sayfasındaki tarihe bakarak dosyaları incelersek eksik bilgi alınmış olmaz mı?
Yani diyelim sayfada 1.Aralık.2022 -7.Aralık.2022 arası tarih girildiği için sadece bu tarihlere sahip CSVler incelenecek ama 30 kasım dosyasında da 1 aralık verisi olmayacak mı?
Not: tüm CSV dosyalarını arama sorununu duzelttim gibi ama kodu deneme imkanim olmadi. önceki mesaj düzeltildi
halily
Hocam elinize emeğinize sağlık paylaştığınız kodlar tam istediğim gibi çalışıyor.

Konuyu şu şekilde özetleyeyim CSV dosyalarını çektiğimiz program kullanıcı bilgisayarlarındaki çalışma sürelerini hesaplıyor. Normalde program gün sonunda 00:00 da kayıt aldığı oturumu sonlandırıp yeni oturum başlatması gerekiyor, ancak program henüz böyle bir kabiliyete kavuşmadı. Kullanıcı bilgisayarını kapatmadığı sürece, diyelim 30 Kasımda kayıt almaya başladı ve bilgisayarını kapatmadı veya yeniden başlatmadığı sürece sadece 3 Kasım için rapor çektiğimizde rapor boş gözüküyor. 30-1-2-3 Kasım raporları 30 Kasım raporunda gözüküyor. Bu yüzden bu konudaki gibi bir talepte bulundum. En kötü ihtimal iki haftalık bir rapor çekeceğim. Bu konuda sizin başka bir öneri görüşünüz olur mu acaba ?
 
CSV dosyalarını taramayı 1 hafta öncesi ve 1 hafta sonrasını dahil edecek şekilde kod yeniden düzenlenebilir. Diyelim ki 1-7 aralık tarihi girildi tarama 23 kasım-14 aralık tarihleri arasındaki tüm dosyaları tarayıp sadece 1-7 aralık tarihleri olan verileri alabilir, yada ilgili klasörde çok fazla CSV dosyası yoksa tüm csvler taranabilir,
yada duzenli olarak her gun CSV dosyaları access tablosuna aktarılır accessten tarih aralığına gore veriler çekilir.
Yani insanın aklına farklı farklı şeyler geliyor ama hepsinin kendine gore + ve - leri bulunuyor
 
Konu Sahibi
CSV dosyalarını taramayı 1 hafta öncesi ve 1 hafta sonrasını dahil edecek şekilde kod yeniden düzenlenebilir. Diyelim ki 1-7 aralık tarihi girildi tarama 23 kasım-14 aralık tarihleri arasındaki tüm dosyaları tarayıp sadece 1-7 aralık tarihleri olan verileri alabilir, yada ilgili klasörde çok fazla CSV dosyası yoksa tüm csvler taranabilir,
yada duzenli olarak her gun CSV dosyaları access tablosuna aktarılır accessten tarih aralığına gore veriler çekilir.
Yani insanın aklına farklı farklı şeyler geliyor ama hepsinin kendine gore + ve - leri bulunuyor
halily hocam, dediğiniz gibi ilgili klasörde çok fazla CSV dosyası olmayacak klasöre atılan tüm CSV dosyalarının taranması daha iyi olacaktır.
 
En fazla kaç dosya olabilir?
 
aşağıdaki kod ile 1100 küsür dosyadan veriler 3 sn'de geldi
doğruluğunu kontrol etmedim denersiniz.HTML:
CSS:
İçeriği görebilmek için Giriş yap ya da Üye ol.
 
Son düzenleme:
Çözüm
Deneme yaparken her yöntem için farklı sayfa oluşturmuştum sayfa adı kalmış
Orası Rapor_free değil sadece Rapor olacak
 
rica ederim
iyi çalışmalar
 
HTML:
CSS:
İçeriği görebilmek için Giriş yap ya da Üye ol.
Bu satırda verileri ekleyeceğimiz alandaki sütun sayısını buluyoruz
Sutun başlıkları 2. Satırda olacağından vergideki sütun sayısı bu satırdaki sütun sayısı kadardır
HTML:
CSS:
İçeriği görebilmek için Giriş yap ya da Üye ol.
bu satırda verileri depolayacagimiz diziyi oluşturuyoruz dizideki sütun sayısı başlık sayısı kadar olacağından sütun sayısı SonStn sayısına eşittir ama satır sayımız yani kullanıcı sayısı belirsizdir bu nedenle bu sayıyı 10.000 olarak belirledim ama belli bir maksimun personel sayısı varsa o da seçilebilirdi.
HTML:
CSS:
İçeriği görebilmek için Giriş yap ya da Üye ol.
bu satırda ilk 2 satır dışındaki -başlıkların olduğu satırlar- tüm veriler silinerek sayfa temizlenir.
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
bu kod bloğunda önce 1 satırdaki tüm hücreler taranarak tarihler bulunup dictionary/sözlüğe eklenir. Hem tarih saklanır hem de tarihin kaçıncı sütun bloguna kaydedileceği saklanır. Böylece verilerden sadece ihtiyacımız olan tarih aralığındakiler hesaba katılır.
HTML:
CSS:
İçeriği görebilmek için Giriş yap ya da Üye ol.
bu satır kullanıcı isimlerini ve kullanıcının kaçıncı sırada olduğunu kaydedecek dictionary/sözlüğü oluşturmak için kullanılacak.
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
açılacak CSV dosyasına sayı ataması yapılır.
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
burada her tarih için kaç sütun ayırmamız gerektiğini hesapliyoruz
Ilk 5 sütun kullanıcı bilgilerini içeriyorken geriye kalanlar 7ye -7 tarih olduğundan- bölünerek tarih başına sütun sayısı bulunur
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
bu 2 satırda önce dosyaların atanacağı klasör sonrada hangi özelliklere sahip dosyalar aranacağı belirtilir
Dosya adları UserProductivitySummaryGridReport_ ile başlayacak ile *.CSV ile bitecek
 
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
bu kod ile klasordeki belirttiğiniz özelliklere sahip tüm dosyalar teker teker taranır
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
ilgili dosya açılıp tüm içerik txtIcerik değişkenine atanır ve dosya kapatılır.
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
Her kullanıcı tanımlamadan önce User Name;;;;;Date;;;;Total .... satırı olduğundan split komutuyla kullanıcılar diziye aktarilir
Mesela "ali,veli,halil" diye bir metin split("gereksiz bilgi ,ali,veli,halil",",") dersek 4 değerli bir diziye dönüştürülür
0 - gereksiz bilgi
1 - ali
2 - veli
3 - halil
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
kodu ile dizeye aktarılmış kullanıcılar arasında dolaşılır Not: dizi 0 dan başlatılmaz, çünkü her dosya kullanıcı adlarından önce ilgisiz veri içerir, o bilgileri atlamak için 1 den baslanir
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
kullanıcıya ait bilgiler ";" ile ayrılmıştır. Bu kod ile dizideki kullanıcıya ait her bilgi split(veri,";") ile sütunlara ayrilir
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
StrDz(15); bu dizinin 15 elemanını yani uygulamaların yer aldığı sütundaki bilgileri içeriyor. Uygulamalar çift yeni satır komutuyla -vbNewLine & vbNewLine- birbirinden ayrılmıştır, burada çift yeni satır , noktalı virgül (;) ile değiştirilir
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
Burada da yeni satır komutu, "|" ile değiştiriliyor
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
7. sütundaki tarih değeri alınıyor
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
eğer kullanıcıya ait tarih değeri birinci satırdaki tarihlerden biri değilse döngüden çıkılıp diğer kullanıcıya geçilir.
 
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
x = dicTrh(Trh): ilgili tarih kaçıncı kümede saptanır
ty = KtSy * (x - 1) + 6: ilgili tarihe ait veri hangi sütundan başlıyor o saptanır
TmpD = StrDz(0): kullanıcı adı geçici değişkene atanir
TmpD = Replace(Evaluate("=lower(""" & TmpD & """)"), "domaın", "DOMAIN"): büyük/küçük harf farkını ortadan kaldırmak ve DOMIN kelimesini büyük yapmak için
If Not dic.Exists(TmpD) Then dic.Add TmpD, dic.Count: sözlükte kullanıcı adı yoksa kullanıcı adı ve sırasını ekler
Geriye kalan satırlar ilgili verinin ekleneceği sütünü belirlemek ve belirlenen yere veriyi eklemek için kullanılır
Not: SureCvr() fonksiyonu veriyi saniyeye çevirmek için kullanılır
 
Son düzenleme:
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
bu blok uygulamalarin yer aldığı sütundaki verileri uygun sütuna işlemek için
 
Durum
Konu Çözümlendiği İçin Kapatılmıştır.
Geri
Üst