Use o método attachEvent para tratar eventos em seu código de macro
À medida que atualizamos continuamente nossos editores e aprimoramos sua funcionalidade, nos esforçamos para fornecer aos nossos usuários a capacidade de adaptá-los às suas necessidades específicas. Uma das poderosas ferramentas de personalização disponíveis são as macros do ONLYOFFICE. Nesta postagem do blog, apresentaremos o método attachEvent e explicar como ele funciona com eventos em seu código de macro. O script que usaremos executará duas macros separadas em uma única execução.
Sobre o método attachEvent
Esse método escuta o evento especificado e chama a função de retorno de chamada quando o evento é acionado, o que nos permite executar um script adicional dentro desse retorno de chamada. Aqui está um exemplo da implementação usando o evento 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());
});
Uso do método attachEvent para executar duas macros em uma única execução
Na primeira parte do nosso script, usaremos a macro Import CSV para importar dados de um arquivo CSV externo e inseri-los em uma tabela. Na segunda parte, executada dentro do retorno de chamada, calcularemos todos os valores em uma coluna específica e exibiremos o resultado.
Portanto, primeiro importamos o CSV externo e inserimos os dados na tabela:
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;
}
}
Em seguida, introduzimos a função calculateSum() que calculará os valores no intervalo selecionado:
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
}
});
}
Em seguida, invocamos a função LoadFile e executamos o método attachEvent, que ficará atento a qualquer alteração na planilha. Quando ocorrer uma alteração, a função calculateSum() será executada na chamada de retorno:
LoadFile();
// Attach event to recalculate sum when cells change
Api.attachEvent("onWorksheetChange", function() {
calculateSum();
});
No final da nossa macro, executamos a função asc_calculate para recarregar a planilha e exibir o resultado do cálculo na célula selecionada:
// Update the cell B17 with the calculated sum
let reload = setInterval(function() {
Api.asc_calculate(Asc.c_oAscCalculateType.All);
result.SetValue(`The sum: ${sum}`);
});
O código completo da macro é o seguinte:
(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}`);
});
Agora vamos executar a macro e ver como ela funciona!
No reino do ONLYOFFICE, sempre nos esforçamos para aumentar a flexibilidade e a versatilidade do nosso produto. As macros do ONLYOFFICE são uma ferramenta excelente que permite personalizar a funcionalidade e atender às suas necessidades específicas. Nossa extensa biblioteca de métodos de API, que é constantemente atualizado, permite que você crie suas próprias soluções.
Nós encorajamos você a aproveitar este recurso e criar suas próprias macros. Se você tiver alguma dúvida ou macros para compartilhar, não hesite em nos contatar. Nós damos boas-vindas à discussão e colaboração. Boa sorte em seus esforços exploratórios!