Jump to content

Macros/Calc/ba023/es

From The Document Foundation Wiki
This page is a translated version of the page Macros/Calc/ba023 and the translation is 100% complete.


Resumen:

Esta página proporciona un procedimiento de LibreOffice Basic LibreOffice que clasifica una tabla basada en los valores de una columna. Es un ejemplo extraído del Capítulo 13 ("Calc como base de datos") de la guía de Calc 7.0.

Descripción

En una macro de Calc, los datos dentro de un intervalo se ordenan llamando al método sort () en el objeto de intervalo. Cuando se llama a una operación de clasificación en un intervalo, se pasa una matriz de propiedades conocidas como un "SortDesc" al método "sort". Contenidos dentro de las propiedades de un descriptor están SortFields, que son estructuras que informan a Calc cómo ordenar un intervalo de acuerdo con los datos contenidos dentro de una de sus filas o columnas.

Como ejemplo, la siguiente macro clasifica las calificaciones de unos alumnos en el intervalo A1:H11 de la Hoja1 según la media (columna H) en orden descendente. La hoja de cálculo para la descarga, contiene dicha hoja de calificaciones. Atención: el valor del índice de campo (Field) de la variable Sortfield comienza en la posición relativa al intervalo seleccionado. Por ejemplo, si el intervalo seleccionado abarca desde C1 a H11, la columna C tiene el índice de campo 0.


Código

Sub SortAverageGrade
  Dim oSheet
  Dim oRange
  Dim oSortFields(0) as new com.sun.star.util.SortField
  Dim oSortDesc(0) as new com.sun.star.beans.PropertyValue

  oSheet = ThisComponent.Sheets(0)
  REM Establecer el intervalo que se va a ordenar
  oRange = oSheet.getCellRangeByName("A1:H11")

  REM ordenar en función de la columna H (posición 7 dentro del intervalo, con índice 0)  en orden descendente
  oSortFields(0).Field = 7
  oSortFields(0).SortAscending = FALSE

  REM Establecer los campos de ordenación
  oSortDesc(0).Name = "SortFields"
  oSortDesc(0).Value = oSortFields()
  
  REM Ordenar el intevalo
  oRange.Sort(oSortDesc())
End Sub

Este documento de Calc incluye la macro en LibreOffice Basic