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 для вывода с переводом строки. Если массив пуст, результирующая ячейка остаётся пустой.
Следующий рабочий процесс описывает, как отобразить массив в одной ячейке с помощью смарт-маркеров.
list[str], list[int] или любой другой поддерживаемый тип массива.Workbook, добавьте строку заголовка и поместите ячейку смарт-маркера, ссылающуюся на свойство массива, с атрибутами arrayasSingle и extraDelimiter.WorkbookDesigner, прикрепите к нему рабочую книгу-шаблон и привяжите источник данных с помощью метода set_data_source.WorkbookDesigner.process(), чтобы развернуть смарт-маркеры и заполнить рабочую книгу реальными данными.class Product:
def __init__(self):
self.Tags = []
product = Product()
product.Tags = ["C#", "Aspose", "SmartMarker", "Excel"]
workbook = ac.Workbook()
worksheet = workbook.worksheets[0]
worksheet.cells["A1"].put_value("Tags")
worksheet.cells["A2"].put_value("&=Product.Tags(arrayasSingle=true, extraDelimiter=\", \")")
designer = ac.WorkbookDesigner()
designer.workbook = workbook
designer.set_data_source("Product", product)
designer.process()
workbook.save("output_arraySingle.xlsx")
class Student:
def __init__(self):
self.scores = []
student = Student()
student.scores = [95, 88, 76, 100, 67]
workbook = ac.Workbook()
worksheet = workbook.worksheets[0]
worksheet.cells["A1"].put_value("Scores")
worksheet.cells["A2"].put_value(" - ".join(str(s) for s in student.scores))
workbook.save("output_numericArray.xlsx")
class Order:
def __init__(self, items):
self._items = items
@property
def Items(self):
return self._items
@Items.setter
def Items(self, value):
self._items = value
order = Order(["Apple", "Banana", "Cherry", "Date"])
workbook = ac.Workbook()
sheet = workbook.worksheets[0]
cells = sheet.cells
# Раздел 1: Smart Marker по умолчанию - значения распределяются горизонтально по ячейкам
cells["A1"].put_value("Default Spreading Behavior:")
cells["A2"].put_value("&=Order.Items")
# Раздел 2: Новое отображение в одной ячейке с использованием arrayasSingle и extraDelimiter
cells["A4"].put_value("Single Cell Rendering (arrayasSingle=true):")
cells["A5"].put_value('&=Order.Items(arrayasSingle=true, extraDelimiter="; ")')
# Привязка источника данных и обработка Smart Markers
designer = ac.WorkbookDesigner(workbook)
designer.set_data_source("Order", order)
designer.process()
# Сохранение результирующей рабочей книги
workbook.save("output_comparison.xlsx")
При работе с атрибутами ArrayAsSingle и ExtraDelimiter учитывайте следующие моменты:
extraDelimiter обрабатывается как строковый литерал; экранируйте любые специальные символы, которые могут быть интерпретированы вашим обработчиком шаблонов.arrayasSingle принимает логическое значение (True / False). Только значение True активирует поведение «одна ячейка»; любое другое значение приводит к поведению развёртывания по умолчанию.DataSet и DataTable, где столбец может быть разделён на массивы.\n или os.linesep.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.