Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Aspose.Cells 支持通过 Smart Markers 将数组数据渲染到单个单元格中。通过同时使用 ArrayAsSingle 属性和 ExtraDelimiter 属性,开发人员可以控制数组元素在单个单元格内的分隔方式,从而为报表和模板提供灵活的格式化选项。
Aspose.Cells 中的 Smart Markers 是一项基于模板的强大功能,允许您使用 &=DataSource.Field 等标记表达式动态填充电子表格数据。该标记放置在设计者工作簿中,当模板由 WorkbookDesigner 处理时,这些标记将被所提供数据源中的值替换。
默认情况下,当 Smart Marker 引用一个数组属性(例如 &=DataSource.Numbers)时,引擎会展开数组并将每个元素放置到相邻的单独单元格中——可以横向排列在一行中,也可以纵向排列在一列中。虽然此行为在许多场景下都很方便,但在某些情况下,您可能更倾向于将整个数组渲染到单个单元格中,并将元素连接起来,以您选择的分隔符进行分隔。
ArrayAsSingle 和 ExtraDelimiter 属性在 Smart Marker 标签内一起使用,正好可以满足这一需求。它们使您能够保持报表布局的紧凑性和可预测性,同时仍能原生使用数组数据源。
当 Smart Marker 引用数组属性时,Aspose.Cells 默认会将数组展开到多个单元格中。例如,针对一个包含四个值的 string[],使用诸如 &=Product.Tags 这样的标记,会将每个值分别放置到自己的单元格中,从而将其他模板内容向外推挤,并可能破坏精心设计的报表布局。
在许多实际场景中,默认的展开行为是不可取的:
如果没有内置机制,开发人员将不得不在 Java 中预处理数据——在将数组绑定到工作簿设计器之前,先将数组连接为带分隔符的字符串。这会导致逻辑重复、使数据模型复杂化,并增加出错的可能性。ArrayAsSingle 和 ExtraDelimiter 属性通过在 Smart Marker 内部以声明方式处理格式化问题,消除了这种变通方法的必要性。
在 Smart Markers 中使用 ArrayAsSingle 和 ExtraDelimiter 属性具有以下几个优势:
ArrayAsSingle 和 ExtraDelimiter 属性作为键值对传递给标准 Smart Marker 的圆括号内。一般语法如下:
&=DataSource.ArrayProperty(arrayasSingle=true, extraDelimiter=", ")
该标记由以下部分组成:
&=DataSource.ArrayProperty — 标准的 Smart Marker,引用绑定数据源上的数组属性。arrayasSingle=true — 指示引擎将整个数组渲染到单个单元格中。只有值 true 才会触发单单元格行为。extraDelimiter=", " — 定义放置在数组元素之间的分隔符。该值是一个字符串字面量;它可以为空、单个字符或多个字符的字符串。extraDelimiter 属性接受任何字符串字面量,包括多字符分隔符、自定义文本或转义序列(如 \n 表示换行分隔的输出)。如果数组为空,则结果单元格将留空。
以下工作流程描述了如何使用 Smart Markers 将数组渲染到单个单元格中。
String[]、int[] 或任何其他受支持的数组类型。Workbook,添加标题行,并放置一个引用数组属性的 Smart Marker 单元格,该属性带有 arrayasSingle 和 extraDelimiter 属性。WorkbookDesigner 对象,将设计者工作簿附加到该对象上,并使用 setDataSource 方法绑定您的数据源。WorkbookDesigner.process() 方法以展开 Smart Markers 并将真实数据填充到工作簿中。import com.aspose.cells.*;
class Product {
public String[] Tags;
}
public class CodeRunner {
public static void main(String[] args) throws Exception {
Product product = new Product();
product.Tags = new String[] { "C#", "Aspose", "SmartMarker", "Excel" };
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
worksheet.getCells().get("A1").putValue("Tags");
worksheet.getCells().get("A2").putValue("&=Product.Tags(arrayasSingle=true, extraDelimiter=\", \")");
WorkbookDesigner designer = new WorkbookDesigner();
designer.setWorkbook(workbook);
designer.setDataSource("Product", product);
designer.process();
workbook.save("output_arraySingle.xlsx");
}
}
import com.aspose.cells.*;
class Student
{
public int[] Scores;
}
public class CodeRunner
{
public static void main(String[] args) throws Exception
{
Student student = new Student();
student.Scores = new int[] { 95, 88, 76, 100, 67 };
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
worksheet.getCells().get("A1").putValue("Scores");
StringBuilder joined = new StringBuilder();
for (int i = 0; i < student.Scores.length; i++)
{
if (i > 0) joined.append(" - ");
joined.append(student.Scores[i]);
}
worksheet.getCells().get("A2").putValue(joined.toString());
workbook.save("output_numericArray.xlsx");
}
}
class Order
{
private String[] items;
public String[] getItems()
{
return items;
}
public void setItems(String[] items)
{
this.items = items;
}
}
在使用 ArrayAsSingle 和 ExtraDelimiter 属性时,请牢记以下几点:
extraDelimiter 的值被视为字符串字面量;对模板处理器可能解释的特殊字符进行转义。arrayasSingle 属性接受布尔值(true / false)。只有 true 才会触发单单元格行为;任何其他值都会回退到默认的展开行为。DataSet 和 DataTable 数据源。\n 或 System.lineSeparator() 作为分隔符值。Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.