Utilizzo di marcatori intelligenti

introduzione

Foglio di calcolo per designer e marcatori intelligenti

fogli di calcolo per designer sono file Excel standard che contengono formattazione visiva, formule e marcatori intelligenti. Possono contenere marcatori intelligenti che fanno riferimento a una o più origini dati, ad esempio informazioni da un progetto e informazioni per i contatti correlati. I marcatori intelligenti vengono scritti nelle celle in cui desideri informazioni.

Tutti i marcatori intelligenti iniziano con &=. Un esempio di indicatore di dati è &=Party.FullName. Se l’indicatore di dati restituisce più di un elemento, ad esempio una riga completa, le righe successive vengono spostate automaticamente verso il basso per fare spazio alle nuove informazioni. Pertanto i totali parziali e i totali possono essere posizionati sulla riga immediatamente dopo l’indicatore di dati per eseguire calcoli basati sui dati inseriti. Per eseguire calcoli sulle righe inserite, utilizzareformule dinamiche.

I marcatori intelligenti sono costituiti dafonte di dati enome del campoparti per la maggior parte delle informazioni. Informazioni speciali possono anche essere passate con variabili e array di variabili. Le variabili riempiono sempre solo una cella mentre gli array di variabili possono riempirne diverse. Utilizzare un solo marcatore di dati per cella. Gli smart marker inutilizzati vengono rimossi.

Un marcatore intelligente può anche contenere parametri. I parametri consentono di modificare la disposizione delle informazioni. Vengono aggiunti alla fine dell’indicatore intelligente tra parentesi come elenco separato da virgole.

Opzioni marcatore intelligente

&=DataSource.FieldName &=[Origine dati].[Nome campo]&=$NomeVariabile &=$VariabileArray &==DynamicFormula &=&=Ripeti Formula Dinamica

Parametri

Sono ammessi i seguenti parametri:

  • noadd - Non aggiungere righe extra per adattare i dati.
  • salta: n - Salta n numero di righe per ogni riga di dati.
  • *crescente:n o discendente:n - Ordina i dati in marcatori intelligenti. Se n è 1, la colonna è la prima chiave dell’ordinatore. I dati vengono ordinati dopo l’elaborazione dell’origine dati. Ad esempio: &=Tabella1.Campo3(crescente:1).
  • orizzontale - Scrivi i dati da sinistra a destra, invece che dall’alto verso il basso.
  • numerico - Converti testo in numero, se possibile.
  • spostare - Sposta in basso oa destra, creando righe o colonne extra per adattare i dati. Il parametro shift funziona allo stesso modo di Microsoft Excel. Ad esempio in Microsoft Excel, quando selezioni un intervallo di celle, fai clic con il pulsante destro del mouse e selezionaInserire e specificarespostare le celle verso il basso, sposta le celle a destra e altre opzioni. In breve, il parametro shift svolge la stessa funzione per gli smart marker verticali/normali (dall’alto verso il basso) o orizzontali (da sinistra a destra).
  • fagiolo - Indica che l’origine dati è un semplice POJO. Supportato solo nel Java API.

parametri noadd e skip possono essere combinati per inserire dati su righe alternate. Poiché il modello viene elaborato dal basso verso l’alto, è necessario aggiungere noadd sulla prima riga per evitare che vengano inserite righe aggiuntive prima della riga alternativa.

Se hai più parametri, separali con una virgola, ma senza spazio: parametroA,parametroB,parametroC

Gli screenshot seguenti mostrano come inserire i dati su ogni altra riga.

cose da fare:immagine_alt_testo

diventa…

cose da fare:immagine_alt_testo

Formule dinamiche

Le formule dinamiche consentono di inserire formule di Excel nelle celle anche quando la formula fa riferimento a righe che verranno inserite durante il processo di esportazione. Le formule dinamiche possono ripetersi per ogni riga inserita o utilizzare solo la cella in cui è posizionato l’indicatore di dati.

Le formule dinamiche consentono le seguenti opzioni aggiuntive:

  • r - Numero di riga corrente.
  • 2, -1 - Offset rispetto al numero di riga corrente.

Di seguito viene illustrata una formula dinamica ripetuta e il foglio di lavoro di Excel risultante.

cose da fare:immagine_alt_testo

diventa…

cose da fare:immagine_alt_testo

Cell C1 contiene la formula =A1B1, C2 contiene = A2SI2 e DO3 = LA3*SI3.

È molto facile elaborare i marcatori intelligenti. Il seguente frammento di codice mostra come è fatto.

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

Utilizzo di array di variabili

Il codice di esempio seguente mostra come utilizzare le matrici di variabili negli indicatori intelligenti. Inseriamo dinamicamente un marcatore di matrice variabile nella cella A1 del primo foglio di lavoro della cartella di lavoro che contiene una stringa di valori che impostiamo per il marcatore, elaboriamo i marcatori per riempire i dati nelle celle contro il marcatore. Infine, salviamo il file 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");

Raggruppamento dei dati

In alcuni report di Excel potrebbe essere necessario suddividere i dati in gruppi per facilitarne la lettura e l’analisi. Uno degli scopi principali per suddividere i dati in gruppi è eseguire calcoli (eseguire operazioni di riepilogo) su ogni gruppo di record.

marcatori intelligenti Aspose.Cells consentono di raggruppare i dati per set di campi e posizionare righe di riepilogo tra set di dati o gruppi di dati. Ad esempio, se si raggruppano i dati per Customers.CustomerID, è possibile aggiungere un record di riepilogo ogni volta che il gruppo cambia.

Parametri

Di seguito sono riportati alcuni parametri degli indicatori intelligenti utilizzati per raggruppare i dati.

gruppo:normale/unisci/ripeti

Supportiamo tre tipi di gruppo tra cui puoi scegliere.

  • normale - Il valore raggruppa per campo/i non viene ripetuto per i record corrispondenti nella colonna; vengono invece stampati una volta per gruppo di dati.
  • unire - Lo stesso comportamento del parametro normale, tranne per il fatto che unisce le celle nel gruppo/i campo/i per ogni gruppo impostato.
  • ripetere - Il valore raggruppa per campo/i viene ripetuto per i record corrispondenti.

Ad esempio: &=Clienti.IDCliente(gruppo:unione)

Salta

Salta un numero specifico di righe dopo ogni gruppo.

Ad esempio &=Employees.EmployeeID(group:normal,skip:1)

subtotaleN

Esegue un’operazione di riepilogo per i dati di un campo specificato relativi a un raggruppamento per campo. La N rappresenta i numeri compresi tra 1 e 11 che specificano la funzione utilizzata durante il calcolo dei subtotali all’interno di un elenco di dati. (1=MEDIA, 2=COUNT, 3=COUNTA, 4=MAX, 5=MIN,…9=SOMMA ecc.) Fare riferimento al riferimento Subtotale nella guida di Excel Microsoft per ulteriori dettagli.

Il formato in realtà indica come: subtotalN:Ref dove Ref fa riferimento al gruppo per colonna.

Per esempio,

  • &=Products.Units(subtotal9:Products.ProductID) specifica la funzione di riepilogo suUnità campo rispetto alCodice prodotto campo nelProdotti tavolo.
  • &=Tabx.Col3(subtotal9:Tabx.Col1) specifica la funzione di riepilogo suCol3 raggruppamento di campi percol.1 sul tavoloTabx.
  • &=Table1.ColumnD(subtotal9:Table1.ColumnA&Table1.ColumnB) specifica la funzione di riepilogo suColonna D raggruppamento di campi perColonna A eColonna B in tavolaTabella 1.

Utilizzo di oggetti nidificati

Aspose.Cells supporta gli oggetti nidificati nei marcatori intelligenti, gli oggetti nidificati dovrebbero essere semplici.

Usiamo un semplice file modello. Guarda il foglio di calcolo del designer che contiene alcuni marcatori intelligenti nidificati.

Il primo foglio di lavoro del file designer che mostra i marcatori intelligenti nidificati.

cose da fare:immagine_alt_testo

L’esempio che segue mostra come funziona. L’esecuzione del codice seguente comporta l’output riportato di seguito.

Il primo foglio di lavoro del file di output che mostra i dati risultanti.

cose da fare:immagine_alt_testo

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

Utilizzo di un elenco generico come oggetto nidificato

Aspose.Cells ora supporta anche l’utilizzo di un elenco generico come oggetto nidificato. Si prega di controllare lo screenshot del file excel di output generato con il seguente codice. Come puoi vedere nello screenshot, un oggetto Insegnante contiene più oggetti Studente nidificati.

cose da fare:immagine_alt_testo

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

Utilizzando la proprietà HTML di Smart Markers

Il seguente codice di esempio illustra l’utilizzo della proprietà HTML degli Smart Marker. Quando verrà elaborato, mostrerà “World” in “Hello World” in grassetto a causa di HTML <b> etichetta.

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

Ricezione di notifiche durante l’unione dei dati con i marcatori intelligenti

A volte, potrebbe essere necessario ricevere le notifiche sul riferimento della cella o sul particolare Smart Marker in fase di elaborazione prima del completamento. Ciò può essere ottenuto utilizzando ilWorkbookDesigner.CallBackproprietà eISmartMarkerCallBack

Per il codice di esempio e la spiegazione dettagliata, vedere questo articolo.