Использование Умных Маркеров
Введение
Дизайнерский электронный таблица и умные маркеры
Дизайнерские таблицы - это стандартные файлы Excel, содержащие визуальное форматирование, формулы и умные маркеры. Они могут содержать умные маркеры, которые ссылается на один или несколько источников данных, таких как информация о проекте и информация о связанных контактах. Умные маркеры вписываются в ячейки, где вы хотите разместить информацию.
Все умные маркеры начинаются с &=. Примером маркера данных является &=Party.FullName. Если маркер данных дает более одного элемента, например, полную строку, тогда следующие строки автоматически смещаются вниз, чтобы освободить место для новой информации. Таким образом, итоги и промежуточные итоги могут быть помещены на строку сразу после маркера данных для выполнения вычислений на основе вставленных данных. Чтобы провести вычисления на вставленных строках, используйте динамические формулы.
Умные маркеры состоят из частей источник данных и название поля для большинства информации. Специальная информация также может передаваться с помощью переменных и массивов переменных. Переменные всегда заполняют только одну ячейку, в то время как массивы переменных могут заполнять несколько. Используйте только один маркер данных на ячейку. Неиспользуемые умные маркеры удаляются.
Умный маркер также может содержать параметры. Параметры позволяют вам изменить расположение информации. Они добавляются в конец умного маркера в качестве списка, разделенного запятой в скобках.
Параметры умного маркера
&=ИсточникДанных.ИмяПоля &=[Источник Данных].[Имя Поля] &=$ИмяПеременной &=$МассивПеременных &==ДинамическаяФормула &=&=ПовторитьДинамическуюФормулу
Параметры
Допустимы следующие параметры:
- noadd - Не добавлять дополнительные строки для помещения данных.
- skip:n - Пропустить n количество строк для каждой строки данных.
- *ascending:n or descending:n - Сортировать данные в смарт-элементах. Если n равно 1, то столбец будет первым ключом сортировщика. Данные сортируются после обработки источника данных. Например: &=Table1.Field3(ascending:1).
- horizontal - Записывать данные слева направо, а не сверху вниз.
- numeric - Преобразовать текст в число, если это возможно.
- shift - Сдвигать вниз или вправо, создавая дополнительные строки или столбцы для размещения данных.
- bean - Указывает, что источник данных - простой POJO. Поддерживается только в Java API.
Параметры noadd и skip могут быть объединены для вставки данных на чередующиеся строки. Поскольку шаблон обрабатывается снизу вверх, вам следует добавить noadd на первой строке, чтобы избежать добавления лишних строк перед чередующейся строкой.
Если у вас есть несколько параметров, разделите их запятой, но без пробела: параметрA,параметрB,параметрC
На следующих скриншотах показано, как вставить данные на каждую вторую строку.
становится…
Динамические формулы
Динамические формулы позволяют вставлять формулы Excel в ячейки, даже когда формула ссылается на строки, которые будут вставлены во время процесса экспорта. Динамические формулы могут повторяться для каждой вставленной строки или использовать только ячейку, где размещен маркер данных.
Динамические формулы позволяют использовать следующие дополнительные параметры:
- r - Номер текущей строки.
- 2, -1 - Смещение к текущему номеру строки.
Ниже приведен пример повторяющейся динамической формулы и результирующего листа Excel.
становится…
Ячейка C1 содержит формулу =A1B1, C2 содержит = A2B2, а C3 = A3*B3.
Очень легко обрабатывать умные маркеры. Приведенный ниже пример кода показывает, как использовать динамические формулы в умных маркерах. Мы загружаем файл шаблона и создаем тестовые данные, обрабатываем маркеры для заполнения данных в ячейках по маркерам.
// 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; | |
} | |
} |
Использование переменных массивов
Приведен пример кода, показывающий, как использовать переменные массивы в умных маркерах. Мы размещаем маркер переменного массива в ячейке A1 первого листа книги Excel динамически, которая содержит строку значений, которые мы устанавливаем для маркера, обрабатываем маркеры для заполнения данных в ячейках по маркерам. Наконец, мы сохраняем файл Excel.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(UsingVariableArray.class) + "SmartMarkers/"; | |
// Instantiate a new Workbook designer. | |
WorkbookDesigner report = new WorkbookDesigner(); | |
// Get the first worksheet of the workbook. | |
Worksheet w = report.getWorkbook().getWorksheets().get(0); | |
/* | |
* Set the Variable Array marker to a cell.You may also place this Smart | |
* Marker into a template file manually in Ms Excel and then open this | |
* file via Workbook. | |
*/ | |
w.getCells().get("A1").putValue("&=$VariableArray"); | |
// Set the DataSource for the marker(s). | |
report.setDataSource("VariableArray", new String[] { "English", "Arabic", "Hindi", "Urdu", "French" }); | |
// Process the markers. | |
report.process(false); | |
// Save the Excel file. | |
report.getWorkbook().save(dataDir + "varaiblearray_out.xlsx"); |
Группировка данных
В некоторых отчетах 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.
Использование вложенных объектов
Aspose.Cells поддерживает вложенные объекты в интеллектуальных маркерах, вложенные объекты должны быть простыми.
Мы используем простой файл шаблона. См. Дизайнерский электронный лист, который содержит некоторые вложенные интеллектуальные маркеры.
Первый лист дизайнерского файла, показывающий вложенные умные маркеры.
Приведенный ниже пример показывает, как это работает. Запуск кода ниже приводит к следующему выводу.
Первый лист выходного файла, показывающий полученные данные.
// 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; | |
} | |
} |
Использование обобщенного списка в качестве вложенного объекта
Aspose.Cells теперь также поддерживает использование обобщенного списка в качестве вложенного объекта. Пожалуйста, проверьте снимок экрана выходного excel-файла, сгенерированного следующим кодом. Как вы можете видеть на снимке экрана, объект Teacher содержит несколько вложенных объектов Student.
// 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; | |
} | |
} |
Использование свойства HTML умных маркеров
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"); |
Получение уведомлений во время слияния данных с умными маркерами
Иногда может потребоваться получать уведомления о ссылке на ячейку или о конкретном умном маркере, который обрабатывается до завершения. Это можно достичь, используя свойство WorkbookDesigner.CallBack и ISmartMarkerCallBack
Для примера кода и подробного объяснения, пожалуйста, обратитесь к этой статье.