Умный импорт и размещение данных с использованием умных маркеров
Введение
Умные маркеры используются для того, чтобы Aspose.Cells узнавал, какую информацию разместить в дизайнерском электронном листе Microsoft Excel. Умные маркеры позволяют создавать шаблоны, содержащие только определенную информацию и форматирование.
Дизайнерский электронный таблица и умные маркеры
Дизайнерские электронные таблицы - стандартные файлы Excel, которые содержат визуальное форматирование, формулы и умные маркеры. Они могут содержать умные маркеры, ссылки на один или несколько источников данных, такие как информация из проекта и информация о связанных контактах. Умные маркеры записываются в ячейки, в которых нужна информация.
Все умные маркеры начинаются с &=. Примером маркера данных является &=Party.FullName. Если результат маркера данных содержит более одного элемента, например, полную строку, то следующие строки автоматически сдвигаются вниз, чтобы освободить место для новой информации. Таким образом, промежуточные и итоговые итоги могут быть размещены на строке, следующей сразу после маркера данных, чтобы делать вычисления на основе вставленных данных. Для вычислений по вставленным строкам используйте динамические формулы.
Умные маркеры состоят из частей источник данных и название поля для большинства информации. Специальная информация также может передаваться с помощью переменных и массивов переменных. Переменные всегда заполняют только одну ячейку, в то время как массивы переменных могут заполнять несколько. Используйте только один маркер данных на ячейку. Неиспользуемые умные маркеры удаляются.
Умный маркер также может содержать параметры. Параметры позволяют изменить способ представления информации. Они добавляются в конец умного маркера в круглых скобках в виде списка, разделенного запятыми.
Параметры умного маркера
&=ИсточникДанных.ИмяПоля &=[Источник Данных].[Имя Поля] &=$ИмяПеременной &=$МассивПеременных &==ДинамическаяФормула &=&=ПовторитьДинамическуюФормулу
Параметры
Допустимы следующие параметры:
- noadd - Не добавлять дополнительные строки для помещения данных.
- skip:n - Пропустить n количество строк для каждой строки данных.
- ascending:n или descending:n - Сортировать данные в умных маркерах. Если n равно 1, то столбец является первым ключом сортировки. Данные сортируются после обработки источника данных. Например: &=Таблица1.Поле3(ascending:1).
- horizontal - Записывать данные слева направо, а не сверху вниз.
- numeric - Преобразовать текст в число, если это возможно.
- shift - Сдвиг вниз или вправо, создание дополнительных строк или столбцов для данных. Параметр сдвига работает так же, как в Microsoft Excel. Например, в Microsoft Excel, когда вы выделяете диапазон ячеек, щелкаете правой кнопкой мыши и выбираете Вставка и указываете сдвинуть ячейки вниз, сдвинуть ячейки вправо и другие параметры. В сокращенной форме параметр shift выполняет ту же функцию для вертикального/нормального (сверху вниз) или горизонтального (слева направо) умных маркеров.
- copystyle - Скопировать стиль базовой ячейки во все ячейки этого столбца.
Параметры noadd и skip могут быть объединены для вставки данных на чередующиеся строки. Так как шаблон обрабатывается сверху вниз, вы должны добавить noadd на первой строке, чтобы избежать вставки лишних строк перед чередующейся строкой.
Если у вас есть несколько параметров, разделите их запятыми, но без пробела: параметрА,параметрB,параметрC
На следующих скриншотах показано, как вставить данные на каждую вторую строку.
Файл шаблона | Файл вывода |
---|---|
![]() |
![]() |
Динамические формулы
Динамические формулы позволяют вставлять формулы Excel в ячейки, даже когда формула ссылается на строки, которые будут вставлены во время процесса экспорта. Динамические формулы могут повторяться для каждой вставленной строки или использовать только ячейку, где размещен маркер данных.
Динамические формулы позволяют использовать следующие дополнительные параметры:
- r - Номер текущей строки.
- 2, -1 - Смещение к текущему номеру строки.
Например:
&=&=B{-1}/C{-1}~(skip:1)
В маркере динамической формулы “-1” обозначает смещение к текущей строке в столбцах B и C соответственно, которые будут установлены для операции деления, параметр пропуска - одна строка. Более того, мы должны указать следующий символ:
"~"
как разделительный символ для применения дополнительных параметров в динамических формулах.
Следующие скриншоты иллюстрируют повторяющуюся динамическую формулу и результат на листе Excel.
Файл шаблона | Файл вывода |
---|---|
![]() |
![]() |
Ячейка “C1” содержит формулу = A1*B1, ячейка “C2” содержит = A2*B2 и ячейка “C3” содержит = A3*B3. |
Очень легко обрабатывать умные маркеры. Приведенный ниже пример кода показывает, как использовать динамические формулы в умных маркерах. Мы загружаем файл шаблона и создаем тестовые данные, обрабатываем маркеры для заполнения данных в ячейках по маркерам.
// 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(); | |
} |
Использование переменных массивов
Приведенный ниже пример кода показывает, как использовать переменные массивы в умных маркерах. Мы размещаем маркер переменного массива в ячейке A1 первого листа рабочей книги динамически, который содержит строку значений, которые мы устанавливаем для маркера, обрабатываем маркеры для заполнения данных в ячейках по маркерам. Наконец, мы сохраняем файл Excel.
// 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"); |
Группировка данных
В некоторых отчетах Excel может потребоваться разбить данные на группы для удобства их чтения и анализа. Одной из основных целей разделения данных на группы является выполнение расчетов (выполнение сводных операций) для каждой группы записей.
Умные маркеры Aspose.Cells позволяют группировать данные по полям и размещать строки итогов между наборами данных или группами данных. Например, если группировать данные по Customers.CustomerID, можно добавить строку итогов при каждом изменении группы.
Параметры
Ниже приведены некоторые параметры умного маркера, используемые для группировки данных.
group:normal/merge/repeat
Мы поддерживаем три типа групп, из которых вы можете выбрать.
- обычный - Значение поля(ей) группировки не повторяется для соответствующих записей в столбце; вместо этого они печатаются один раз для каждой группы данных.
- объединение - То же поведение, что и для параметра normal, за исключением того, что он объединяет ячейки в поле(ях) группировки для каждого набора групп.
- повтор - Значение поля(ей) группировки повторяется для соответствующих записей.
Например: &=Customers.CustomerID(group:merge)
skip
Пропускает указанное количество строк после каждой группы.
Например, &=Employees.EmployeeID(group:normal,skip:1)
subtotalN
Выполняет сводную операцию для указанных данных поля, связанных с полем группировки. N представляет собой числа от 1 до 11, которые указывают функцию, используемую при расчете промежуточных итогов в списке данных. (1=AVERAGE, 2=COUNT, 3=COUNTA, 4=MAX, 5=MIN,…9=SUM и т.д.) См. Справочник subtotal в справке Microsoft Excel для получения дополнительной информации.
Фактический формат указан как: subtotalN:Ref, где Ref относится к столбцу группировки.
Например,
- &=Products.Units(subtotal9:Products.ProductID) указывает функцию итогов для поля Units относительно поля ProductID в таблице Products.
- &=Tabx.Col3(subtotal9:Tabx.Col1) указывает функцию итогов для поля Col3 с группировкой по Col1 в таблице Tabx.
- &=Table1.ColumnD(subtotal9:Table1.ColumnA&Table1.ColumnB) указывает функцию итогов для поля ColumnD группируется по ColumnA и ColumnB в таблице Table1.
В этом примере показано некоторые из параметров группировки в действии. Он использует базу данных Microsoft Access Northwind.mdb и извлекает данные из таблицы с именем “Order Details”. Мы создаем файл дизайнера с именем SmartMarker_Designer.xls в Microsoft Excel и размещаем умные маркеры в различные ячейки на листах. Маркеры обрабатываются для заполнения листов. Данные размещаются и организуются по полю группы.
В файле дизайнера два листа. На первом мы размещаем умные маркеры с параметрами группировки, как показано на скриншоте ниже. Три умных маркера (с параметрами группировки) размещены: &=[Order Details].OrderID(group:merge,skip:1), &=[Order Details].Quantity(итого9:Order Details.OrderID), и &=[Order Details].UnitPrice(итого9:Order Details.OrderID) помещаются в A5, B5 и C5 соответственно.
Первый лист в файле SmartMarker_Designer.xls с полностью настроенными умными маркерами |
---|
![]() |
На втором листе дизайнера мы размещаем еще несколько умных маркеров, как показано на рисунке ниже. Мы размещаем следующие умные маркеры: |
&=[Order Details].OrderID(group:normal), |
&=[Order Details].Quantity, |
&=[Order Details].UnitPrice, |
&=&=B(r)*C(r), и |
&=итого9:Order Details.OrderID в A5, B5, C5, D5 и C6 соответственно. |
Второй лист файла SmartMarker_Designer.xls, отображающий смешанные умные маркеры. |
---|
![]() |
Вот исходный код, используемый в примере. |
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) | |
{ | |
} | |
} |
Использование анонимных типов или пользовательских объектов
Aspose.Cells также поддерживает анонимные типы или пользовательские объекты в умных маркерах. Приведенный ниже пример показывает, как это работает. Для импорта данных из динамических объектов с использованием умных маркеров посетите следующую статью:
Импорт из динамического объекта в качестве источника данных
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; | |
} | |
} |
Изображение маркеров
Умные маркеры Aspose.Cells также поддерживают изображения. Этот раздел покажет вам, как вставлять изображения с помощью умных маркеров.
Параметры изображения
Умные маркеры для управления изображениями.
- Изображение:FitToCell - Автоматически подгонять изображение под высоту строки и ширину столбца.
- Изображение:МасштабN - Масштабировать высоту и ширину до N процентов.
- Picture:Width:Nin&Height:Nin - Вывести изображение высотой N дюймов и шириной N дюймов. Также можно указать позиции слева и сверху (в пунктах).
Вот исходный код, используемый в примере.
// 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"); |
Использование вложенных объектов
Aspose.Cells поддерживает вложенные объекты в умных маркерах, вложенные объекты должны быть простыми. Мы используем простой файл шаблона. Смотрите дизайнерскую электронную таблицу, содержащую некоторые вложенные умные маркеры.
Первый лист файла SM_NestedObjects.xlsx, показывающий вложенные умные маркеры. |
---|
![]() |
Приведенный ниже пример показывает, как это работает. |
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; } | |
} | |
} |
Использование обобщенного списка в качестве вложенного объекта
Aspose.Cells теперь также поддерживает использование обобщенного списка в качестве вложенного объекта. Пожалуйста, проверьте скриншот выходного файла Excel, сгенерированного следующим кодом. Как видно на скриншоте, объект ‘Преподаватель’ содержит несколько вложенных объектов ‘Студент’.
![]() |
---|
// 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"); | |
Использование свойства HTML умных маркеров
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"); | |
Нет построчно.
Текущий метод обработки по умолчанию - обрабатывать умные маркеры построчно. Но иногда умные маркеры одной и той же таблицы данных нужно обрабатывать вместе, независимо от того, находятся ли они в одной строке или нет. В этом случае необходимо указать именованный диапазон “_CellsSmartMarkers” и указать, что WorkbookDesigner.LineByLine равно false перед вызовом обработки.
||
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; | |
} | |
} |
Получение уведомлений во время слияния данных с умными маркерами
Иногда может потребоваться получить уведомления о ссылке на ячейку или о обработке конкретного умного маркера до завершения. Это можно сделать с помощью свойства WorkbookDesigner.CallBack и ISmartMarkerCallBack.
Продвинутые темы
- Добавление анонимного или пользовательского объекта в умные маркеры.
- Автоматическое заполнение данных умного маркера в другие листы, если данные слишком большие
- Форматирование умных маркеров.
- Получение уведомлений во время слияния данных с умными маркерами
- Установить пользовательский источник данных для WorkbookDesigner.
- Показывать ведущую апостроф в ячейках.
- Использование параметра Formula в умном маркере
- Использование маркеров изображений при группировке данных в умных маркерах