Smart import och placering av data med Smarta markörer
Introduktion
Smart markers används för att låta Aspose.Cells veta vilken information som ska placeras i en Microsoft Excel-designmall. Smarta markörer gör det möjligt att skapa mallar som endast innehåller specifik information och formatering.
Designer Spreadsheet & Smart Markers
Designer kalkylblad är standard Excel-filer som innehåller visuell formatering, formler och smarta markörer. De kan innehålla smarta markörer som refererar till en eller flera datakällor, såsom information från ett projekt och information för relaterade kontakter. Smarta markörer skrivs in i cellerna där du vill ha informationen.
Alla smarta markörer 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 följande rader ned automatiskt för att ge plats för den nya informationen. På så sätt kan delsummor och totaler placeras på raden omedelbart efter datamarkören för att göra beräkningar baserade på den infogade datan. Använd dynamiska formler för att göra beräkningar på de infogade raderna.
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.
Smarta markörer kan också innehålla parametrar. Parametrar gör det möjligt att modifiera hur informationen layoutas. De läggs till i slutet av den smarta markören inom parentes som en kommateckenavgränsad 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, då är kolumnen den första nyckeln för sorteraren. Datan sorteras efter bearbetningen av datakällan. Till exempel: &=Table1.Field3(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.
- skift - Skifta ner eller åt höger, skapa extra rader eller kolumner för att passa datan. Skiftparametern fungerar på samma sätt som i Microsoft Excel. Till exempel i Microsoft Excel när du väljer en rad med celler, högerklickar och väljer Infoga och specificerar skifta celler nedåt, skifta celler åt höger och andra alternativ. Kort sagt fyller skiftparametern samma funktion för vertikala / normala (höjd till botten) eller horisontella (vänster till höger) smarta markörer.
- kopierastil - Kopiera bascellens stil till alla celler i den kolumnen.
Parametrarna noadd och skip kan kombineras för att infoga data på växelvis rader. Eftersom mallen behandlas uppifrån och ner, bör du lägga till noadd på den första raden för att undvika att extra rader infogas före den växelvisa raden.
Om du har flera parametrar, separera dem med kommatecken, men inget mellanrum: parameterA, parameterB, parameterC
Följande skärmbilder visar hur du infogar data på varannan rad.
Mallfil | Resultatfil |
---|---|
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.
Exempelvis:
&=&=B{-1}/C{-1}~(skip:1)
I den dynamiska formelmarkören betecknar “-1” förskjutningen till den nuvarande raden i kolumn B och C respektive som kommer att ställas in för divisionsoperationen, hoppa parametern är en rad. Dessutom bör vi ange följande tecken:
"~"
som ett avskiljande tecken för att tillämpa ytterligare parametrar i dynamiska formler.
De följande skärmbilderna illustrerar en upprepande dynamisk formel och den resulterande Excel-arket.
Mallfil | Utdatafil |
---|---|
Cellen “C1” innehåller formeln = A1*B1, cellen “C2” innehåller = A2*B2 och cellen “C3” innehåller = 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-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Create directory if it is not already present. | |
bool IsExists = System.IO.Directory.Exists(dataDir); | |
if (!IsExists) | |
System.IO.Directory.CreateDirectory(dataDir); | |
//set the file path of designer spreadsheet containing smart markers | |
string designerFile = "templateDynamicFormulas.xlsx"; | |
//create your data set | |
DataSet dataset = new DataSet(); | |
DataTable dt = new DataTable("Answer"); | |
dataset.Tables.Add(dt); | |
DataColumn price = new DataColumn("Price", typeof(double)); | |
DataColumn amount = new DataColumn("Amount", typeof(int)); | |
dt.Columns.Add(price); | |
dt.Columns.Add(amount); | |
dt.Rows.Add(100.00, 2); | |
dt.Rows.Add(75.25, 3); | |
dt.Rows.Add(25.00, 5); | |
if (designerFile != null) | |
{ | |
// Instantiating a WorkbookDesigner object | |
WorkbookDesigner designer = new WorkbookDesigner(); | |
// Open a designer spreadsheet containing smart markers | |
designer.Workbook = new Workbook(designerFile); | |
// Set the data source for the designer spreadsheet | |
designer.SetDataSource(dataset); | |
// Process the smart markers | |
designer.Process(); | |
} |
Användning av variabla Arrayer
Följande exempelkod visar hur man använder variabla matriser i Smart Markers. Vi placerar en variabel matrismarkör i cell A1 i den första kalkylbladet i arbetsboken dynamiskt som innehåller en sträng av värden som vi sätter för markören, bearbetar markörerna för att fylla data i cellerna mot markören. Till sist sparar vi Excelfilen.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Instantiate a new Workbook designer. | |
WorkbookDesigner report = new WorkbookDesigner(); | |
// Get the first worksheet of the workbook. | |
Worksheet w = report.Workbook.Worksheets[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.Cells["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.Workbook.Save(dataDir + "output.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 att gruppera data efter fält och placera sammanfattande rader mellan databaser eller datagrupper. Till exempel, om data grupperas efter Kunder.KundID, kan du lägga till en sammanfattande post varje gång gruppen ändras.
Parametrar
Här är några av de 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
Hoppar ett angivet 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(subtotal9:Table1.ColumnA&Table1.ColumnB) specificerar summeringsfunktion för fältet ColumnD grupperat efter ColumnA och ColumnB i tabellen Table1.
Det här exemplet visar några av gruppfunktionerna i aktion. Det använder Microsoft Access-databasen Northwind.mdb och extraherar data från tabellen som heter “Order Details”. Vi skapar en designerfil som heter SmartMarker_Designer.xls i Microsoft Excel och placerar smarta markörer i olika celler i kalkylbladen. Markörerna bearbetas för att fylla i kalkylbladen. Data placeras och organiseras efter ett gruppfält.
Designfilen har två kalkylblad. På första kalkylbladet placerar vi smarta markörer med gruppindata som visas i skärmbilden nedan. Tre smarta markörer (med gruppfunktioner) placeras: &=[Order Details].OrderID(group:merge,skip:1), &=[Order Details].Quantity(subtotal9:Order Details.OrderID), and &=[Order Details].UnitPrice(subtotal9:Order Details.OrderID) läggs in i A5, B5 och C5 respektive.
Det första kalkylbladet i filen SmartMarker_Designer.xls, komplett med smarta markörer |
---|
I det andra kalkylbladet i designerfilen lägger vi till några fler smarta markörer enligt figuren nedan. Vi placerar följande smarta markörer: |
&=[Order Details].OrderID(group:normal), |
&=[Order Details].Quantity, |
&=[Order Details].UnitPrice, |
&=&=B(r)*C(r), and |
&=subtotal9:Order Details.OrderID in i A5, B5, C5, D5 och C6 respektive. |
Det andra kalkylbladet i filen SmartMarker_Designer.xls som visar blandade smarta markörer. |
---|
Här är den källkod som används i exemplet. |
private void SmartMarkers_GroupingData() | |
{ | |
//Examples-CSharp-SmartMarkers-GroupingData-1.cs | |
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Create a connection object, specify the provider info and set the data source. | |
OleDbConnection con = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + dataDir + "Northwind.mdb"); | |
// Open the connection object. | |
con.Open(); | |
// Create a command object and specify the SQL query. | |
OleDbCommand cmd = new OleDbCommand("Select * from [Order Details]", con); | |
// Create a data adapter object. | |
OleDbDataAdapter da = new OleDbDataAdapter(); | |
// Specify the command. | |
da.SelectCommand = cmd; | |
// Create a dataset object. | |
DataSet ds = new DataSet(); | |
// Fill the dataset with the table records. | |
da.Fill(ds, "Order Details"); | |
// Create a datatable with respect to dataset table. | |
DataTable dt = ds.Tables["Order Details"]; | |
// Create WorkbookDesigner object. | |
WorkbookDesigner wd = new WorkbookDesigner(); | |
// Open the template file (which contains smart markers). | |
wd.Workbook = new Workbook(dataDir + "Designer.xlsx"); | |
// Set the datatable as the data source. | |
wd.SetDataSource(dt); | |
// Process the smart markers to fill the data into the worksheets. | |
wd.Process(true); | |
// Save the excel file. | |
wd.Workbook.Save(dataDir + "output.xlsx"); | |
} | |
class OleDbCommand | |
{ | |
private string p; | |
private OleDbConnection con; | |
public OleDbCommand(string p, OleDbConnection con) | |
{ | |
// TODO: Complete member initialization | |
this.p = p; | |
this.con = con; | |
} | |
} | |
class OleDbConnection | |
{ | |
private string p; | |
public OleDbConnection(string p) | |
{ | |
// TODO: Complete member initialization | |
this.p = p; | |
} | |
internal void Open() | |
{ | |
} | |
} | |
class OleDbDataAdapter | |
{ | |
public OleDbCommand SelectCommand { get; set; } | |
internal void Fill(System.Data.DataSet ds, string p) | |
{ | |
} | |
} |
Använda anonyma typer eller anpassade objekt
Aspose.Cells stöder också anonyma typer eller anpassade objekt i smarta markörer. Exemplet nedan visar hur detta fungerar. För att importera data från dynamiska objekt med hjälp av Smarta Markörer, besök följande artikel:
Importering från dynamiskt objekt som datakälla
private void SmartMarkers_UsingAnonymousTypes() | |
{ | |
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Instantiate the workbookdesigner object. | |
WorkbookDesigner report = new WorkbookDesigner(); | |
// Get the first worksheet(default sheet) in the workbook. | |
Aspose.Cells.Worksheet sheet = report.Workbook.Worksheets[0]; | |
// Input some markers to the cells. | |
sheet.Cells["A1"].PutValue("Name"); | |
sheet.Cells["B1"].PutValue("Age"); | |
sheet.Cells["A2"].PutValue("&=MyProduct.Name"); | |
sheet.Cells["B2"].PutValue("&=MyProduct.Age"); | |
// Instantiate the list collection based on the custom class. | |
IList<Person> list = new List<Person>(); | |
// Provide values for the markers using the custom class object. | |
list.Add(new Person("Simon", 30)); | |
list.Add(new Person("Johnson", 33)); | |
// Set the data source. | |
report.SetDataSource("MyProduct", list); | |
// Process the markers. | |
report.Process(false); | |
// Save the excel file. | |
report.Workbook.Save(dataDir + "Smart Marker Customobjects.xls"); | |
} | |
// Definition of Custom class. | |
public class Person | |
{ | |
private string m_Name; | |
public string Name | |
{ | |
get { return m_Name; } | |
set { m_Name = value; } | |
} | |
private int m_Age; | |
public int Age | |
{ | |
get { return m_Age; } | |
set { m_Age = value; } | |
} | |
internal Person(string name, int age) | |
{ | |
this.m_Name = name; | |
this.m_Age = age; | |
} | |
} |
Bildmarkörer
Aspose.Cells smarta markörer stödjer också bildmarkörer. Den här sektionen visar dig hur du sätter in bilder med hjälp av smarta markörer.
Bildparametrar
Smarta markörsparametrar för hantering av bilder.
- Bild:FitToCell - Justera automatiskt bilden till cellens radhöjd och kolumnbredd.
- Bild:SkalaN - Skala höjd och bredd till N procent.
- Picture:Width:Nin&Height:Nin - Rendera bilden N tum hög och N tum bred. Du kan också specificera vänster och övre positioner (i punkter).
Här är den källkod som används i exemplet.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Get the image data. | |
byte[] imageData = File.ReadAllBytes(dataDir+ "aspose-logo.jpg"); | |
// Create a datatable. | |
DataTable t = new DataTable("Table1"); | |
// Add a column to save pictures. | |
DataColumn dc = t.Columns.Add("Picture"); | |
// Set its data type. | |
dc.DataType = typeof(object); | |
// Add a new new record to it. | |
DataRow row = t.NewRow(); | |
row[0] = imageData; | |
t.Rows.Add(row); | |
// Add another record (having picture) to it. | |
imageData = File.ReadAllBytes(dataDir+ "image2.jpg"); | |
row = t.NewRow(); | |
row[0] = imageData; | |
t.Rows.Add(row); | |
// Create WorkbookDesigner object. | |
WorkbookDesigner designer = new WorkbookDesigner(); | |
// Open the template Excel file. | |
designer.Workbook = new Workbook(dataDir+ "TestSmartMarkers.xlsx"); | |
// Set the datasource. | |
designer.SetDataSource(t); | |
// Process the markers. | |
designer.Process(); | |
// Save the Excel file. | |
designer.Workbook.Save(dataDir+ "output.xls"); |
Användning av inbäddade objekt
Aspose.Cells stödjer inbäddade objekt i smarta markörer, de inbäddade objekten bör vara enkla. Vi använder en enkel mallfil. Se den designer-kalkylblad som innehåller några inbäddade smarta markörer.
Det första kalkylbladet i filen SM_NestedObjects.xlsx som visar inbäddade smarta markörer. |
---|
Exemplet nedan visar hur detta fungerar. |
private void SmartMarkers_UsingNestedObjects() | |
{ | |
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// ****** Program ****** | |
// Initialize WorkbookDesigner object | |
WorkbookDesigner designer = new WorkbookDesigner(); | |
// Load the template file | |
designer.Workbook = new Workbook(dataDir + "SM_NestedObjects.xlsx"); | |
// Instantiate the List based on the class | |
System.Collections.Generic.ICollection<Individual> list = new System.Collections.Generic.List<Individual>(); | |
// Create an object for the Individual class | |
Individual p1 = new Individual("Damian", 30); | |
// Create the relevant Wife class for the Individual | |
p1.Wife = new Wife("Dalya", 28); | |
// Create another object for the Individual class | |
Individual p2 = new Individual("Mack", 31); | |
// Create the relevant Wife class for the Individual | |
p2.Wife = new Wife("Maaria", 29); | |
// Add the objects to the list | |
list.Add(p1); | |
list.Add(p2); | |
// Specify the DataSource | |
designer.SetDataSource("Individual", list); | |
// Process the markers | |
designer.Process(false); | |
// Save the Excel file. | |
designer.Workbook.Save(dataDir + "output.xlsx"); | |
} | |
class Individual | |
{ | |
private String m_Name; | |
public String Name | |
{ | |
get { return m_Name; } | |
set { m_Name = value; } | |
} | |
private int m_Age; | |
public int Age | |
{ | |
get { return m_Age; } | |
set { m_Age = value; } | |
} | |
internal Individual(string name, int age) | |
{ | |
this.Name = name; | |
this.Age = age; | |
} | |
private Wife m_Wife; | |
public Wife Wife | |
{ | |
get { return m_Wife; } | |
set { m_Wife = value; } | |
} | |
} | |
public class Wife | |
{ | |
public Wife(string name, int age) | |
{ | |
this.m_name = name; | |
this.m_age = age; | |
} | |
private string m_name; | |
public string Name | |
{ | |
get { return m_name; } | |
set { m_name = value; } | |
} | |
private int m_age; | |
public int Age | |
{ | |
get { return m_age; } | |
set { m_age = value; } | |
} | |
} |
Användning av generisk lista som inbäddat objekt
Aspose.Cells stöder nu även användning av generiska listor som inbäddade objekt. Var god kontrollera skärmbilden av den genererade Excel-filen med följande kod. Som du kan se på skärmbilden innehåller ett lärarobjekt flera inbäddade studentobjekt.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
Workbook workbook = new Workbook(); | |
// Create a designer workbook | |
// Workbook workbook = new Workbook(); | |
Worksheet worksheet = workbook.Worksheets[0]; | |
worksheet.Cells["A1"].PutValue("Teacher Name"); | |
worksheet.Cells["A2"].PutValue("&=Teacher.Name"); | |
worksheet.Cells["B1"].PutValue("Teacher Age"); | |
worksheet.Cells["B2"].PutValue("&=Teacher.Age"); | |
worksheet.Cells["C1"].PutValue("Student Name"); | |
worksheet.Cells["C2"].PutValue("&=Teacher.Students.Name"); | |
worksheet.Cells["D1"].PutValue("Student Age"); | |
worksheet.Cells["D2"].PutValue("&=Teacher.Students.Age"); | |
// Apply Style to A1:D1 | |
Range range = worksheet.Cells.CreateRange("A1:D1"); | |
Style style = workbook.CreateStyle(); | |
style.Font.IsBold = true; | |
style.ForegroundColor = Color.Yellow; | |
style.Pattern = BackgroundType.Solid; | |
StyleFlag flag = new StyleFlag(); | |
flag.All = true; | |
range.ApplyStyle(style, flag); | |
// Initialize WorkbookDesigner object | |
WorkbookDesigner designer = new WorkbookDesigner(); | |
// Load the template file | |
designer.Workbook = workbook; | |
System.Collections.Generic.List<Teacher> list = new System.Collections.Generic.List<Teacher>(); | |
// Create an object for the Teacher class | |
Teacher h1 = new Teacher("Mark John", 30); | |
// Create the relevant student objects for the Teacher object | |
h1.Students = new List<Person>(); | |
h1.Students.Add(new Person("Chen Zhao", 14)); | |
h1.Students.Add(new Person("Jamima Winfrey", 18)); | |
h1.Students.Add(new Person("Reham Smith", 15)); | |
// Create another object for the Teacher class | |
Teacher h2 = new Teacher("Masood Shankar", 40); | |
// Create the relevant student objects for the Teacher object | |
h2.Students = new List<Person>(); | |
h2.Students.Add(new Person("Karishma Jathool", 16)); | |
h2.Students.Add(new Person("Angela Rose", 13)); | |
h2.Students.Add(new Person("Hina Khanna", 15)); | |
// 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.Workbook.Save(dataDir + "output.xlsx"); | |
Användning av HTML-egenskapen hos Smart Markers
The following sample code explains the use of HTML property of the Smart Markers. When it will be processed, it will show “World” in “Hello World” as bold because of HTML tag.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
Workbook workbook = new Workbook(); | |
WorkbookDesigner designer = new WorkbookDesigner(); | |
designer.Workbook = workbook; | |
workbook.Worksheets[0].Cells["A1"].PutValue("&=$VariableArray(HTML)"); | |
designer.SetDataSource("VariableArray", new String[] { "Hello <b>World</b>", "Arabic", "Hindi", "Urdu", "French" }); | |
designer.Process(); | |
workbook.Save(dataDir + "output.xls"); | |
Inte rad för rad
Den nuvarande standardbehandlingsmetoden är att behandla smartmaker rad för rad. Men ibland behöver smartmarkörer för samma datatabell behandlas tillsammans, oavsett om de är i samma rad eller inte, då måste du ange en angiven omfattning “_CellsSmartMarkers” och ange WorkbookDesigner.LineByLine som falsk innan du anropar behandlingen.
||
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
Workbook workbook = new Workbook(); | |
Style style = workbook.CreateStyle(); | |
style.Pattern = BackgroundType.Solid; | |
style.ForegroundColor = Color.Black; | |
style.Font.Color = Color.White; | |
// Create a designer workbook | |
// Workbook workbook = new Workbook(); | |
Worksheet worksheet = workbook.Worksheets[0]; | |
worksheet.Cells["A1"].PutValue("Teacher Name"); | |
worksheet.Cells["A1"].SetStyle(style); | |
worksheet.Cells["A2"].PutValue("&=Teacher.Name"); | |
worksheet.Cells["B1"].PutValue("Teacher Age"); | |
worksheet.Cells["B1"].SetStyle(style); | |
worksheet.Cells["B2"].PutValue("&=Teacher.Age"); | |
worksheet.Cells["A3"].PutValue("Student Name"); | |
worksheet.Cells["A3"].SetStyle(style); | |
worksheet.Cells["A4"].PutValue("&=Teacher.Students.Name"); | |
worksheet.Cells["B3"].PutValue("Student Age"); | |
worksheet.Cells["B3"].SetStyle(style); | |
worksheet.Cells["B4"].PutValue("&=Teacher.Students.Age"); | |
worksheet.AutoFitColumns(); | |
//A named range "_CellsSmartMarkers" must be added for checking which range contains all smart markers about a table. | |
worksheet.Cells.CreateRange("A1:B4").Name = "_CellsSmartMarkers"; | |
// Initialize WorkbookDesigner object | |
WorkbookDesigner designer = new WorkbookDesigner(); | |
// Load the template file | |
designer.Workbook = workbook; | |
System.Collections.Generic.List<Teacher> list = new System.Collections.Generic.List<Teacher>(); | |
// Create an object for the Teacher class | |
Teacher h1 = new Teacher("Mark John", 30); | |
// Create the relevant student objects for the Teacher object | |
h1.Students = new List<Person>(); | |
h1.Students.Add(new Person("Chen Zhao", 14)); | |
h1.Students.Add(new Person("Jamima Winfrey", 18)); | |
h1.Students.Add(new Person("Reham Smith", 15)); | |
// Create another object for the Teacher class | |
Teacher h2 = new Teacher("Masood Shankar", 40); | |
// Create the relevant student objects for the Teacher object | |
h2.Students = new List<Person>(); | |
h2.Students.Add(new Person("Karishma Jathool", 16)); | |
h2.Students.Add(new Person("Angela Rose", 13)); | |
h2.Students.Add(new Person("Hina Khanna", 15)); | |
// Add the objects to the list | |
list.Add(h1); | |
list.Add(h2); | |
// Specify the DataSource | |
designer.SetDataSource("Teacher", list); | |
designer.LineByLine = false; | |
// Process the markers | |
designer.Process(); | |
// Autofit columns | |
worksheet.AutoFitColumns(); | |
// Save the Excel file. | |
designer.Workbook.Save(dataDir + "output.xlsx"); | |
public class Person | |
{ | |
private string m_Name; | |
public string Name | |
{ | |
get { return m_Name; } | |
set { m_Name = value; } | |
} | |
private int m_Age; | |
public int Age | |
{ | |
get { return m_Age; } | |
set { m_Age = value; } | |
} | |
internal Person(string name, int age) | |
{ | |
this.m_Name = name; | |
this.m_Age = age; | |
} | |
} | |
public class Teacher | |
{ | |
private string m_Name; | |
public string Name | |
{ | |
get { return m_Name; } | |
set { m_Name = value; } | |
} | |
private int m_Age; | |
public int Age | |
{ | |
get { return m_Age; } | |
set { m_Age = value; } | |
} | |
private List<Person> mStudents; | |
public List<Person> Students | |
{ | |
get { return mStudents; } | |
set { mStudents = value; } | |
} | |
public Teacher(string name, int age) | |
{ | |
this.Name = name; | |
this.Age = age; | |
} | |
} |
Få meddelanden när data sammanfogas med smarta markörer
Ibland kan det vara nödvändigt att få notifieringar om cellreferens eller den särskilda Smart Marker som behandlas innan färdigställandet. Detta kan uppnås med hjälp av egenskapen WorkbookDesigner.CallBack och ISmartMarkerCallBack
Fortsatta ämnen
- Lägg till anonymt eller anpassat objekt i SmartMarkers
- Automatiskt fylla i Smart Marker-data till andra kalkylblad om datan är för stor
- Formatering av Smart Markers
- Få meddelanden när data sammanfogas med smarta markörer
- Ange anpassad datakälla för WorkbookDesigner
- Visa ledande apostrofer i celler
- Använda Formelparameter i Smart Marker-fält
- Använda bildenkoder vid gruppering av data i Smart Markers