Умный импорт и размещение данных с помощью интеллектуальных маркеров
Вступление
Умные маркерыиспользуются, чтобы сообщить Aspose.Cells, какую информацию помещать в электронную таблицу конструктора Excel Microsoft. Смарт-маркеры позволяют создавать шаблоны, содержащие только определенную информацию и форматирование.
Дизайнерская электронная таблица и смарт-маркеры
Электронные таблицы конструктора — это стандартные файлы Excel, которые содержат визуальное форматирование, формулы и интеллектуальные маркеры. Они могут содержать интеллектуальные маркеры, которые ссылаются на один или несколько источников данных, таких как информация из проекта и информация для связанных контактов. Умные маркеры записываются в ячейки, где вы хотите получить информацию.
Все смарт-маркеры начинаются с &=. Примером маркера данных является &=Party.FullName. Если маркер данных приводит к более чем одному элементу, например, к полной строке, то следующие строки автоматически перемещаются вниз, чтобы освободить место для новой информации. Таким образом, промежуточные итоги и итоги могут быть размещены в строке сразу после маркера данных, чтобы производить расчеты на основе вставленных данных. Чтобы выполнить вычисления для вставленных строк, используйтединамические формулы.
Умные маркеры состоят изисточник данных иимя полячастей для получения большей информации. Специальную информацию также можно передавать с помощью переменных и массивов переменных. Переменные всегда заполняют только одну ячейку, тогда как массивы переменных могут заполнять несколько. Используйте только один маркер данных на ячейку. Неиспользуемые смарт-маркеры удаляются.
Умный маркер также может содержать параметры. Параметры позволяют изменить способ представления информации. Они добавляются в конец смарт-маркера в круглых скобках в виде списка, разделенного запятыми.
Параметры смарт-маркера
&=Источник данных.ИмяПоля &=[Источник данных].[Имя поля]&=$Имя переменной &=$ПеременныйМассив &==Динамическая формула &=&=Повторить динамическую формулу
Параметры
Допускаются следующие параметры:
- не добавить - Не добавляйте дополнительные строки для соответствия данным.
- пропустить:н - Пропустить n строк для каждой строки данных.
- по возрастанию: п или жепо убыванию: п - Сортировка данных в смарт-маркерах. Если n равно 1, то столбец является первым ключом сортировщика. Данные сортируются после обработки источника данных. Например: &=Таблица1.Поле3(по возрастанию:1).
- горизонтальный - Записывайте данные слева направо, а не сверху вниз.
- числовой - Преобразование текста в число, если это возможно.
- сдвиг - Сдвиг вниз или вправо, создание дополнительных строк или столбцов для соответствия данным. Параметр сдвига работает так же, как и в Microsoft Excel. Например, в Microsoft Excel при выборе диапазона ячеек щелкните правой кнопкой мыши и выберитеВставлять и указатьсдвинуть ячейки вниз, сдвинуть ячейки вправо и другие варианты. Короче говоря,сдвиг Параметр выполняет ту же функцию для вертикальных/нормальных (сверху вниз) или горизонтальных (слева направо) интеллектуальных маркеров.
- копистайл - Скопируйте стиль базовой ячейки во все ячейки в этом столбце.
Параметры noadd и skip можно комбинировать для вставки данных в чередующиеся строки. Поскольку шаблон обрабатывается снизу вверх, вы должны добавить noadd в первую строку, чтобы избежать вставки дополнительных строк перед альтернативной строкой.
Если у вас несколько параметров, разделите их запятыми, но без пробела: параметр A, параметр B, параметр C.
На следующих снимках экрана показано, как вставлять данные в каждую вторую строку.
Файл шаблона | Выходной файл |
---|---|
![]() |
![]() |
Динамические формулы
Динамические формулы позволяют вставлять формулы Excel в ячейки, даже если формула ссылается на строки, которые будут вставлены в процессе экспорта. Динамические формулы могут повторяться для каждой вставленной строки или использовать только ячейку, в которой находится маркер данных.
Динамические формулы позволяют использовать следующие дополнительные параметры:
- r - Текущий номер строки.
- 2, -1 — смещение до текущего номера строки.
Например:
&=&=B{-1}/C{-1}~(skip:1)
В маркере динамической формулы «-1» обозначает смещение к текущей строке в столбцах B и C соответственно, которое будет установлено для операции деления, параметр пропуска равен одной строке. Кроме того, мы должны указать следующий символ:
"~"
в качестве символа-разделителя для применения дополнительных параметров в динамических формулах.
На следующих снимках экрана показана повторяющаяся динамическая формула и результирующий рабочий лист Excel.
Файл шаблона | Выходной файл |
---|---|
![]() |
![]() |
Cell “C1” содержит формулу**= А1*В1** , ячейка “C2” содержит**= А2*В2** а ячейка “C3” содержит**= А3*В3**. |
Обрабатывать умные маркеры очень легко. Далее следуют два фрагмента кода, один на C# и один на VB, которые показывают, как это делается.
// 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 можно добавлять сводную запись при каждом изменении группы.
Параметры
Ниже приведены некоторые параметры интеллектуальных маркеров, используемые для группировки данных.
группа:нормальная/объединить/повторить
Мы поддерживаем три типа групп, которые вы можете выбрать.
- нормальный - группировка по значению поля (полей) не повторяется для соответствующих записей в столбце; вместо этого они печатаются один раз для каждой группы данных.
- сливаться - То же поведение, что и для обычного параметра, за исключением того, что он объединяет ячейки в группе по полям для каждого набора групп.
- повторение - Группа по значению поля (полей) повторяется для соответствующих записей.
Например: &=Customers.CustomerID(группа:объединить)
пропускать
Пропускает указанное количество строк после каждой группы.
Например, &=Employees.EmployeeID(group:normal,skip:1)
промежуточный итогN
Выполняет операцию суммирования для данных указанного поля, связанных с группой по полю. N представляет числа от 1 до 11, которые определяют функцию, используемую при расчете промежуточных итогов в списке данных. (1 = СРЕДНЕЕ, 2 = СЧЁТ, 3 = СЧЁТ, 4 = МАКС, 5 = МИН,… 9 = СУММА и т. д.) Дополнительную информацию см. в справке по промежуточному итогу в Microsoft Excel.
Формат фактически гласит: subtotalN:Ref, где Ref относится к группе по столбцу.
Например,
- &=Products.Units(subtotal9:Products.ProductID) определяет итоговую функцию приЕдиницы измерения поле по отношению кКод товара поле вПродукты Таблица.
- &=Tabx.Col3(subtotal9:Tabx.Col1) указывает итоговую функцию приКол3 группа полей поКол1 в таблицеТабкс.
- &=Table1.ColumnD(subtotal9:Table1.ColumnA&Table1.ColumnB) определяет итоговую функцию приСтолбецD группа полей поСтолбец А иСтолбец B в таблицеТаблица 1.
В этом примере показаны некоторые параметры группировки в действии. Он использует базу данных доступа Northwind.mdb Microsoft и извлекает данные из таблицы с именем «Сведения о заказе». Мы создаем файл конструктора с именем SmartMarker_Designer.xls в Microsoft Excel и помещаем смарт-маркеры в различные ячейки рабочих листов. Маркеры обрабатываются для заполнения рабочих листов. Данные размещаются и организуются по групповому полю.
Файл конструктора состоит из двух рабочих листов. В первую ставим умные маркеры с параметрами группировки, как показано на скриншоте ниже. Размещаются три смарт-маркера (с параметрами группировки): &=[Сведения о заказе].OrderID(группа:объединить,пропустить:1), &=[Сведения о заказе].Количество(промежуточный итог9:Сведения о заказе.Идентификатор заказа) и &=[Детали заказа].UnitPrice(subtotal9:Детали заказа.OrderID) входят в A5, B5 и C5 соответственно.
Первый рабочий лист в файле SmartMarker_Designer.xls со смарт-маркерами. |
---|
![]() |
На втором рабочем листе файла конструктора мы поместили еще несколько умных маркеров, как показано на рисунке ниже. Размещаем следующие умные маркеры: |
&=[Детали заказа].OrderID(group:normal), |
&=[Сведения о заказе].Количество, |
&=[Сведения о заказе].UnitPrice, |
&=&=B(r)*C(r), и |
&=subtotal9: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 - Автоматически подгонять изображение к высоте строки ячейки и ширине столбца.
- Изображение:ScaleN - Масштабировать высоту и ширину до N процентов.
- Изображение:Ширина:НинВысота:Нин - Визуализация изображения 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 смарт-маркеров
В следующем примере кода объясняется использование свойства HTML интеллектуальных маркеров. Когда он будет обработан, он покажет «Мир» в «Hello World» жирным шрифтом из-за HTML. тег.
// 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"); | |
Не построчно
Текущий метод обработки по умолчанию — обрабатывать smartmaker построчно. Но иногда интеллектуальные маркеры одной и той же таблицы данных необходимо обрабатывать вместе, независимо от того, если они находятся в одной строке или нет, то вы должны указать именованный диапазон «_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.
Предварительные темы
- Добавление анонимного или пользовательского объекта в SmartMarkers
- Автоматическое заполнение данными интеллектуальных маркеров на других рабочих листах, если данные слишком велики
- Форматирование смарт-маркеров
- Получение уведомлений при объединении данных со смарт-маркерами
- Установить пользовательский источник данных для WorkbookDesigner
- Показать начальный апостроф в ячейках
- Использование параметра Formula в поле Smart Marker
- Использование маркеров изображений при группировке данных в смарт-маркерах