Filterbare html aus Excel VBA

  • HTML

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Filterbare html aus Excel VBA

    Hallo zusammen,

    ich stehe vor folgendem Problem. Ich habe eine .xlsm mit mehreren sheets. Ein Sheet enthält eine Tabelle.

    Ganz einfaches Prinzip:

    Name
    Vorname
    Personalnr.
    Info1
    Info2
    Info3
    usw.
    Mustermann
    Max
    123
    abbcc
    bbccdd
    ddeeff
    gghhjj

    Nun möchte ich dieses Sheet mit der Tabelle gerne als eine html speichern bzw. exportieren. Diese Möglichkeit bietet Office. Allerdings wäre mein Wunsch, dass ich in dieser html im Browser dann nach Name, Vorname oder Personalnummer filtern kann. Ist so etwas machbar, kann mir dabei vielleicht jemand helfen? Ich habe leider keine Programmierkenntnisse außer bissl VBA. VBA reicht aber sicher hier nicht aus.
    In HTML kannst Du nicht einfach Filterfunktion einbauen, dafür benötigt man entweder clientseitig JavaScript oder einen serverseitige Umsetzung da gibt es dann viele Sprachen zur Auswahl.

    Mit VBA kommst Du da definitiv nicht weit.

    PS. Ich hoffe, Du hast bei Deiner Veröffentlichungsstrategie auch den Datenschutz im Blick.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Hab dir mal ein Beispiel erstellt wie du eine HTML Tabelle mit JS filtern kannst.
    Filtern einer HTML Tabelle

    HTML-Quellcode

    1. <!DOCTYPE html>
    2. <html lang="de">
    3. <head>
    4. <style>
    5. input[type="checkbox"] {
    6. margin:0;
    7. }
    8. #ctrl-wrapper {
    9. padding: .5em 0;
    10. margin-bottom: 1em;
    11. border-bottom: 1px solid black;
    12. }
    13. #ctrl-wrapper > div:first-of-type {
    14. display:grid;
    15. grid-template-columns:1fr auto;
    16. grid-column-gap:4px;
    17. margin-bottom: .25em;
    18. }
    19. table {
    20. border-collapse: collapse;
    21. }
    22. table, th, td {
    23. border: 1px solid #ccc;
    24. }
    25. th {
    26. padding: .25em .5em;
    27. background-color: #eee;
    28. }
    29. td {
    30. padding: .1em .25em;
    31. }
    32. tr:hover {
    33. background-color: #eef;
    34. }
    35. </style>
    36. </head>
    37. <body>
    38. <!-- Controls für die Filterung -->
    39. <div id="ctrl-wrapper">
    40. <div>
    41. <input id="inp-search-pattern" type="text">
    42. <button id="btn-search">Suche</button>
    43. </div>
    44. <div>
    45. <input id="cb-search-in-first-name" type="checkbox">
    46. <label for="cb-search-in-first-name">Vorname</label>
    47. <input id="cb-search-in-last-name" type="checkbox">
    48. <label for="cb-search-in-last-name">Nachname</label>
    49. <input id="cb-search-in-pers-number" type="checkbox">
    50. <label for="cb-search-in-pers-number">Pers. Nummer</label>
    51. </div>
    52. </div>
    53. <!-- Tabelle -->
    54. <table id="tbl-sheet">
    55. <thead>
    56. <tr>
    57. <th>Vorname</th>
    58. <th>Nachname</th>
    59. <th>Pers. Nummer</th>
    60. </tr>
    61. </thead>
    62. <tbody>
    63. <tr>
    64. <td>Max</td>
    65. <td>Mustermann</td>
    66. <td>123456</td>
    67. </tr>
    68. <tr>
    69. <td>Maxima</td>
    70. <td>Musterfrau</td>
    71. <td>654321</td>
    72. </tr>
    73. <tr>
    74. <td>Hanz</td>
    75. <td>Dampf</td>
    76. <td>82465</td>
    77. </tr>
    78. </tbody>
    79. </table>
    80. <!-- JavaScript um in Tabelle zu suchen -->
    81. <script type="text/ecmascript">
    82. window.addEventListener("load", () => {
    83. const searchButton = document.querySelector("#btn-search");
    84. const searchPattern = document.querySelector("#inp-search-pattern");
    85. const cbFirstName = document.querySelector("#cb-search-in-first-name");
    86. const cbLastName = document.querySelector("#cb-search-in-last-name");
    87. const cbPersNumber = document.querySelector("#cb-search-in-pers-number");
    88. searchButton.addEventListener("click", () => {
    89. if (searchPattern.value === "") {
    90. <!-- Alle Zeilen einblenden -->
    91. let hiddenRows = document.querySelectorAll("#tbl-sheet > tbody tr[style*='display: none']");
    92. hiddenRows.forEach(row => { row.style.display=""; })
    93. }
    94. else {
    95. // All zeilen ausblenden
    96. let visibleRows = document.querySelectorAll("#tbl-sheet > tbody tr:not([style*='display: none'])");
    97. visibleRows.forEach(x => { x.style.display="none"; });
    98. if (cbFirstName.checked) {
    99. let entries = document.querySelectorAll("#tbl-sheet > tbody tr td:nth-child(1)");
    100. searchIn(entries, searchPattern.value);
    101. }
    102. if (cbLastName.checked) {
    103. let entries = document.querySelectorAll("#tbl-sheet > tbody tr td:nth-child(2)");
    104. searchIn(entries, searchPattern.value);
    105. }
    106. if (cbPersNumber.checked) {
    107. let entries = document.querySelectorAll("#tbl-sheet > tbody tr td:nth-child(3)");
    108. searchIn(entries, searchPattern.value);
    109. }
    110. }
    111. });
    112. });
    113. function searchIn(entries, pattern) {
    114. if (entries.length < 1 || typeof pattern !== "string" || pattern === "")
    115. return;
    116. entries.forEach(x => {
    117. if (x.innerText.includes(pattern))
    118. x.parentElement.style.display = "";
    119. });
    120. }
    121. </script>
    122. </body>
    123. </html>



    Wie du ein Sheet exportieren kannst wird hier erklärt kann aber nicht bestätigen ob das so klappt. Hab von VBA keine Ahnung.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fakiz“ ()