Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Aspose.Cells поддерживает рендеринг данных массива в одну ячейку с помощью смарт-маркеров. Используя атрибут ArrayAsSingle вместе с атрибутом ExtraDelimiter, разработчики могут управлять тем, как элементы массива разделяются внутри одной ячейки, обеспечивая гибкое форматирование для отчётов и шаблонов.
Смарт-маркеры в Aspose.Cells — это мощная функция на основе шаблонов, которая позволяет динамически заполнять данные электронной таблицы с помощью выражений маркеров, таких как &=DataSource.Field. Маркер помещается в рабочую книгу дизайнера, и когда шаблон обрабатывается WorkbookDesigner, маркеры заменяются значениями из предоставленного источника данных.
По умолчанию, когда смарт-маркер ссылается на свойство массива (например, &=DataSource.Numbers), обработчик разворачивает массив и помещает каждый элемент в отдельную соседнюю ячейку — либо горизонтально в строке, либо вертикально в столбце. Хотя такое поведение удобно во многих сценариях, бывают ситуации, когда предпочтительнее отобразить весь массив в одной ячейке, с конкатенацией элементов и разделением их выбранным вами разделителем.
Атрибуты ArrayAsSingle и ExtraDelimiter, используемые вместе внутри тега смарт-маркера, решают именно эту задачу. Они позволяют сохранять компактные и предсказуемые макеты отчётов, при этом работая нативно с источниками данных в виде массивов.
Когда смарт-маркер ссылается на свойство массива, Aspose.Cells по умолчанию разворачивает массив по нескольким ячейкам. Например, маркер вида &=Product.Tags для string[], содержащего четыре значения, поместит каждое значение в отдельную ячейку, смещая остальное содержимое шаблона и потенциально нарушая тщательно продуманные макеты отчётов.
Существует множество практических сценариев, в которых поведение разворачивания по умолчанию нежелательно:
Без встроенного механизма разработчикам пришлось бы предварительно обрабатывать данные в JavaScript — объединять массивы в строки с разделителями перед привязкой их к дизайнеру рабочей книги. Это дублирует логику, усложняет модели данных и увеличивает вероятность ошибок. Атрибуты ArrayAsSingle и ExtraDelimiter устраняют этот обходной путь, обрабатывая форматирование декларативно внутри самого смарт-маркера.
Использование атрибутов ArrayAsSingle и ExtraDelimiter в ваших смарт-маркерах даёт ряд преимуществ:
Атрибуты ArrayAsSingle и ExtraDelimiter передаются в виде пар «ключ-значение» внутри круглых скобок стандартного смарт-маркера. Общий синтаксис:
&=DataSource.ArrayProperty(arrayasSingle=true, extraDelimiter=", ")
Маркер состоит из следующих частей:
&=DataSource.ArrayProperty — стандартный смарт-маркер, ссылающийся на свойство массива в привязанном источнике данных.arrayasSingle=true — указывает обработчику отобразить весь массив в одной ячейке. Только значение true включает поведение рендеринга в одну ячейку.extraDelimiter=", " — определяет разделитель, помещаемый между элементами массива. Значение представляет собой строковый литерал; оно может быть пустым, одним символом или строкой из нескольких символов.Атрибут extraDelimiter принимает любой строковый литерал, включая многосимвольные разделители, произвольный текст или escape-последовательности, такие как \n для вывода с переводом строки. Если массив пуст, результирующая ячейка остаётся пустой.
Следующий рабочий процесс описывает, как отобразить массив в одной ячейке с помощью смарт-маркеров.
string[], int[] или любой другой поддерживаемый тип массива.Workbook, добавьте строку заголовка и поместите ячейку смарт-маркера, которая ссылается на свойство массива с атрибутами arrayasSingle и extraDelimiter.WorkbookDesigner, прикрепите к нему рабочую книгу дизайнера и привяжите ваш источник данных с помощью метода setDataSource.workbookDesigner.process(), чтобы развернуть смарт-маркеры и заполнить рабочую книгу реальными данными.let product = {
Tags: ["C#", "Aspose", "SmartMarker", "Excel"]
};
let workbook = new AsposeCells.Workbook();
let worksheet = workbook.getWorksheets().get(0);
worksheet.getCells().get("A1").putValue("Tags");
worksheet.getCells().get("A2").putValue('&=Product.Tags(arrayasSingle=true, extraDelimiter=", ")');
let designer = new AsposeCells.WorkbookDesigner();
designer.setWorkbook(workbook);
designer.setDataSource("Product", product);
designer.process();
workbook.save("output_arraySingle.xlsx");
class Student {
constructor() {
this.Scores = [];
}
}
const student = new Student();
student.Scores = [95, 88, 76, 100, 67];
const workbook = new AsposeCells.Workbook();
const worksheet = workbook.getWorksheets().get(0);
worksheet.getCells().get("A1").putValue("Scores");
worksheet.getCells().get("A2").putValue(student.Scores.join(" - "));
workbook.save("output_numericArray.xlsx");
var order = {
Items: ["Apple", "Banana", "Cherry", "Date"]
};
var workbook = new AsposeCells.Workbook();
var sheet = workbook.getWorksheets().get(0);
var cells = sheet.getCells();
// Раздел 1: Смарт-маркер по умолчанию - значения распределяются горизонтально по ячейкам
cells.get("A1").putValue("Default Spreading Behavior:");
cells.get("A2").putValue("&=Order.Items");
// Раздел 2: Новое отображение в одной ячейке с использованием arrayasSingle и extraDelimiter
cells.get("A4").putValue("Single Cell Rendering (arrayasSingle=true):");
cells.get("A5").putValue("&=Order.Items(arrayasSingle=true, extraDelimiter=\"; \")");
// Привязка источника данных и обработка смарт-маркеров
var designer = new AsposeCells.WorkbookDesigner(workbook);
designer.setDataSource("Order", order);
designer.process();
// Сохранение результирующей книги
workbook.save("output_comparison.xlsx");
Учитывайте следующие моменты при работе с атрибутами ArrayAsSingle и ExtraDelimiter:
extraDelimiter обрабатывается как строковый литерал; экранируйте любые специальные символы, которые ваш обработчик шаблонов может интерпретировать.arrayasSingle принимает логическое значение (true / false). Только true включает поведение рендеринга в одну ячейку; любое другое значение возвращает к поведению разворачивания по умолчанию.DataSet и DataTable, где столбец может быть разделён на массивы.\n или os.EOL.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.