Utilisation des Smart Markers

Introduction

Feuille de calcul du Concepteur & Marqueurs intelligents

Les feuilles de calcul de conception sont des fichiers Excel standards qui contiennent une mise en forme visuelle, des formules et des smart markers. Ils peuvent contenir des smart markers qui font référence à une ou plusieurs sources de données, telles que des informations provenant d’un projet et des informations pour des contacts connexes. Les smart markers sont écrits dans les cellules où vous souhaitez des informations.

Tous les smart markers commencent par &=. Un exemple d’un marqueur de données est &=Party.FullName. Si le marqueur de données donne lieu à plus d’un élément, par exemple, une ligne complète, les lignes suivantes sont déplacées vers le bas automatiquement pour faire de la place pour les nouvelles informations. Ainsi, les sous-totaux et les totaux peuvent être placés sur la ligne immédiatement après le marqueur de données pour effectuer des calculs basés sur les données insérées. Pour effectuer des calculs sur les lignes insérées, utilisez les formules dynamiques.

Les marqueurs intelligents se composent des parties source de données et nom de champ pour la plupart des informations. Des informations spéciales peuvent également être transmises avec des variables et des tableaux de variables. Les variables remplissent toujours une seule cellule tandis que les tableaux de variables peuvent en remplir plusieurs. Utilisez un seul marqueur de données par cellule. Les marqueurs intelligents inutilisés sont supprimés.

Un smart marker peut également contenir des paramètres. Les paramètres vous permettent de modifier la façon dont les informations sont disposées. Ils sont ajoutés à la fin du marqueur de données entre parenthèses sous forme d’une liste séparée par des virgules.

Options de marqueur intelligent

&=DataSource.FieldName &=[Source de donnée].[Nom du champ] &=$NomVariable &=$TableauVariable &==DynamicFormula &=&=RepeatDynamicFormula

Paramètres

Les paramètres suivants sont autorisés :

  • noadd - Ne pas ajouter de lignes supplémentaires pour s’adapter aux données.
  • skip:n - Ignorer n lignes pour chaque ligne de données.
  • *ascendant:n ou descendant:n - Trier les données dans les smart markers. Si n vaut 1, la colonne est la première clé du trieur. Les données sont triées après le traitement de la source de données. Par exemple : &=Table1.Champ3(ascendant:1).
  • horizontal - Écrire les données de gauche à droite, au lieu du haut en bas.
  • numérique - Convertir le texte en nombre si possible.
  • décalage - Décaler vers le bas ou vers la droite, en créant des lignes ou des colonnes supplémentaires pour s’adapter aux données. Le paramètre de décalage fonctionne de la même manière que dans Microsoft Excel. Par exemple dans Microsoft Excel, lorsque vous sélectionnez une plage de cellules, faites un clic droit et sélectionnez Insérer et spécifiez décaler les cellules vers le bas, décaler les cellules vers la droite et d’autres options. En résumé, le paramètre de décalage remplit la même fonction pour les smart markers verticaux/normaux (de haut en bas) ou horizontaux (de gauche à droite).
  • bean - Indique que la source de données est un simple POJO. Uniquement pris en charge dans l’API Java.

Les paramètres noadd et skip peuvent être combinés pour insérer des données sur des lignes alternées. Comme le modèle est traité de bas en haut, vous devez ajouter noadd sur la première ligne pour éviter l’insertion de lignes supplémentaires avant la ligne alternative.

Si vous avez plusieurs paramètres, séparez-les par une virgule, mais sans espace : paramètreA,paramètreB,paramètreC

Les captures d’écran suivantes montrent comment insérer des données sur chaque autre ligne.

todo:image_alt_text

devient…

todo:image_alt_text

Formules dynamiques

Les formules dynamiques vous permettent d’insérer des formules Excel dans des cellules même lorsque la formule fait référence à des lignes qui seront insérées lors du processus d’exportation. Les formules dynamiques peuvent se répéter pour chaque ligne insérée ou utiliser uniquement la cellule où le marqueur de données est placé.

Les formules dynamiques permettent les options supplémentaires suivantes :

  • r - Numéro de ligne actuelle.
  • 2, -1 - Décalage par rapport au numéro de ligne actuelle.

L’exemple suivant illustre une formule dynamique répétitive et la feuille de calcul Excel résultante.

todo:image_alt_text

devient…

todo:image_alt_text

La cellule C1 contient la formule =A1B1, C2 contient = A2B2 et C3 = A3*B3.

Il est très facile de traiter les marqueurs intelligents. L’exemple de code suivant montre comment utiliser des formules dynamiques dans les marqueurs intelligents. Nous chargeons le fichier modèle et créons des données de test, traitons les marqueurs pour remplir les données dans les cellules par rapport au marqueur.

// 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;
}
}

Utilisation de tableaux de variables

Le code d’exemple suivant montre comment utiliser des tableaux de variables dans les marqueurs intelligents. Nous plaçons un marqueur de tableau de variables dans la cellule A1 de la première feuille de calcul du classeur de manière dynamique, qui contient une chaîne de valeurs que nous définissons pour le marqueur, traitons les marqueurs pour remplir les données dans les cellules par rapport au marqueur. Enfin, nous sauvegardons le fichier 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");

Regroupement de données

Dans certains rapports Excel, vous devrez peut-être fractionner les données en groupes pour les rendre plus faciles à lire et à analyser. L’un des principaux objectifs de la division des données en groupes est d’effectuer des calculs (effectuer des opérations de synthèse) sur chaque groupe d’enregistrements.

Les marqueurs intelligents Aspose.Cells vous permettent de regrouper les données par des champs définis et de placer des lignes de synthèse entre les ensembles de données ou les groupes de données. Par exemple, si vous regroupez les données par Clients.CustomerID, vous pouvez ajouter un enregistrement de synthèse à chaque fois que le groupe change.

Paramètres

Voici quelques paramètres de marqueurs intelligents utilisés pour regrouper les données.

group:normal/merge/repeat

Nous supportons trois types de regroupement entre lesquels vous pouvez choisir.

  • normal - La valeur du champ de regroupement ne se répète pas pour les enregistrements correspondants dans la colonne; au lieu de cela, elles sont imprimées une fois par groupe de données.
  • fusion - Le même comportement que pour le paramètre normal, sauf qu’il fusionne les cellules dans le champ de regroupement pour chaque jeu de groupe.
  • répéter - La valeur du champ de regroupement est répétée pour les enregistrements correspondants.

Par exemple: &=Clients.ClientID(group:merge)

skip

Ignore un nombre spécifique de lignes après chaque groupe.

Par exemple &=Employés.EmployeeID(groupe:normal,saute:1)

subtotalN

Effectue une opération de synthèse pour des données de champ spécifié liées à un champ de regroupement. N représente des nombres entre 1 et 11 qui spécifient la fonction utilisée lors du calcul des sous-totaux dans une liste de données. (1=MOYENNE, 2=NB, 3=NBVAL, 4=MAX, 5=MIN,…9=SUM etc.) Référez-vous à la référence des sous-totaux dans l’aide de Microsoft Excel pour plus de détails.

Le format est en fait stipulé comme suit : subtotalN:Réf où Réf correspond au champ de regroupement.

Par exemple,

  • &=Produits.Unités(subtotal9:Produits.IDProduit) spécifie la fonction de synthèse sur le champ Unités par rapport au champ IDProduit dans la table Produits.
  • &=Tabx.Col3(subtotal9:Tabx.Col1) spécifie la fonction de synthèse sur le champ Col3 groupé par Col1 dans la table Tabx.
  • &=Table1.ColonneD(sous-total9:Table1.ColonneA&Table1.ColonneB) spécifie la fonction de synthèse sur le champ ColonneD regroupé par ColonneA et ColonneB dans la table Table1.

Utilisation d’objets imbriqués

Aspose.Cells prend en charge les objets imbriqués dans les marqueurs intelligents, les objets imbriqués doivent être simples.

Nous utilisons un fichier de modèle simple. Consultez la feuille de calcul du concepteur qui contient certains marqueurs intelligents imbriqués.

La première feuille de calcul du fichier modèle montrant des marqueurs intelligents imbriqués.

todo:image_alt_text

L’exemple qui suit montre comment cela fonctionne. L’exécution du code ci-dessous donne le résultat ci-dessous.

La première feuille de calcul du fichier de sortie montrant les données résultantes.

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;
}
}

Utiliser Generic List comme objet imbriqué

Aspose.Cells prend désormais également en charge l’utilisation d’une liste générique en tant qu’objet imbriqué. Veuillez vérifier la capture d’écran du fichier Excel de sortie généré avec le code suivant. Comme vous pouvez le voir dans la capture d’écran, un objet Enseignant contient plusieurs objets étudiants imbriqués.

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;
}
}

Utilisation de la propriété HTML des marqueurs intelligents

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");

Recevoir des notifications lors de la fusion de données avec des marqueurs intelligents

Parfois, il peut être nécessaire de recevoir des notifications sur la référence de cellule ou le marqueur intelligent particulier en cours de traitement avant la fin. Cela peut être réalisé en utilisant la WorkbookDesigner.CallBack propriété et ISmartMarkerCallBack.

Pour un exemple de code et une explication détaillée, veuillez consulter cet article.