Användning av Smart Markers
Introduktion
Designer Spreadsheet & Smart Markers
Designer spreadsheets är standard Excel-filer som innehåller visuell formatering, formler och smart markers. De kan innehålla smart markers som refererar till en eller flera datakällor, såsom information från ett projekt och information för relaterade kontakter. Smart markers är skrivna i cellerna där du vill ha information.
Alla smart markers börjar med &=. Ett exempel på en datamarkör är &=Party.FullName. Om datamarkören resulterar i mer än en post, till exempel en komplett rad, flyttas de följande raderna ned automatiskt för att göra plats för den nya informationen. Därmed kan delsummer och totaler placeras på raden omedelbart efter datamarkören för att göra beräkningar baserade på infogad data. För att göra beräkningar på de infogade raderna, använd dynamiska formler.
Smart markers består av datakälla och fältnamn för de flesta uppgifter. Speciell information kan också skickas med variabler och variabelmatriser. Variabler fyller alltid bara en cell medan variabelmatriser kan fylla flera. Använd endast en datamarkör per cell. Oanvända smart markers tas bort.
En smart marker kan också innehålla parametrar. Parametrar gör att du kan ändra hur informationen är utformad. De läggs till i slutet av smart markern inom parentes som en kommaseparerad lista.
Smart Marker-alternativ
&=DataSource.FieldName &=[Data Source].[Field Name] &=$VariableName &=$VariableArray &==Dynamisk formula &=&=UpprepaDynamiskFormula
Parametrar
Följande parametrar är tillåtna:
- noadd - Lägg inte till extra rader för att passa data.
- skip:n - Hoppa över n antal rader för varje datarad.
- *ascending:n eller descending:n - Sortera data i smarta markörer. Om n är 1, är kolumnen den första nyckeln för sorteraren. Data sorteras efter bearbetning av datakällan. Till exempel: &=Tabell1.Fält3(ascending:1).
- horisontell - Skriv data från vänster till höger i stället för uppifrån och ner.
- numerisk - Konvertera text till nummer om möjligt.
- shift - Flytta nedåt eller åt höger, skapa extra rader eller kolumner för att passa data. Shift-parametern fungerar på samma sätt som i Microsoft Excel. Till exempel, när du väljer ett cellintervall, högerklickar och väljer Infoga och specificerar flytta celler nedåt, flytta celler åt höger och andra alternativ. Kort sagt, fyller shift-parametern samma funktion för vertikala/normala (uppifrån och ner) eller horisontella (från vänster till höger) smarta markörer.
- bean - Indikerar att datakällan är en enkel POJO. Endast stöds i Java API.
Parametrarna noadd och skip kan kombineras för att infoga data på växelvis rader. Eftersom mallen bearbetas nerifrån och upp bör du lägga till noadd på första raden för att undvika att extra rader infogas före den alternativa raden.
Om du har flera parametrar, separera dem med ett kommatecken, men inget utrymme: parameterA, parameterB, parameterC
Följande skärmbilder visar hur du infogar data på varannan rad.
blir…
Dynamiska formler
Dynamiska formler gör det möjligt att infoga Excel-formler i celler även när formeln refererar till rader som kommer att infogas under exportprocessen. Dynamiska formler kan upprepas för varje infogad rad eller använda endast den cell där datamarkören placeras.
Dynamiska formler möjliggör följande ytterligare alternativ:
- r - Nuvarande radnummer.
- 2, -1 - Förskjutning till aktuellt radnummer.
Följande illustrerar en upprepande dynamisk formel och den resulterande Excel-arket.
blir…
Cell C1 innehåller formeln =A1B1, C2 innehåller = A2B2 och C3 = A3*B3.
Det är mycket enkelt att bearbeta smarta markörer. Följande exempelkod visar hur du använder dynamiska formler i Smart Markers. Vi laddar mallfilen och skapar testdata, bearbetar markörerna för att fylla i data i cellerna mot markören.
// 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; | |
} | |
} |
Användning av variabla Arrayer
Följande exempelkod visar hur du använder variabla arrayer i Smart Markers. Vi placerar en variabel arraymarkör i cell A1 i den första kalkylbladet i arbetsboken dynamiskt som innehåller en sträng med värden som vi ställer in för markören, bearbetar markörerna för att fylla i data i cellerna mot markören. Slutligen sparar vi Excel-filen.
// 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"); |
Gruppering av data
I vissa Excel-rapporter kan du behöva bryta upp datan i grupper för att göra det lättare att läsa och analysera. Ett av de primära syftena med att bryta upp data i grupper är att köra beräkningar (utföra sammanfattande operationer) på varje grupp av poster.
Aspose.Cells smarta markörer gör det möjligt för dig att gruppera data efter inställda fält och placera sammanfattande rader mellan datasatser eller datagrupper. Till exempel, om du grupperar data efter Customers.CustomerID, kan du lägga till en sammanfattande post varje gång gruppen ändras.
Parametrar
Följande är några smarta markörsparametrar som används för att gruppera data.
group:normal/merge/repeat
Vi stödjer tre typer av grupper som du kan välja mellan.
- normal - Gruppera efter fält(s) värde upprepas inte för de motsvarande posterna i kolumnen; istället skrivs de ut en gång per datagrupp.
- merge - Samma beteende som för normalparametern, förutom att den slår samman cellerna i grupperingsfält(en) för varje gruppsats.
- repeat - Gruppera efter fält(s) värde upprepas för de motsvarande posterna.
Till exempel: &=Customers.CustomerID(group:merge)
skip
Hoppa över ett specifikt antal rader efter varje grupp.
Till exempel &=Employees.EmployeeID(group:normal,skip:1)
subtotalN
Utför en sammanfattande operation för ett specificerat fältdata relaterat till ett grupperingsfält. N står för nummer mellan 1 och 11 som anger den funktion som används vid beräkning av delsummor inom en lista över data. (1=MEDDELVÄRDE, 2=RÄKNA, 3=RÄKNAA, 4=MAX, 5=MIN,…9=SUMMA osv.) Se delsummareferensen i Microsoft Excels hjälp för ytterligare detaljer.
Formatet anges faktiskt som: delsummaN:Ref där Ref avser grupperingskolumnen.
Till exempel,
- &=Products.Units(delsumma9:Products.ProductID) anger sammanfattningsfunktion för fältet Units med avseende på fältet ProductID i tabellen Products.
- &=Tabx.Col3(delsumma9:Tabx.Col1) anger sammanfattningsfunktion för fältet Col3 grupperat efter Col1 i tabellen Tabx.
- &=Table1.ColumnD(delsumma9:Table1.ColumnA&Table1.ColumnB) anger sammanfattningsfunktion för fältet ColumnD grupperat efter ColumnA och ColumnB i tabellen Table1.
Användning av inbäddade objekt
Aspose.Cells stöder inbäddade objekt i smarta markörer, de inbäddade objekten bör vara enkla.
Vi använder en enkel mallfil. Se kalkylbladet som innehåller några inbäddade smarta markörer.
Första kalkylbladet i designmallen visar inbäddade smarta markörer.
Exemplet nedan visar hur detta fungerar. Att köra koden nedan resulterar i utdata nedan.
Första kalkylbladet i utdatafilen visar den resulterande datan.
// 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; | |
} | |
} |
Användning av generisk lista som inbäddat objekt
Aspose.Cells stödjer nu även användning av en generisk lista som ett inbäddat objekt. Var vänlig kontrollera skärmbilden av den genererade excel-filen med följande kod. Som du kan se i skärmbilden innehåller en Lärar-objekt flera inbäddade elevobjekt.
// 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; | |
} | |
} |
Användning av HTML-egenskapen hos Smart Markers
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"); |
Få meddelanden när data sammanfogas med smarta markörer
Ibland kan det vara nödvändigt att få meddelanden om cellreferensen eller den specifika Smart Markern som behandlas före slutförandet. Detta kan uppnås med hjälp av WorkbookDesigner.CallBack-egenskapen och ISmartMarkerCallBack
För exempelkod och detaljerad förklaring, se denna artikel.