Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
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.