Zwei ONLYOFFICE-Makros: Hervorheben von Duplikaten und Auswählen von leerer Zeile

15 Juni 2020By Vlad

Unsere Benutzer fragten uns, wie man VBA-Makros aus Excel wieder erstellen kann. In diesem Beitrag erklären wir es an zwei einfachen Beispielen.

macros in onlyoffice

Über Makros in ONLYOFFICE

ONLYOFFICE-Makros sind in JavaScript-Sprache und mit ONLYOFFICE Document Builder API-Skript geschrieben. Anders gesagt, Sie sollen VBA-Makros mit JavaScript neu erstellen, um diese zu nutzen.

Wieso schreiben wir unsere Makros in JavaScript?
 

  • Es ist betriebssystemübergreifend;
  • Es ist wirklich einfach;
  • Sie können Ihren Code als Makro oder als Plugin verwenden.

Außerdem haben unsere Makros keinen Zugriff auf das System – das garantiert höheres Sicherheitsniveau. Sie stellen bloß JS-Code dar und dieser wird in demselben Fenster mit den Editoren ausgeführt.

Wie man Makros schreibt

 

  1. In Tabellenkalkulationen öffnen Sie die Registerkarte Plugins und klicken Sie auf Makros.
  2. Klicken Sie auf “Neu” im geöffneten Fenster.
  3. Lesen Sie die API-Dokumentation, um das Skript zu schreiben.
Beispiel 1: Hervorheben von Duplikaten

Schreiben wir ein Makro zum Hervorheben von Duplikaten im ausgewählten Bereich mit verschiedenen Farben, um wiederholende Werte schnell zu erkennen. Wir verwenden dieses einfache VBA-Makro als Basis.

Hier ist das Skript mit Kommentaren, sodass Sie den Erstellungsprozess verstehen. Die Farben werden im Code des Makros bestimmt.

(function () {
    // Background color of cells with non-repeating values
    var whiteFill = Api.CreateColorFromRGB(255, 255, 255);
    // The current index of the color range
    var uniqueColorIndex = 0;
    // Color range to highlight duplicate values
    var uniqueColors = [Api.CreateColorFromRGB(255, 255, 0),
        Api.CreateColorFromRGB(204, 204, 255),
        Api.CreateColorFromRGB(0, 255, 0),
        Api.CreateColorFromRGB(0, 128, 128),
        Api.CreateColorFromRGB(192, 192, 192),
        Api.CreateColorFromRGB(255, 204, 0)];
 
    // Function to get color for duplicates
    function getColor() {
        // If you have chosen all the unique colors, then let's go from the beginning
        if (uniqueColorIndex === uniqueColors.length) {
            uniqueColorIndex = 0;
        }
        return uniqueColors[uniqueColorIndex++];
    }
 
    // Getting an active sheet
    var activeSheet = Api.ActiveSheet;
    // Getting selection on the active sheet
    var selection = activeSheet.Selection;
    // Map of values in cells with the duplicates number
    var mapValues = {};
    // All cells range
    var arrRanges = [];
    // Going through the selection
    selection.ForEach(function (range) {
        // Getting value from cell
        var value = range.GetValue();
        if (!mapValues.hasOwnProperty(value)) {
            mapValues[value] = 0;
        }
        mapValues[value] += 1;
        arrRanges.push(range);
    });
    var value;
    var mapColors = {};
    // We go through all the cells of the selection and setting the highlighting if this value is repeated more than 1 time
    for (var i = 0; i < arrRanges.length; ++i) {
        value = arrRanges[i].GetValue();
        if (mapValues[value] > 1) {
            if (!mapColors.hasOwnProperty(value)) {
                mapColors[value] = getColor();
            }
            arrRanges[i].SetFillColor(mapColors[value]);
        } else {
            arrRanges[i].SetFillColor(whiteFill);
        }
    }
})();

Mit diesem Makro erhalten wir das Folgende:

ONLYOFFICE macro highlight duplicates

Beispiel 2

Dieses Makro findet die nächste verfügbare leere Zeile in einem Arbeitsblatt. Wir haben dieses VBA-Makro als Beispiel genommen und dieses Skript erstellt:

(function()
{
    // Getting the active sheet
    var activeSheet = Api.ActiveSheet;
    // Minimum row index
    var indexRowMin = 0;
    // Maximum row index
    var indexRowMax = 1048576;
    // Column 'A'
    var indexCol = 0;
    // Row index for empty cell search
    var indexRow = indexRowMax;
    for (; indexRow >= indexRowMin; --indexRow) {
        // Getting the cell
        var range = activeSheet.GetRangeByNumber(indexRow, indexCol);
        // Checking the value
        if (range.GetValue() && indexRow !== indexRowMax) {
            range = activeSheet.GetRangeByNumber(indexRow + 1, indexCol);
            range.Select();
            break;
        }
    }
})();

Mit diesem Code können Sie die nächste leere Zeile auswählen. In einer der nächsten Versionen wird auch Scrollen verfügbar.

Hilfe zu Makros erhalten

Wenn Sie Hilfe beim Schreiben eines Makros benötigen oder die notwendige Methode in unserer API nicht erhältlich ist, melden Sie das Problem auf GitHub.

Nützliche Links

ONLYOFFICE auf GitHub

Artikel über die Erstellung von Plugins. Jetzt lesen>>

Beispiel eines Plugins: Füllen Sie die Zellen mit Farbe und lassen Sie Ihr Arbeitsblatt einem Bild werden. Probieren Sie es aus>>