Kategori arşivi: Genel

Excel VBA ile Sütun Satır Çevrilmesi (Unpivot)

k1, k2, k3, ssc_kaynak_1, ssc_kaynak_2, ssc_kaynak_3, ssc_kaynak_4, ssc_hedef_1,ssc_hedef_2

Kolonlarına sahip bir excel dosyasını

k1, k2, k3, ssc_kaynak, ssc_hedef

kolonlarına sahip hale getirmek için aşağıdaki VBA (Visual Basic Applications) Script kullanılabilir. Buradaki amaç ssc_kaynak kolonları için 4 kolonu 4 satıra, ssc_hedef kolonları için 2 kolonu 2 satıra, toplam 4+2=6 kolonu 4*2=8 satıra çevirmek.

Örneğin:

veri_k1,veri_k2, veri_k3, veri_ssc_kaynak_1, veri_ssc_kaynak_2, veri_ssc_kaynak_3, veri_ssc_kaynak_4, veri_ssc_hedef_1, veri_ssc_hedef_2

halinden aşağıdaki hale çevirmek

veri_k1, veri_k2, veri_k3, veri_ssc_kaynak_1, veri_ssc_hedef_1
veri_k1, veri_k2, veri_k3, veri_ssc_kaynak_1, veri_ssc_hedef_2
veri_k1, veri_k2, veri_k3, veri_ssc_kaynak_2, veri_ssc_hedef_1
veri_k1, veri_k2, veri_k3, veri_ssc_kaynak_2, veri_ssc_hedef_2
veri_k1, veri_k2, veri_k3, veri_ssc_kaynak_3, veri_ssc_hedef_1
veri_k1, veri_k2, veri_k3, veri_ssc_kaynak_3, veri_ssc_hedef_2
veri_k1, veri_k2, veri_k3, veri_ssc_kaynak_4, veri_ssc_hedef_1
veri_k1, veri_k2, veri_k3, veri_ssc_kaynak_4, veri_ssc_hedef_2

excel_vba_unpivot.xlsm.zip


Option Explicit
Dim sourceWorksheet As Excel.Worksheet
Dim targetWorksheet As Excel.Worksheet
Dim sourceWorksheetRowCount As Integer
Dim targetWorksheetI As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer

Sub Unpivot()

    Set sourceWorksheet = ThisWorkbook.Worksheets("normal")
    Set targetWorksheet = ThisWorkbook.Worksheets("unpivot")
    targetWorksheet.Unprotect

    targetWorksheet.Cells(1, 1).Value = sourceWorksheet.Cells(1, 1).Value
    targetWorksheet.Cells(1, 2).Value = sourceWorksheet.Cells(1, 2).Value
    targetWorksheet.Cells(1, 3).Value = sourceWorksheet.Cells(1, 3).Value
    targetWorksheet.Cells(1, 4).Value = sourceWorksheet.Cells(1, 4).Value
    targetWorksheet.Cells(1, 5).Value = sourceWorksheet.Cells(1, 8).Value

    sourceWorksheetRowCount = sourceWorksheet.UsedRange.Rows.Count
    targetWorksheetI = 2

    For i = 2 To sourceWorksheetRowCount
        For j = 4 To 7
            For k = 8 To 9
                If (IsNull(sourceWorksheet.Cells(i, j)) = False And Trim(sourceWorksheet.Cells(i, j).Value) <> "" And IsNull(sourceWorksheet.Cells(i, k)) = False And Trim(sourceWorksheet.Cells(i, k).Value) <> "") Then
                    targetWorksheet.Cells(targetWorksheetI, 1) = sourceWorksheet.Cells(i, 1)
                    targetWorksheet.Cells(targetWorksheetI, 2) = sourceWorksheet.Cells(i, 2)
                    targetWorksheet.Cells(targetWorksheetI, 3) = sourceWorksheet.Cells(i, 3)
                    targetWorksheet.Cells(targetWorksheetI, 4) = sourceWorksheet.Cells(i, j)
                    targetWorksheet.Cells(targetWorksheetI, 5) = sourceWorksheet.Cells(i, k)
                    targetWorksheetI = targetWorksheetI + 1
                End If
            Next k
        Next j
    Next i

End Sub

wikipedia erişimi için wikizero eklentisi

Wikipedia’ye erişebilmek için yaygınlaşan basit ve kolay yöntem w harfinden önce 0 (sıfır) koymak idi.

Örneğin:
https://tr.wikipedia.org adresini https://tr.0wikipedia.org olarak değiştirmek.

Wikipedia (özgür ansiklopedi) ye dolaylı erişim için (wikipedia proxy, wikizero) aşağıdaki eklentiler kullanılabilir. Bu eklentiler yukarıda elle yapılan yöntemin tarayıcı tarafından otomatik yapılmasını sağlıyor.

WikiZero for Wikipedia addon on Chrome
https://chrome.google.com/webstore/detail/zerowiki/cklaghejbnabhfdlaelhbjdepkfodkcj

WikiZero for Wikipedia addon on Firefox
https://addons.mozilla.org/tr/firefox/addon/zerowiki/

cameyo ile uygulama sanallaştırma

Taşınabilir uygulamalar yazımda portableapps’ten bahsetmiştim. Postableapps’ta sadece taşınabilir sürümü olan programların kullanabilmesine izin verilirken. Cameyo uygulama sanallaştırma programı ile istenen tüm uygulamalar (programlar) taşınabilir hale getirilebilir.

Cameyo ile uygulama sanallaştırma (taşınabilir uygulamalar oluşturma) şöyle yapılır:
Cameyo kurulumu yapılır. Cameyo’ya uygulama kurulumu yapılacağı bilgisi girilir. İstenen program gerçekten bilgisayara kurulur. Cameyo bu işlemler sonucunda uygulamanın sanallaştırılmış (taşınabilir) halini tek exe dosyası ile oluşturur. Bu exe dosyası ile sanallaşmış (taşınabilir) program kullanılır.

Önceki yazımda belittiğim gibi yönetici (admin) olunmayan bilgisayarlarda bu exe ile kurulum yapılmadan istenen programlar kullanılabilir. :))

toad for oracle kullanım

Toad yararlı bazı özellikleri:

toad_options

Sık kullanılan sorgu ifadeleri için kısayol kuralı oluşturma (auto replace): View – Toad Options – Editor – Behavior – Auto Replace

toad_auto_replace

Birden fazla sorguyu çalıştıabilmek için sorguları farklı oturumlarda çalıştırma (execute queries in threads): View – Toad Options – Oracle – Transactions – Execute queries in threads

toad_execute_queries_in_threads

Toad ile çok fazla miktarda veri tabloya aktarılmak (import table data) istendiğinde Use Array DML seçeneği ile çok hızlı birşekilde içe aktarım gerçekleştirilebilir. Bu durumda Toad tek insert ifadesinde birden çok satır değerini koyarak çalıştırır.

notepad++ kullanım

Notepad++’nın yararlı iki özelliği:

Çoklu satır yazma: alt+shift tuşlarına basılarak çoklu satırda yazma modu kullanılabilir.

notepad-plus-plus_coklu_satir_yazma

Makro: makrolar klavye hareketlerini kaydedip aynı hareketlerin isnildiği kadar çalıştırılmasına olanak sağlar. Birçok satırda uygulanmak istenilen değişiklik için klavye tuşlarıyla (home, end, backspace, delete, up, down, right, left, karakterler, sayılar) tüm satırlar için ortak bir değişiklik kuralı oluşturulabilirse makrolarla tüm satırlar kolayca değiştirilebilir.

notpad-plus-plus_makro

iki farklı oracle veritabanındaki tablo tanımlarını karşılaştıran python script


#!/usr/bin/python
# -*- coding: utf-8 -*-

# kullanım: python tablo_tanim_karsilastir.py sema tablo_adi
 
# not: dbuser ve dbpass değerlerini değiştiriniz
 
# gereksinimler: cx_Oracle eklentili python
# python https://www.python.org/downloads/
# cx_Oracle https://pypi.python.org/pypi/cx_Oracle/

import sys

if (len(sys.argv)<>3 or str(sys.argv[1])=="help"):
  print "usage: python compare_table_definitions.py schema table"
  exit()

schema = str(sys.argv[1]).upper()
table = str(sys.argv[2]).upper()

import cx_Oracle

con1 = cx_Oracle.connect('dbuser1/dbpass1@10.1.2.3:1521/DBSRVC1')
cur1 = con1.cursor()
cur1.execute(" select owner,table_name,column_name,column_id,data_type,data_length from all_tab_columns where owner='" + schema + "' and table_name='" + table + "' order by 1,2,4,3 ")
res1 = cur1.fetchall()
str1 = " "
for tmpx1 in res1:
  for tmpy1 in tmpx1:
    str1 = str1 + str(tmpy1)
con1.close()
if str1 <> " ":
  print "DB1 GOT DEFINITIONS"
else:
  print "DB1 NOT OK"

con2 = cx_Oracle.connect('dbuser2/dbpass2@10.3.2.1:1521/DBSRVC2')
cur2 = con2.cursor()
cur2.execute(" select owner,table_name,column_name,column_id,data_type,data_length from all_tab_columns where owner='" + schema + "' and table_name='" + table + "' order by 1,2,4,3 ")
res2 = cur2.fetchall()
str2 = " "
for tmpx2 in res2:
  for tmpy2 in tmpx2:
    str2 = str2 + str(tmpy2)
con2.close()
if str2 <> " ":
  print "DB2 GOT DEFINITIONS"
else:
  print "DB2 NOT OK"

if str1 == str2:
  print "Definitions Equal"
else:
  print "Definitions Not Equal"