Uso de Marcadores Inteligentes

Introducción

Hoja de cálculo de diseño y Marcadores inteligentes

Las hojas de cálculo de diseñador son archivos de Excel estándar que contienen formato visual, fórmulas y marcadores inteligentes. Pueden contener marcadores inteligentes que hacen referencia a una o más fuentes de datos, como información de un proyecto e información para contactos relacionados. Los marcadores inteligentes se escriben en las celdas donde desea información.

Todos los marcadores inteligentes comienzan con &=. Un ejemplo de un marcador de datos es &=Party.FullName. Si el marcador de datos resulta en más de un elemento, por ejemplo, una fila completa, entonces las filas siguientes se mueven automáticamente para dejar espacio para la nueva información. De esta forma, los subtotales y totales se pueden colocar en la fila inmediatamente después del marcador de datos para realizar cálculos basados en los datos insertados. Para realizar cálculos en las filas insertadas, use fórmulas dinámicas.

Los marcadores inteligentes consisten en las partes de fuente de datos y nombre del campo para la mayoría de la información. También se puede enviar información especial con variables y matrices de variables. Las variables siempre llenan solo una celda, mientras que las matrices de variables pueden llenar varias. Utilice solo un marcador de datos por celda. Los marcadores inteligentes no utilizados se eliminan.

Un marcador inteligente también puede contener parámetros. Los parámetros le permiten modificar cómo se organiza la información. Se agregan al final del marcador inteligente entre paréntesis como una lista separada por comas.

Opciones de Marcador Inteligente

&=DataSource.FieldName &=[Data Source].[Field Name] &=$VariableName &=$VariableArray &==DynamicFormula &=&=RepeatDynamicFormula

Parámetros

Se permiten los siguientes parámetros:

  • noadd - No agregar filas adicionales para ajustar los datos.
  • skip:n - Omitir n filas por cada fila de datos.
  • ascendente:n o descendente:n - Ordena los datos en marcadores inteligentes. Si n es 1, entonces la columna es la primera clave del ordenador. Los datos se ordenan después de procesar la fuente de datos. Por ejemplo: &=Table1.Field3(ascendente:1).
  • horizontal - Escribir datos de izquierda a derecha, en lugar de arriba a abajo.
  • numérico - Convertir texto a número si es posible.
  • shift - Desplaza hacia abajo o hacia la derecha, creando filas o columnas adicionales para ajustar los datos. El parámetro de cambio funciona de la misma manera que en Microsoft Excel. Por ejemplo en Microsoft Excel, cuando seleccionas un rango de celdas, haces clic con el botón derecho y seleccionas Insertar y especificas desplazar celdas hacia abajo, desplazar celdas hacia la derecha y otras opciones. En resumen, el parámetro de cambio cumple la misma función para los marcadores inteligentes verticales/normales (de arriba a abajo) o horizontales (de izquierda a derecha).
  • bean - Indica que la fuente de datos es un POJO simple. Solo compatible en la API de Java.

Los parámetros noadd y skip se pueden combinar para insertar datos en filas alternas. Debido a que la plantilla se procesa de abajo hacia arriba, debe agregar noadd en la primera fila para evitar que se inserten filas adicionales antes de la fila alternada.

Si tiene varios parámetros, sepárelos con una coma, pero sin espacio: parámetroA, parámetroB, parámetroC

Las siguientes capturas de pantalla muestran cómo insertar datos en cada otra fila.

todo:image_alt_text

se convierte en…

todo:image_alt_text

Fórmulas dinámicas

Las fórmulas dinámicas te permiten insertar fórmulas de Excel en celdas incluso cuando la fórmula hace referencia a filas que se insertarán durante el proceso de exportación. Las fórmulas dinámicas pueden repetirse para cada fila insertada o usar solo la celda donde se coloca el marcador de datos.

Las fórmulas dinámicas permiten las siguientes opciones adicionales:

  • r - Número de fila actual.
  • 2, -1 - Desplazamiento al número de fila actual.

Lo siguiente ilustra una fórmula dinámica repetida y la hoja de cálculo de Excel resultante.

todo:image_alt_text

se convierte en…

todo:image_alt_text

La celda C1 contiene la fórmula =A1B1, C2 contiene = A2B2 y C3 = A3*B3.

Es muy fácil procesar los marcadores inteligentes. El siguiente ejemplo de código muestra cómo usar fórmulas dinámicas en marcadores inteligentes. Cargamos el archivo de plantilla y creamos datos de prueba, procesamos los marcadores para llenar datos en las celdas del marcador.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(DynamicFormulas.class) + "SmartMarkers/";
//set the file path of designer spreadsheet containing smart markers
String designerFile = dataDir + "templateDynamicFormulas.xlsx";
// Create the relevant data listfor the AnswerData object
ArrayList<AnswerData> dataList = new ArrayList<>();
dataList.add(new AnswerData(100.00, 2));
dataList.add(new AnswerData(75.25, 3));
dataList.add(new AnswerData(25.00, 5));
if (designerFile != null)
{
// Instantiating a WorkbookDesigner object
WorkbookDesigner designer = new WorkbookDesigner();
// Open a designer spreadsheet containing smart markers
designer.setWorkbook(new Workbook(designerFile));
// Set the data source for the designer spreadsheet
designer.setDataSource("Answer", dataList);
// Process the smart markers
designer.process();
}
public class AnswerData
{
private double price;
private int amount;
public AnswerData(double priceValue, int amountValue)
{
this.price = priceValue;
this.amount = amountValue;
}
public double getPrice()
{
return price;
}
public void setPrice(double price)
{
this.price = price;
}
public int getAmount()
{
return amount;
}
public void setAmount(int amount)
{
this.amount = amount;
}
}

Usar Arrays Variables

El siguiente código de ejemplo muestra cómo utilizar matrices de variables en Smart Markers. Colocamos un marcador de matriz de variables en la celda A1 de la primera hoja de cálculo del libro de trabajo dinámicamente, que contiene una cadena de valores que establecemos para el marcador, procesamos los marcadores para llenar datos en las celdas contra el marcador. Finalmente, guardamos el archivo de Excel.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(UsingVariableArray.class) + "SmartMarkers/";
// Instantiate a new Workbook designer.
WorkbookDesigner report = new WorkbookDesigner();
// Get the first worksheet of the workbook.
Worksheet w = report.getWorkbook().getWorksheets().get(0);
/*
* Set the Variable Array marker to a cell.You may also place this Smart
* Marker into a template file manually in Ms Excel and then open this
* file via Workbook.
*/
w.getCells().get("A1").putValue("&=$VariableArray");
// Set the DataSource for the marker(s).
report.setDataSource("VariableArray", new String[] { "English", "Arabic", "Hindi", "Urdu", "French" });
// Process the markers.
report.process(false);
// Save the Excel file.
report.getWorkbook().save(dataDir + "varaiblearray_out.xlsx");

Agrupación de datos

En algunos informes de Excel es posible que necesite dividir los datos en grupos para que sea más fácil de leer y analizar. Uno de los propósitos principales para dividir los datos en grupos es ejecutar cálculos (realizar operaciones de resumen) en cada grupo de registros.

Los marcadores inteligentes de Aspose.Cells te permiten agrupar datos por campos establecidos y colocar filas de resumen entre conjuntos de datos o grupos de datos. Por ejemplo, si agrupas datos por Clientes.CustomerID, puedes agregar un registro de resumen cada vez que cambie el grupo.

Parámetros

A continuación se muestran algunos parámetros de marcadores inteligentes utilizados para agrupar datos.

group:normal/merge/repeat

Soportamos tres tipos de grupos entre los que puede elegir.

  • normal - El valor del campo o campos de agrupación no se repite para los registros correspondientes en la columna; en su lugar se imprimen una vez por grupo de datos.
  • merge - El mismo comportamiento que para el parámetro normal, excepto que fusiona las celdas en los campos de agrupación para cada conjunto de grupos.
  • repeat - El valor del campo o campos de agrupación se repite para los registros correspondientes.

Por ejemplo: &=Clientes.IDCliente(grupo:merge)

skip

Salta un número específico de filas después de cada grupo.

Por ejemplo, &=Employees.EmployeeID(group:normal,skip:1)

subtotalN

Realiza una operación de resumen para un campo de datos especificado relacionado con un campo de agrupación. La N representa números del 1 al 11 que especifican la función utilizada al calcular los subtotales dentro de una lista de datos. (1=PROMEDIO, 2=CONTAR, 3=CONTARA, 4=MÁXIMO, 5=MÍNIMO,…9=SUMA, etc.) Consulta la referencia de subtotales en la ayuda de Microsoft Excel para más detalles.

El formato realmente se declara como: subtotalN:Ref donde Ref se refiere a la columna de agrupación.

Por ejemplo,

  • &=Productos.Unidades(subtotal9:Productos.IDProducto) especifica la función de resumen sobre el campo Unidades con respecto al campo IDProducto en la tabla Productos.
  • &=Tabx.Col3(subtotal9:Tabx.Col1) especifica la función de resumen sobre el campo Col3 agrupado por Col1 en la tabla Tabx.
  • &=Table1.ColumnD(subtotal9:Table1.ColumnA&Table1.ColumnB) especifica la función de resumen en el campo ColumnD agrupado por ColumnA y ColumnB en la tabla Table1.

Usar objetos anidados

Aspose.Cells admite objetos anidados en marcadores inteligentes, los objetos anidados deben ser simples.

Usamos un archivo de plantilla simple. Vea la hoja de cálculo de diseño que contiene algunos marcadores inteligentes anidados.

La primera hoja de cálculo del archivo de diseño muestra marcadores inteligentes anidados.

todo:image_alt_text

El ejemplo que sigue muestra cómo funciona esto. Ejecutar el código a continuación da como resultado la salida a continuación.

La primera hoja de cálculo del archivo de salida muestra los datos resultantes.

todo:image_alt_text

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(UsingNestedObjects.class) + "SmartMarkers/";
Workbook workbook = new Workbook(dataDir + "TestSmartMarkers.xlsx");
WorkbookDesigner designer = new WorkbookDesigner();
designer.setWorkbook(workbook);
ArrayList<Individual> list = new ArrayList<Individual>();
list.add(new Individual("John", 23, new Wife("Jill", 20)));
list.add(new Individual("Jack", 25, new Wife("Hilly", 21)));
list.add(new Individual("James", 26, new Wife("Hally", 22)));
list.add(new Individual("Baptist", 27, new Wife("Newly", 23)));
designer.setDataSource("Individual", list);
designer.process(false);
workbook.save(dataDir + "UsingNestedObjects_out.xlsx");
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
public class Individual {
private String m_Name;
private int m_Age;
private Wife m_Wife;
public Individual(String name, int age, Wife wife) {
this.m_Name = name;
this.m_Age = age;
this.m_Wife = wife;
}
public String getName() {
return m_Name;
}
public int getAge() {
return m_Age;
}
public Wife getWife() {
return m_Wife;
}
}

Usando una Lista Genérica como Objeto Anidado

Ahora Aspose.Cells también admite el uso de una lista genérica como un objeto anidado. Consulte la captura de pantalla del archivo de Excel de salida generado con el siguiente código. Como se puede ver en la captura de pantalla, un objeto Teacher contiene múltiples objetos estudiantes anidados.

todo:image_alt_text

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(UsingGenericList.class) + "SmartMarkers/";
// Create a designer workbook
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
worksheet.getCells().get("A1").putValue("Teacher Name");
worksheet.getCells().get("A2").putValue("&=Teacher.Name");
worksheet.getCells().get("B1").putValue("Teacher Age");
worksheet.getCells().get("B2").putValue("&=Teacher.Age");
worksheet.getCells().get("C1").putValue("Student Name");
worksheet.getCells().get("C2").putValue("&=Teacher.Students.Name");
worksheet.getCells().get("D1").putValue("Student Age");
worksheet.getCells().get("D2").putValue("&=Teacher.Students.Age");
// Apply Style to A1:D1
Range range = worksheet.getCells().createRange("A1:D1");
Style style = workbook.createStyle();
style.getFont().setBold(true);
style.setForegroundColor(Color.getYellow());
style.setPattern(BackgroundType.SOLID);
StyleFlag flag = new StyleFlag();
flag.setAll(true);
range.applyStyle(style, flag);
// Initialize WorkbookDesigner object
WorkbookDesigner designer = new WorkbookDesigner();
// Load the template file
designer.setWorkbook(workbook);
ArrayList<Teacher> list = new ArrayList<>();
// Create the relevant student objects for the Teacher object
ArrayList<Person> students = new ArrayList<>();
students.add(new Person("Chen Zhao", 14));
students.add(new Person("Jamima Winfrey", 18));
students.add(new Person("Reham Smith", 15));
// Create a Teacher object
Teacher h1 = new Teacher("Mark John", 30, students);
// Create the relevant student objects for the Teacher object
students = new ArrayList<>();
students.add(new Person("Karishma Jathool", 16));
students.add(new Person("Angela Rose", 13));
students.add(new Person("Hina Khanna", 15));
// Create a Teacher object
Teacher h2 = new Teacher("Masood Shankar", 40, students);
// Add the objects to the list
list.add(h1);
list.add(h2);
// Specify the DataSource
designer.setDataSource("Teacher", list);
// Process the markers
designer.process();
// Autofit columns
worksheet.autoFitColumns();
// Save the Excel file.
designer.getWorkbook().save(dataDir + "UsingGenericList_out.xlsx");
package AsposeCellsExamples.SmartMarkers;
import java.util.ArrayList;
public class Teacher extends Person {
public Teacher(String name, int age, ArrayList<Person> students) {
super(name, age);
// TODO Auto-generated constructor stub\
m_Students = students;
}
private ArrayList<Person> m_Students;
public ArrayList<Person> getStudents() {
return m_Students;
}
}
package AsposeCellsExamples.SmartMarkers;
public class Person {
private String m_Name;
private int m_Age;
public Person(String name, int age) {
this.m_Name = name;
this.m_Age = age;
}
public String getName() {
return m_Name;
}
public int getAge() {
return m_Age;
}
}

Usar la propiedad HTML de Marcadores Inteligentes

The following sample code explains the use of the HTML property of the Smart Markers. When it will be processed, it will show “World” in “Hello World” as bold because of HTML <b> tag.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(UsingHTMLProperty.class) + "SmartMarkers/";
Workbook workbook = new Workbook();
WorkbookDesigner designer = new WorkbookDesigner();
designer.setWorkbook(workbook);
workbook.getWorksheets().get(0).getCells().get("A1").putValue("&=$VariableArray(HTML)");
designer.setDataSource("VariableArray",
new String[] { "Hello <b>World</b>", "Arabic", "Hindi", "Urdu", "French" });
designer.process();
workbook.save(dataDir + "UHProperty-out.xls");

Recibir notificaciones mientras se fusionan datos con Marcadores Inteligentes

A veces, puede ser necesario recibir notificaciones sobre la referencia de celda o el marcador inteligente particular que se está procesando antes de la finalización. Esto se puede lograr usando la propiedad WorkbookDesigner.CallBack y ISmartMarkerCallBack

Para el código de ejemplo y la explicación detallada, consulte este artículo.