\' Üretilmiştir
\' Daha Fazlası İçin: sabangul.com
\' Hata, İstek ve Öneriler İçin: sabangul67@gmail.com
\' Makro Başlığı: Netcad Objelerini Sekmeli HTML Raporuna Dönüştürme
\' Makro Hakkında:
\' - Tüm Netcad objelerini (tag 0-10) türlerine ayırır ve tek HTML’de sekmeli rapor oluşturur.
\' - Her sekmede obje özellikler tablo halinde (örn. oline: alan; ocircle: rad).
\' - Tablolar DataTables ile arama, sıralama butonları ve Excel export destekler.
\' - 50’li, 100’lü kayıt gösterim seçenekleri ekli.
\' - HTML UTF-8 BOM ile kaydedilir (Türkçe karakter desteği).
Option Explicit
Sub Main
Dim i, j, obj, SEL, fso, stream
Dim obj_lists, obj_types, key
Dim html_yol, tabaka_indeks, tabaka_ad
Dim shell, folder, row
Dim html_content
With Netcad
\' Dosya seçimi
Dim default_path
default_path = \"C:\\Users\\elify\\Desktop\\Yeni klasör (2)\\Proje_\" & Year(Now) & Right(\"0\" & Month(Now), 2) & Right(\"0\" & Day(Now), 2) & \"_\" & Right(\"0\" & Hour(Now), 2) & Right(\"0\" & Minute(Now), 2) & \".html\"
html_yol = InputBox(\"HTML Raporu Kaydet (varsayılan: \" & default_path & \")\", \"Dosya Kaydet\", default_path)
If html_yol = \"\" Then
MsgBox \"Dosya kaydetme işlemi iptal edildi!\", 16, \"Hata\"
Exit Sub
End If
Set fso = CreateObject(\"Scripting.FileSystemObject\")
If fso.FileExists(html_yol) Then
If MsgBox(\"Dosya zaten var. Üzerine yazılsın mı?\", 36, \"Uyarı\") = 7 Then
Exit Sub
End If
End If
\' Obje listeleri ve türleri
Set obj_lists = CreateObject(\"Scripting.Dictionary\")
Set obj_types = CreateObject(\"Scripting.Dictionary\")
obj_types.Add 0, \"oline\"
obj_types.Add 1, \"opoint\"
obj_types.Add 2, \"ocircle\"
obj_types.Add 3, \"oarc\"
obj_types.Add 4, \"opline3d\"
obj_types.Add 5, \"otext\"
obj_types.Add 6, \"osymbol\"
obj_types.Add 7, \"opline\"
obj_types.Add 8, \"omline\"
obj_types.Add 9, \"oregion\"
obj_types.Add 10, \"oellipse\"
For i = 0 To 10
obj_lists.Add obj_types(i), CreateObject(\"System.Collections.ArrayList\")
Next
\' Obje seçimi
Set SEL = .NewSelectionSet
Set obj = .NewObject
If SEL.Select(\"Raporlanacak objeleri seçiniz\", Array()) Then
For i = 0 To SEL.NE - 1
j = SEL.GetSelectedObject(i, obj)
tabaka_indeks = obj.tabaka
tabaka_ad = .LayerNameOf(tabaka_indeks)
If tabaka_indeks = -1 Then tabaka_ad = \"Bilinmeyen\"
Select Case obj.Tag
Case 0 \' oline
obj_lists(\"oline\").Add Array(j, obj.objname, tabaka_ad, obj.renk, Left(obj.pname, 50), obj.w, obj.lt, obj.length(0))
Case 1 \' opoint
obj_lists(\"opoint\").Add Array(j, obj.cls, tabaka_ad, obj.renk, Left(obj.pname, 50), obj.pcode, obj.p1.x, obj.p1.y, obj.p1.z)
Case 2 \' ocircle
obj_lists(\"ocircle\").Add Array(j, obj.cls, tabaka_ad, obj.renk, Left(obj.pname, 50), obj.p1.x, obj.p1.y, obj.rad)
Case 3 \' oarc
obj_lists(\"oarc\").Add Array(j, obj.cls, tabaka_ad, obj.renk, Left(obj.pname, 50), obj.p1.x, obj.p1.y, obj.rad, obj.startangle, obj.endangle)
Case 4 \' opline3d
Dim pline, koseler, k
Set pline = obj.GetObjectAsPline()
koseler = \"\"
For k = 0 To pline.Num - 1
koseler = koseler & \"(\" & pline.Cor(k).x & \",\" & pline.Cor(k).y & \",\" & pline.Cor(k).z & \")\"
If k < pline.Num - 1 Then koseler = koseler & \"; \"
Next
obj_lists(\"opline3d\").Add Array(j, obj.objname, tabaka_ad, obj.renk, Left(obj.pname, 50), obj.w, obj.lt, koseler)
Case 5 \' otext
obj_lists(\"otext\").Add Array(j, obj.cls, tabaka_ad, obj.renk, Left(obj.s, 50), obj.p1.x, obj.p1.y, obj.angle, obj.wsc, obj.sc, obj.just, obj.flags)
Case 6 \' osymbol
obj_lists(\"osymbol\").Add Array(j, obj.cls, tabaka_ad, obj.renk, Left(obj.pname, 50), obj.p1.x, obj.p1.y, obj.angle)
Case 7 \' opline
Set pline = obj.GetObjectAsPline()
koseler = \"\"
For k = 0 To pline.Num - 1
koseler = koseler & \"(\" & pline.Cor(k).x & \",\" & pline.Cor(k).y & \",\" & pline.Cor(k).z & \")\"
If k < pline.Num - 1 Then koseler = koseler & \"; \"
Next
obj_lists(\"opline\").Add Array(j, obj.objname, tabaka_ad, obj.renk, Left(obj.pname, 50), obj.w, obj.lt, obj.length(0), obj.tarea, obj.area, koseler)
Case 8 \' omline
obj_lists(\"omline\").Add Array(j, obj.objname, tabaka_ad, obj.renk, Left(obj.pname, 50), obj.w, obj.lt, obj.length(0))
Case 9 \' oregion
obj_lists(\"oregion\").Add Array(j, obj.objname, tabaka_ad, obj.renk, Left(obj.pname, 50), obj.area)
Case 10 \' oellipse
obj_lists(\"oellipse\").Add Array(j, obj.cls, tabaka_ad, obj.renk, Left(obj.pname, 50), obj.p1.x, obj.p1.y, obj.majrad, obj.minrad, obj.angle)
End Select
Next
SEL.RedrawAndRewind
Else
MsgBox \"Hiç obje seçilmedi!\", 16, \"Hata\"
Exit Sub
End If
\' HTML içeriği
html_content = \"<!DOCTYPE html>\" & vbCrLf
html_content = html_content & \"<html lang=\'tr\'>\" & vbCrLf
html_content = html_content & \"<head>\" & vbCrLf
html_content = html_content & \"<meta charset=\'UTF-8\'>\" & vbCrLf
html_content = html_content & \"<title>Netcad Obje Raporu</title>\" & vbCrLf
html_content = html_content & \"<link href=\'https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\' rel=\'stylesheet\'>\" & vbCrLf
html_content = html_content & \"<link href=\'https://cdn.datatables.net/1.13.4/css/dataTables.bootstrap5.min.css\' rel=\'stylesheet\'>\" & vbCrLf
html_content = html_content & \"<link href=\'https://cdn.datatables.net/buttons/2.3.6/css/buttons.bootstrap5.min.css\' rel=\'stylesheet\'>\" & vbCrLf
html_content = html_content & \"<script src=\'https://code.jquery.com/jquery-3.6.0.min.js\'></script>\" & vbCrLf
html_content = html_content & \"<script src=\'https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js\'></script>\" & vbCrLf
html_content = html_content & \"<script src=\'https://cdn.datatables.net/1.13.4/js/jquery.dataTables.min.js\'></script>\" & vbCrLf
html_content = html_content & \"<script src=\'https://cdn.datatables.net/1.13.4/js/dataTables.bootstrap5.min.js\'></script>\" & vbCrLf
html_content = html_content & \"<script src=\'https://cdn.datatables.net/buttons/2.3.6/js/dataTables.buttons.min.js\'></script>\" & vbCrLf
html_content = html_content & \"<script src=\'https://cdn.datatables.net/buttons/2.3.6/js/buttons.bootstrap5.min.js\'></script>\" & vbCrLf
html_content = html_content & \"<script src=\'https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js\'></script>\" & vbCrLf
html_content = html_content & \"<script src=\'https://cdn.datatables.net/buttons/2.3.6/js/buttons.html5.min.js\'></script>\" & vbCrLf
html_content = html_content & \"<style>\" & vbCrLf
html_content = html_content & \"body { font-family: Arial, sans-serif; margin: 20px; }\" & vbCrLf
html_content = html_content & \".nav-tabs { margin-bottom: 20px; }\" & vbCrLf
html_content = html_content & \"table { width: 100%; }\" & vbCrLf
html_content = html_content & \"th, td { text-align: left; padding: 8px; }\" & vbCrLf
html_content = html_content & \".dt-buttons { margin-bottom: 10px; }\" & vbCrLf
html_content = html_content & \".dataTables_filter { margin-bottom: 10px; }\" & vbCrLf
html_content = html_content & \".dataTables_length { margin-bottom: 10px; }\" & vbCrLf
html_content = html_content & \".sort-btn { cursor: pointer; padding: 2px 5px; margin-left: 5px; }\" & vbCrLf
html_content = html_content & \"</style>\" & vbCrLf
html_content = html_content & \"</head>\" & vbCrLf
html_content = html_content & \"<body>\" & vbCrLf
html_content = html_content & \"<h2>Netcad Obje Raporu</h2>\" & vbCrLf
html_content = html_content & \"<p>Üretilmiştir. Daha Fazlası İçin: <a href=\'http://www.sabangul.com\'>www.sabangul.com</a></p>\" & vbCrLf
\' Sekmeler
html_content = html_content & \"<ul class=\'nav nav-tabs\' id=\'objeTabs\' role=\'tablist\'>\" & vbCrLf
Dim first_tab: first_tab = True
For Each key In obj_lists.Keys
If obj_lists(key).Count > 0 Then
html_content = html_content & \"<li class=\'nav-item\' role=\'presentation\'>\" & vbCrLf
html_content = html_content & \"<button class=\'nav-link\" & IIf(first_tab, \" active\", \"\") & \"\' id=\'\" & key & \"-tab\' data-bs-toggle=\'tab\' data-bs-target=\'#\" & key & \"\' type=\'button\' role=\'tab\'>\" & UCase(Left(key, 1)) & Mid(key, 2) & \" (\" & obj_lists(key).Count & \")</button>\" & vbCrLf
html_content = html_content & \"</li>\" & vbCrLf
first_tab = False
End If
Next
html_content = html_content & \"</ul>\" & vbCrLf
\' Sekme içerikleri
html_content = html_content & \"<div class=\'tab-content\' id=\'objeTabsContent\'>\" & vbCrLf
first_tab = True
For Each key In obj_lists.Keys
If obj_lists(key).Count > 0 Then
html_content = html_content & \"<div class=\'tab-pane fade\" & IIf(first_tab, \" show active\", \"\") & \"\' id=\'\" & key & \"\' role=\'tabpanel\'>\" & vbCrLf
html_content = html_content & \"<table id=\'\" & key & \"Table\' class=\'table table-striped\'>\" & vbCrLf
html_content = html_content & \"<thead><tr>\" & vbCrLf
\' Sütun başlıkları ve sıralama butonları
Select Case key
Case \"oline\"
html_content = html_content & \"<th>ID <span class=\'sort-btn\' data-col=\'0\' style=\'display:none;\'>▲</span></th><th>GIS Kodu <span class=\'sort-btn\' data-col=\'1\' style=\'display:none;\'>▲</span></th><th>Tabaka Adı <span class=\'sort-btn\' data-col=\'2\' style=\'display:none;\'>▲</span></th><th>Renk <span class=\'sort-btn\' data-col=\'3\' style=\'display:none;\'>▲</span></th><th>Adı <span class=\'sort-btn\' data-col=\'4\' style=\'display:none;\'>▲</span></th><th>Kalınlık <span class=\'sort-btn\' data-col=\'5\' style=\'display:none;\'>▲</span></th><th>Çizgi Tipi <span class=\'sort-btn\' data-col=\'6\' style=\'display:none;\'>▲</span></th><th>Uzunluk <span class=\'sort-btn\' data-col=\'7\' style=\'display:none;\'>▲</span></th>\" & vbCrLf
Case \"opoint\"
html_content = html_content & \"<th>ID <span class=\'sort-btn\' data-col=\'0\' style=\'display:none;\'>▲</span></th><th>GIS Sınıfı <span class=\'sort-btn\' data-col=\'1\' style=\'display:none;\'>▲</span></th><th>Tabaka Adı <span class=\'sort-btn\' data-col=\'2\' style=\'display:none;\'>▲</span></th><th>Renk <span class=\'sort-btn\' data-col=\'3\' style=\'display:none;\'>▲</span></th><th>Adı <span class=\'sort-btn\' data-col=\'4\' style=\'display:none;\'>▲</span></th><th>Nokta Kodu <span class=\'sort-btn\' data-col=\'5\' style=\'display:none;\'>▲</span></th><th>X <span class=\'sort-btn\' data-col=\'6\' style=\'display:none;\'>▲</span></th><th>Y <span class=\'sort-btn\' data-col=\'7\' style=\'display:none;\'>▲</span></th><th>Z <span class=\'sort-btn\' data-col=\'8\' style=\'display:none;\'>▲</span></th>\" & vbCrLf
Case \"ocircle\"
html_content = html_content & \"<th>ID <span class=\'sort-btn\' data-col=\'0\' style=\'display:none;\'>▲</span></th><th>GIS Sınıfı <span class=\'sort-btn\' data-col=\'1\' style=\'display:none;\'>▲</span></th><th>Tabaka Adı <span class=\'sort-btn\' data-col=\'2\' style=\'display:none;\'>▲</span></th><th>Renk <span class=\'sort-btn\' data-col=\'3\' style=\'display:none;\'>▲</span></th><th>Adı <span class=\'sort-btn\' data-col=\'4\' style=\'display:none;\'>▲</span></th><th>Merkez X <span class=\'sort-btn\' data-col=\'5\' style=\'display:none;\'>▲</span></th><th>Merkez Y <span class=\'sort-btn\' data-col=\'6\' style=\'display:none;\'>▲</span></th><th>Rad <span class=\'sort-btn\' data-col=\'7\' style=\'display:none;\'>▲</span></th>\" & vbCrLf
Case \"oarc\"
html_content = html_content & \"<th>ID <span class=\'sort-btn\' data-col=\'0\' style=\'display:none;\'>▲</span></th><th>GIS Sınıfı <span class=\'sort-btn\' data-col=\'1\' style=\'display:none;\'>▲</span></th><th>Tabaka Adı <span class=\'sort-btn\' data-col=\'2\' style=\'display:none;\'>▲</span></th><th>Renk <span class=\'sort-btn\' data-col=\'3\' style=\'display:none;\'>▲</span></th><th>Adı <span class=\'sort-btn\' data-col=\'4\' style=\'display:none;\'>▲</span></th><th>Merkez X <span class=\'sort-btn\' data-col=\'5\' style=\'display:none;\'>▲</span></th><th>Merkez Y <span class=\'sort-btn\' data-col=\'6\' style=\'display:none;\'>▲</span></th><th>Rad <span class=\'sort-btn\' data-col=\'7\' style=\'display:none;\'>▲</span></th><th>Başlangıç Açısı <span class=\'sort-btn\' data-col=\'8\' style=\'display:none;\'>▲</span></th><th>Bitiş Açısı <span class=\'sort-btn\' data-col=\'9\' style=\'display:none;\'>▲</span></th>\" & vbCrLf
Case \"opline3d\"
html_content = html_content & \"<th>ID <span class=\'sort-btn\' data-col=\'0\' style=\'display:none;\'>▲</span></th><th>GIS Kodu <span class=\'sort-btn\' data-col=\'1\' style=\'display:none;\'>▲</span></th><th>Tabaka Adı <span class=\'sort-btn\' data-col=\'2\' style=\'display:none;\'>▲</span></th><th>Renk <span class=\'sort-btn\' data-col=\'3\' style=\'display:none;\'>▲</span></th><th>Adı <span class=\'sort-btn\' data-col=\'4\' style=\'display:none;\'>▲</span></th><th>Kalınlık <span class=\'sort-btn\' data-col=\'5\' style=\'display:none;\'>▲</span></th><th>Çizgi Tipi <span class=\'sort-btn\' data-col=\'6\' style=\'display:none;\'>▲</span></th><th>Köşe Noktaları <span class=\'sort-btn\' data-col=\'7\' style=\'display:none;\'>▲</span></th>\" & vbCrLf
Case \"otext\"
html_content = html_content & \"<th>ID <span class=\'sort-btn\' data-col=\'0\' style=\'display:none;\'>▲</span></th><th>GIS Sınıfı <span class=\'sort-btn\' data-col=\'1\' style=\'display:none;\'>▲</span></th><th>Tabaka Adı <span class=\'sort-btn\' data-col=\'2\' style=\'display:none;\'>▲</span></th><th>Renk <span class=\'sort-btn\' data-col=\'3\' style=\'display:none;\'>▲</span></th><th>Metin <span class=\'sort-btn\' data-col=\'4\' style=\'display:none;\'>▲</span></th><th>X Koordinatı <span class=\'sort-btn\' data-col=\'5\' style=\'display:none;\'>▲</span></th><th>Y Koordinatı <span class=\'sort-btn\' data-col=\'6\' style=\'display:none;\'>▲</span></th><th>Açı (Grad) <span class=\'sort-btn\' data-col=\'7\' style=\'display:none;\'>▲</span></th><th>Genişlik Çarpanı <span class=\'sort-btn\' data-col=\'8\' style=\'display:none;\'>▲</span></th><th>Yazı Boyu <span class=\'sort-btn\' data-col=\'9\' style=\'display:none;\'>▲</span></th><th>Dayanma <span class=\'sort-btn\' data-col=\'10\' style=\'display:none;\'>▲</span></th><th>Özellikler <span class=\'sort-btn\' data-col=\'11\' style=\'display:none;\'>▲</span></th>\" & vbCrLf
Case \"osymbol\"
html_content = html_content & \"<th>ID <span class=\'sort-btn\' data-col=\'0\' style=\'display:none;\'>▲</span></th><th>GIS Sınıfı <span class=\'sort-btn\' data-col=\'1\' style=\'display:none;\'>▲</span></th><th>Tabaka Adı <span class=\'sort-btn\' data-col=\'2\' style=\'display:none;\'>▲</span></th><th>Renk <span class=\'sort-btn\' data-col=\'3\' style=\'display:none;\'>▲</span></th><th>Adı <span class=\'sort-btn\' data-col=\'4\' style=\'display:none;\'>▲</span></th><th>X Koordinatı <span class=\'sort-btn\' data-col=\'5\' style=\'display:none;\'>▲</span></th><th>Y Koordinatı <span class=\'sort-btn\' data-col=\'6\' style=\'display:none;\'>▲</span></th><th>Açı <span class=\'sort-btn\' data-col=\'7\' style=\'display:none;\'>▲</span></th>\" & vbCrLf
Case \"opline\"
html_content = html_content & \"<th>ID <span class=\'sort-btn\' data-col=\'0\' style=\'display:none;\'>▲</span></th><th>GIS Kodu <span class=\'sort-btn\' data-col=\'1\' style=\'display:none;\'>▲</span></th><th>Tabaka Adı <span class=\'sort-btn\' data-col=\'2\' style=\'display:none;\'>▲</span></th><th>Renk <span class=\'sort-btn\' data-col=\'3\' style=\'display:none;\'>▲</span></th><th>Adı <span class=\'sort-btn\' data-col=\'4\' style=\'display:none;\'>▲</span></th><th>Kalınlık <span class=\'sort-btn\' data-col=\'5\' style=\'display:none;\'>▲</span></th><th>Çizgi Tipi <span class=\'sort-btn\' data-col=\'6\' style=\'display:none;\'>▲</span></th><th>Çevre <span class=\'sort-btn\' data-col=\'7\' style=\'display:none;\'>▲</span></th><th>Tapu Alanı <span class=\'sort-btn\' data-col=\'8\' style=\'display:none;\'>▲</span></th><th>Hesap Alanı <span class=\'sort-btn\' data-col=\'9\' style=\'display:none;\'>▲</span></th><th>Köşe Noktaları <span class=\'sort-btn\' data-col=\'10\' style=\'display:none;\'>▲</span></th>\" & vbCrLf
Case \"omline\"
html_content = html_content & \"<th>ID <span class=\'sort-btn\' data-col=\'0\' style=\'display:none;\'>▲</span></th><th>GIS Kodu <span class=\'sort-btn\' data-col=\'1\' style=\'display:none;\'>▲</span></th><th>Tabaka Adı <span class=\'sort-btn\' data-col=\'2\' style=\'display:none;\'>▲</span></th><th>Renk <span class=\'sort-btn\' data-col=\'3\' style=\'display:none;\'>▲</span></th><th>Adı <span class=\'sort-btn\' data-col=\'4\' style=\'display:none;\'>▲</span></th><th>Kalınlık <span class=\'sort-btn\' data-col=\'5\' style=\'display:none;\'>▲</span></th><th>Çizgi Tipi <span class=\'sort-btn\' data-col=\'6\' style=\'display:none;\'>▲</span></th><th>Uzunluk <span class=\'sort-btn\' data-col=\'7\' style=\'display:none;\'>▲</span></th>\" & vbCrLf
Case \"oregion\"
html_content = html_content & \"<th>ID <span class=\'sort-btn\' data-col=\'0\' style=\'display:none;\'>▲</span></th><th>GIS Kodu <span class=\'sort-btn\' data-col=\'1\' style=\'display:none;\'>▲</span></th><th>Tabaka Adı <span class=\'sort-btn\' data-col=\'2\' style=\'display:none;\'>▲</span></th><th>Renk <span class=\'sort-btn\' data-col=\'3\' style=\'display:none;\'>▲</span></th><th>Adı <span class=\'sort-btn\' data-col=\'4\' style=\'display:none;\'>▲</span></th><th>Alan <span class=\'sort-btn\' data-col=\'5\' style=\'display:none;\'>▲</span></th>\" & vbCrLf
Case \"oellipse\"
html_content = html_content & \"<th>ID <span class=\'sort-btn\' data-col=\'0\' style=\'display:none;\'>▲</span></th><th>GIS Sınıfı <span class=\'sort-btn\' data-col=\'1\' style=\'display:none;\'>▲</span></th><th>Tabaka Adı <span class=\'sort-btn\' data-col=\'2\' style=\'display:none;\'>▲</span></th><th>Renk <span class=\'sort-btn\' data-col=\'3\' style=\'display:none;\'>▲</span></th><th>Adı <span class=\'sort-btn\' data-col=\'4\' style=\'display:none;\'>▲</span></th><th>Merkez X <span class=\'sort-btn\' data-col=\'5\' style=\'display:none;\'>▲</span></th><th>Merkez Y <span class=\'sort-btn\' data-col=\'6\' style=\'display:none;\'>▲</span></th><th>Büyük Rad <span class=\'sort-btn\' data-col=\'7\' style=\'display:none;\'>▲</span></th><th>Küçük Rad <span class=\'sort-btn\' data-col=\'8\' style=\'display:none;\'>▲</span></th><th>Açı <span class=\'sort-btn\' data-col=\'9\' style=\'display:none;\'>▲</span></th>\" & vbCrLf
End Select
html_content = html_content & \"</tr><tr>\" & vbCrLf
\' Arama kutuları
Dim col_count
Select Case key
Case \"oline\", \"omline\", \"opline3d\", \"ocircle\", \"osymbol\" col_count = 8
Case \"opoint\" col_count = 9
Case \"oarc\", \"oellipse\" col_count = 10
Case \"opline\" col_count = 11
Case \"otext\" col_count = 12
Case \"oregion\" col_count = 6
End Select
For i = 1 To col_count
html_content = html_content & \"<th><input type=\'text\' class=\'column-search\' placeholder=\'Ara...\' style=\'width: 100%;\'></th>\" & vbCrLf
Next
html_content = html_content & \"</tr></thead><tbody>\" & vbCrLf
\' Tablo içeriği
For Each row In obj_lists(key)
html_content = html_content & \"<tr>\" & vbCrLf
For i = 0 To UBound(row)
html_content = html_content & \"<td>\" & Replace(Replace(row(i) & \"\", \"&\", \"&\"), \"<\", \"<\") & \"</td>\" & vbCrLf
Next
html_content = html_content & \"</tr>\" & vbCrLf
Next
html_content = html_content & \"</tbody></table></div>\" & vbCrLf
first_tab = False
End If
Next
html_content = html_content & \"</div>\" & vbCrLf
\' DataTables başlatma
html_content = html_content & \"<script>\" & vbCrLf
html_content = html_content & \"$(document).ready(function() {\" & vbCrLf
For Each key In obj_lists.Keys
If obj_lists(key).Count > 0 Then
html_content = html_content & \"$(\'#\" & key & \"Table\').DataTable({ \" & vbCrLf
html_content = html_content & \"\'pageLength\': 50, \" & vbCrLf
html_content = html_content & \"\'lengthMenu\': [50, 100, 250, -1], \" & vbCrLf
html_content = html_content & \"\'dom\': \'lBfrtip\', \" & vbCrLf
html_content = html_content & \"\'buttons\': [\'excel\'], \" & vbCrLf
html_content = html_content & \"\'ordering\': false, \" & vbCrLf
html_content = html_content & \"\'language\': { \" & vbCrLf
html_content = html_content & \"\'search\': \'Genel Ara:\', \" & vbCrLf
html_content = html_content & \"\'lengthMenu\': \'Göster _MENU_ kayıt\', \" & vbCrLf
html_content = html_content & \"\'info\': \'_TOTAL_ kayıttan _START_ - _END_ arası gösteriliyor\', \" & vbCrLf
html_content = html_content & \"\'paginate\': { \'first\': \'İlk\', \'last\': \'Son\', \'next\': \'Sonraki\', \'previous\': \'Önceki\' } \" & vbCrLf
html_content = html_content & \"}, \" & vbCrLf
html_content = html_content & \"\'initComplete\': function() { \" & vbCrLf
html_content = html_content & \"var api = this.api(); \" & vbCrLf
html_content = html_content & \"api.columns().every(function(index) { \" & vbCrLf
html_content = html_content & \"var column = this; \" & vbCrLf
html_content = html_content & \"var input = $(this.header()).next(\'tr\').find(\'th\').eq(index).find(\'input.column-search\'); \" & vbCrLf
html_content = html_content & \"if (input.length > 0) { \" & vbCrLf
html_content = html_content & \"input.off(\'keyup\').on(\'keyup\', function(e) { \" & vbCrLf
html_content = html_content & \"if (e.key === \'Enter\' || e.type === \'keyup\') { \" & vbCrLf
html_content = html_content & \"column.search(this.value).draw(); \" & vbCrLf
html_content = html_content & \"} \" & vbCrLf
html_content = html_content & \"}); \" & vbCrLf
html_content = html_content & \"} \" & vbCrLf
html_content = html_content & \"}); \" & vbCrLf
html_content = html_content & \"// Sıralama butonları için olay ekle \" & vbCrLf
html_content = html_content & \"$(\'.sort-btn\').on(\'click\', function() { \" & vbCrLf
html_content = html_content & \"var col = $(this).data(\'col\'); \" & vbCrLf
html_content = html_content & \"var isAsc = $(this).text() === \'▲\'; \" & vbCrLf
html_content = html_content & \"$(this).closest(\'table\').find(\'.sort-btn\').text(\'▲\').hide(); \" & vbCrLf
html_content = html_content & \"$(this).text(isAsc ? \'▼\' : \'▲\').show(); \" & vbCrLf
html_content = html_content & \"api.column(col).order(isAsc ? \'asc\' : \'desc\').draw(); \" & vbCrLf
html_content = html_content & \"}); \" & vbCrLf
html_content = html_content & \"} \" & vbCrLf
html_content = html_content & \"});\" & vbCrLf
End If
Next
html_content = html_content & \"});\" & vbCrLf
html_content = html_content & \"</script>\" & vbCrLf
html_content = html_content & \"</body></html>\" & vbCrLf
\' HTML\'yi UTF-8 BOM ile kaydet
Set stream = CreateObject(\"ADODB.Stream\")
With stream
.Type = 2 \' adTypeText
.Charset = \"utf-8\"
.Open
.WriteText html_content
.SaveToFile html_yol, 2 \' adSaveCreateOverWrite
.Close
End With
MsgBox \"HTML raporu başarıyla oluşturuldu: \" & html_yol, 64, \"Başarılı\"
Set fso = Nothing
Set stream = Nothing
Set shell = Nothing
Set folder = Nothing
Set SEL = Nothing
Set obj = Nothing
Set obj_lists = Nothing
Set obj_types = Nothing
End With
End Sub
\' IIf fonksiyonu
Function IIf(expr, true_part, false_part)
If expr Then
IIf = true_part
Else
IIf = false_part
End If
End Function