Dos macros de ONLYOFFICE: resalte los duplicados y vaya a la siguiente fila vacía
Nuestros usuarios nos preguntaron cómo recrear algunas macros de VBA que estaban usando en Excel. En este post mostraremos cómo hacerlo con dos ejemplos simples.
Las macros de ONLYOFFICE utilizan la sintaxis del lenguaje JavaScript y la notación de scripts de la API del Constructor de Documentos de ONLYOFFICE (ONLYOFFICE Document Builder). Esto significa que no podrá usar las macros de VBA hasta que las recree usando JavaScript.
Elegimos usar JavaScript para nuestras macros porque:
- es multiplataforma,
- es realmente fácil de usar,
- puede usar el código que escribió como una macro o como un plugin.
Además, nuestras macros están seguras porque no tienen ningún acceso al sistema. Son sólo el código JS que se ejecuta por los editores en la misma ventana.
- En el editor de hojas de cálculo abra la pestaña Extensiones y haga clic en Macros.
- Haga clic en “Nuevo” en la ventana que apareció.
- Consulte la documentación de la API para escribir el script.
Vamos a escribir una macro para resaltar los duplicados en el área seleccionada con diferentes colores para reconocer rápidamente los valores duplicados. Usaremos esta simple macro de VBA como base.
Aquí está el script resultante con comentarios para que entiende cómo se hace. Los colores se determinan en el código de la macro.
(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);
}
}
})();
Esto es lo que obtenemos con esta macro:
Esta macro encuentra la siguiente fila en blanco disponible en una hoja de trabajo. Tomamos esta macro de VBA como ejemplo y creamos este script:
(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;
}
}
})();
Este código le ayudará a seleccionar la siguiente fila vacía (añadiremos el desplazamiento en una de las próximas versiones).
Tenga en cuenta que la macro salteará cualquier espacio en blanco que esté entre sus datos pero no al final de los mismos.
Si necesita ayuda para escribir macros o el método que necesita está ausente de nuestra API, publique un asunto en GitHub.
ONLYOFFICE en GitHub
Artículo sobre cómo empezar a escribir plugins. Lea ahora>>
Ejemplo de plugin: rellene las celdas con color y convierta su hoja de trabajo en una imagen. Compruébelo>>
Crea tu cuenta gratuita de ONLYOFFICE
Visualiza, edita y colabora en documentos, hojas, diapositivas, formularios y archivos PDF en línea.