Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
ArrayAsSingle вместе с атрибутом ExtraDelimiter, разработчики могут управлять разделением элементов массива внутри одной ячейки, обеспечивая гибкое форматирование для отчётов и шаблонов.
Смарт-маркеры в Aspose.Cells — это мощная функция на основе шаблонов, которая позволяет динамически заполнять данные электронной таблицы с помощью выражений маркеров, таких как &=DataSource.Field. Маркер размещается в рабочей книге дизайнера, и когда шаблон обрабатывается WorkbookDesigner, маркеры заменяются значениями из предоставленного источника данных.
По умолчанию, когда смарт-маркер ссылается на свойство массива (например, &=DataSource.Numbers), механизм разворачивает массив и помещает каждый элемент в отдельную соседнюю ячейку — либо горизонтально по строке, либо вертикально по столбцу. Хотя такое поведение удобно во многих сценариях, существуют ситуации, в которых предпочтительнее отображать весь массив в одной ячейке, с элементами, объединёнными и разделёнными выбранным вами разделителем.
Атрибуты ArrayAsSingle и ExtraDelimiter, используемые вместе внутри тега смарт-маркера, решают именно эту задачу. Они позволяют сохранять макеты отчётов компактными и предсказуемыми, продолжая при этом работать с источниками данных массива нативно.
Когда смарт-маркер ссылается на свойство массива, Aspose.Cells по умолчанию разворачивает массив по нескольким ячейкам. Например, маркер вида &=Product.Tags для string[], содержащего четыре значения, поместит каждое значение в отдельную ячейку, смещая остальное содержимое шаблона и потенциально нарушая тщательно продуманные макеты отчётов.
Существует множество практических сценариев, в которых поведение развёртывания по умолчанию нежелательно:
Без встроенного механизма разработчики были бы вынуждены предварительно обрабатывать данные в Python — объединять массивы в строки с разделителями перед привязкой их к дизайнеру рабочей книги. Это дублирует логику, усложняет модели данных и увеличивает вероятность ошибок. Атрибуты 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, присоедините к нему рабочую книгу дизайнера и привяжите ваш источник данных с помощью метода set_data_source.WorkbookDesigner.process(), чтобы развернуть смарт-маркеры и заполнить рабочую книгу реальными данными.import jpype
import asposecells
jpype.startJVM()
from asposecells.api import Workbook
from asposecells.api import Workbook, WorkbookDesigner
class Product:
def __init__(self, tags):
self._tags = tags
def getTags(self):
return self._tags
product = Product(["C#", "Aspose", "SmartMarker", "Excel"])
workbook = Workbook()
worksheet = workbook.getWorksheets().get(0)
worksheet.getCells().get("A1").putValue("Tags")
worksheet.getCells().get("A2").putValue("&=Product.Tags(arrayasSingle=true, extraDelimiter=\", \")")
designer = WorkbookDesigner()
designer.setWorkbook(workbook)
designer.setDataSource("Product", product)
designer.process()
workbook.save("output_arraySingle.xlsx")
jpype.shutdownJVM()
import jpype
import asposecells
jpype.startJVM()
from asposecells.api import Workbook
from asposecells.api import Workbook
# Определение класса Student
class Student:
def __init__(self):
self.Scores = []
student = Student()
student.Scores = [95, 88, 76, 100, 67]
workbook = Workbook()
worksheet = workbook.getWorksheets().get(0)
worksheet.getCells().get("A1").putValue("Scores")
worksheet.getCells().get("A2").putValue(" - ".join(str(s) for s in student.Scores))
workbook.save("output_numericArray.xlsx")
jpype.shutdownJVM()
import jpype
import asposecells
jpype.startJVM()
from asposecells.api import Workbook
from asposecells.api import Workbook, WorkbookDesigner
# Определяем источник данных как словарь (эквивалент класса Order)
order = {"Items": ["Apple", "Banana", "Cherry", "Date"]}
workbook = Workbook()
sheet = workbook.getWorksheets().get(0)
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=\"; \")")
# Привязываем источник данных и обрабатываем смарт-маркеры
designer = WorkbookDesigner(workbook)
designer.setDataSource("Order", order)
designer.process()
# Сохраняем полученную рабочую книгу
workbook.save("output_comparison.xlsx")
jpype.shutdownJVM()
Учитывайте следующие моменты при работе с атрибутами ArrayAsSingle и ExtraDelimiter:
extraDelimiter обрабатывается как строковый литерал; экранируйте любые специальные символы, которые ваш обработчик шаблонов может интерпретировать.arrayasSingle принимает логическое значение (true / false). Только true запускает поведение с одной ячейкой; любое другое значение возвращается к поведению развёртывания по умолчанию.DataSet и DataTable, где столбец может быть разделён на массивы.\n или константу перевода строки платформы.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.