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.
devient…
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.
devient…
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.
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.
// 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.
// 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.