Verwenden Sie die Methode attachEvent, um Ereignisse in Ihrem Makrocode zu verarbeiten
Da wir unsere Editoren kontinuierlich aktualisieren und ihre Funktionalität verbessern, sind wir bestrebt, unseren Benutzern die Möglichkeit zu geben, sie genau an ihre Bedürfnisse anzupassen. Eines der leistungsstarken verfügbaren Anpassungstools sind ONLYOFFICE-Makros. In diesem Blogbeitrag stellen wir die Methode attachEvent vor und erklären, wie sie mit Ereignissen in Ihrem Makrocode funktioniert. Das von uns verwendete Skript führt zwei separate Makros in einer einzigen Ausführung aus.
Was ist die attachEvent-Methode?
Diese Methode wartet auf das angegebene Ereignis und ruft die Callback-Funktion auf, wenn das Ereignis ausgelöst wird. Dadurch können wir innerhalb dieses Callbacks ein zusätzliches Skript ausführen. Hier ist ein Beispiel für die Implementierung mit dem Ereignis onWorksheetChange:
var oWorksheet = Api.GetActiveSheet();
var oRange = oWorksheet.GetRange("A1");
oRange.SetValue("1");
Api.attachEvent("onWorksheetChange", function(oRange){
console.log("onWorksheetChange");
console.log(oRange.GetAddress());
});
Verwenden der Methode attachEvent zum Ausführen von zwei Makros in einem Durchgang
Im ersten Teil unseres Skripts verwenden wir das Makro “CSV importieren“, um Daten aus einer externen CSV-Datei zu importieren und in eine Tabelle einzufügen. Im zweiten Teil, der innerhalb des Rückrufs ausgeführt wird, berechnen wir alle Werte in einer bestimmten Spalte und zeigen das Ergebnis an.
Also importieren wir zuerst die externe CSV und fügen die Daten in die Tabelle ein:
const oWorksheet = Api.GetActiveSheet();
const oRange = oWorksheet.GetRange("B2:B16");// set the range for calculations
const result = Api.GetActiveSheet().GetRange("B17");// set the cell to display the result
let sum = 0;
function LoadFile() {
$.ajax({
url: 'pathToCsVfile',
dataType: 'text',
}).done(successFunction);
}
function successFunction(data) {
const arrAllRows = data.split(/\r?\n|\r/);
let i = 1;
let j = 1;
for (let singleRow = 0; singleRow < arrAllRows.length; singleRow++) {
const rowCells = arrAllRows[singleRow].split(',');
for (let rowCell = 0; rowCell < rowCells.length; rowCell++) {
oWorksheet.GetCells(i, j).SetValue(rowCells[rowCell]);
j += 1;
}
i += 1;
j = 1;
}
}
Dann führen wir die Funktion calculateSum() ein, die die Werte im ausgewählten Bereich berechnet:
function calculateSum() {
sum = 0; // Reset the sum
oRange.ForEach(function(cell) { // Loop over all cells in the range
const value = cell.GetValue();
if (!isNaN(parseFloat(value))) {
sum += parseFloat(value); // Add the cell's numeric value to the sum
}
});
}
Als nächstes rufen wir die Funktion LoadFile auf und führen die Methode attachEvent aus, die auf Änderungen im Arbeitsblatt wartet. Wenn eine Änderung auftritt, wird die Funktion calculateSum() innerhalb des Rückrufs ausgeführt:
LoadFile();
// Attach event to recalculate sum when cells change
Api.attachEvent("onWorksheetChange", function() {
calculateSum();
});
Am Ende unseres Makros führen wir die Funktion asc_calculate aus, um die Tabelle neu zu laden und das Berechnungsergebnis in der ausgewählten Zelle anzuzeigen:
// Update the cell B17 with the calculated sum
let reload = setInterval(function() {
Api.asc_calculate(Asc.c_oAscCalculateType.All);
result.SetValue(`The sum: ${sum}`);
});
Der gesamte Makrocode lautet wie folgt:
(function() {
const oWorksheet = Api.GetActiveSheet();
const oRange = oWorksheet.GetRange("B2:B16");// set the range for calculations
const result = Api.GetActiveSheet().GetRange("B17");// set the cell to display the result
let sum = 0;
function LoadFile() {
$.ajax({
url: 'pathToCsVfile',
dataType: 'text',
}).done(successFunction);
}
function successFunction(data) {
const arrAllRows = data.split(/\r?\n|\r/);
let i = 1;
let j = 1;
for (let singleRow = 0; singleRow < arrAllRows.length; singleRow++) {
const rowCells = arrAllRows[singleRow].split(',');
for (let rowCell = 0; rowCell < rowCells.length; rowCell++) {
oWorksheet.GetCells(i, j).SetValue(rowCells[rowCell]);
j += 1;
}
i += 1;
j = 1;
}
}
function calculateSum() {
sum = 0; // Reset the sum
oRange.ForEach(function(cell) { // Loop over all cells in the range
const value = cell.GetValue();
if (!isNaN(parseFloat(value))) {
sum += parseFloat(value); // Add the cell's numeric value to the sum
}
});
}
LoadFile();
// Attach event to recalculate sum when cells change
Api.attachEvent("onWorksheetChange", function() {
calculateSum();
});
// Update the cell B17 with the calculated sum
let reload = setInterval(function() {
Api.asc_calculate(Asc.c_oAscCalculateType.All);
result.SetValue(`The sum: ${sum}`);
});
})();
Lassen Sie uns jetzt das Makro ausführen und sehen, wie es funktioniert!
In ONLYOFFICE sind wir stets bestrebt, die Flexibilität und Vielseitigkeit unseres Produkts zu verbessern. ONLYOFFICE-Makros sind ein hervorragendes Tool, mit dem Sie die Funktionalität anpassen und auf Ihre spezifischen Anforderungen eingehen können. Unsere umfangreiche Bibliothek mit API-Methoden, die ständig aktualisiert wird, ermöglicht es Ihnen, Ihre eigenen Lösungen zu entwickeln.
Wir möchten Sie ermutigen, diese Ressource zu nutzen und Ihre eigenen Makros zu erstellen. Wenn Sie Fragen haben oder Makros weitergeben möchten, zögern Sie nicht, uns zu kontaktieren. Wir freuen uns über Diskussionen und Zusammenarbeit. Viel Glück bei Ihren Erkundungsbemühungen!
Erstellen Sie Ihr kostenloses ONLYOFFICE-Konto
Öffnen und bearbeiten Sie gemeinsam Dokumente, Tabellen, Folien, Formulare und PDF-Dateien online.