[]
        
(Showing Draft Content)

数据绑定

GcExcel支持数据绑定,允许您生成数据绑定报表并在Excel中查看。数据绑定可以通过将数据源与表单(工作表)、单元格或表格绑定来实现。您还可以对绑定路径执行JSON 导入导出以与SpreadJS交互。

表单绑定

可以使用 IWorksheet 接口的 setDataSource 方法将数据源绑定到工作表。表单绑定支持 JSON字符串、DataTable 或 IEnumerable 集合。每个工作表只能有一个数据源。

可以将 IWorksheet 接口的 setAutoGenerateColumns 方法设置为 true ,自动将数据源字段绑定到工作表。

如果要手动将数据源字段绑定到工作表,需要将IWorksheet接口的 setAutoGenerateColumns 方法设置为false,并使用 IRange 接口的 setBindingPath 方法设置数据源字段到工作表的绑定路径。

例如,如果要在D列中显示 "TeamName" 字段, "TeamName" 字段的绑定路径将为D列。

请参阅下面的示例代码以手动将数据源绑定到工作表。

 public void sheetBinding() {

    // create a new workbook
    Workbook workbook = new Workbook();
    // Fetch default worksheet
    IWorksheet worksheet = workbook.getWorksheets().get(0);

    // create datasource
    SalesData datasource = new SalesData();
    datasource.records = new ArrayList();

    // Add data
    SalesRecord record1 = new SalesRecord();
    record1.area = "NorthChina";
    record1.salesman = "Hellen";
    record1.product = "Apple";
    record1.productType = "Fruit";
    record1.sales = 120;
    datasource.records.add(record1);

    SalesRecord record2 = new SalesRecord();
    record2.area = "NorthChina";
    record2.salesman = "Hellen";
    record2.product = "Banana";
    record2.productType = "Fruit";
    record2.sales = 143;
    datasource.records.add(record2);

    SalesRecord record3 = new SalesRecord();
    record3.area = "NorthChina";
    record3.salesman = "Hellen";
    record3.product = "Kiwi";
    record3.productType = "Fruit";
    record3.sales = 322;
    datasource.records.add(record3);
    

    // Set AutoGenerateColumns to false
    worksheet.setAutoGenerateColumns(false);

    // Bind columns manually
    worksheet.getRange("A:A").getEntireColumn().setBindingPath("area");
    worksheet.getRange("B:B").getEntireColumn().setBindingPath("salesman");
    worksheet.getRange("C:C").getEntireColumn().setBindingPath("product");
    worksheet.getRange("D:D").getEntireColumn().setBindingPath("productType");
    worksheet.getRange("E:E").getEntireColumn().setBindingPath("sales");

    // Set data source
    worksheet.setDataSource(datasource.records);

    // save to an excel file
    workbook.save("SheetBinding.xlsx");

}

public static class SalesRecord {
    public int sales;
    public String productType;
    public String product;
    public String salesman;
    public String area;
}

public static class SalesData {
    public ArrayList records;
}

单元格绑定

可以使用 IWorksheet 接口的 setDataSource 方法将数据源绑定到单元格。单元格绑定所支持的数据源是自定义对象。

IRange 接口的 setBindingPath 方法可以用来设置数据源字段到单元格的绑定路径。

请参阅下面的示例代码以将数据源绑定到单元格。

public void cellBinding() {

    // create a new workbook
    Workbook workbook = new Workbook();
    // Fetch default worksheet
    IWorksheet worksheet = workbook.getWorksheets().get(0);

    // Add Data
    SalesRecord record = new SalesRecord();
    record.area = "NorthChina";
    record.salesman = "Hellen";
    record.product = "Apple";
    record.productType = "Fruit";
    record.sales = 120;

    // Set binding path for cells
    worksheet.getRange("A1").setBindingPath("area");
    worksheet.getRange("B2").setBindingPath("salesman");
    worksheet.getRange("C2").setBindingPath("product");
    worksheet.getRange("D3").setBindingPath("productType");

    // Set data source
    worksheet.setDataSource(record);

    // save to an excel file
    workbook.save("CellBinding.xlsx");

}

public static class SalesRecord {
    public int sales;
    public String productType;
    public String product;
    public String salesman;
    public String area;
}

表格绑定

可以使用 IWorksheet 接口的 setDataSource 方法将数据源绑定到表格。表格绑定所支持的数据源是 DataSet、JSON字符串或包含 IEnumerable 类型字段或属性的自定义对象。 ITable 接口的 setBindingPath 方法可以用来设置数据源到表格的绑定路径。

可以将 IWorksheet 接口的 setAutoGenerateColumns 方法设置为 true ,自动将数据源字段绑定到表格。该方法默认值也是 true 。

手动将数据源字段绑定到表格,可以将 IWorksheet 接口的 setAutoGenerateColumns 方法设置为 false ,并使用 ITableColumn 接口的 setDataField 方法设置数据源字段到表格的绑定路径。

例如, DataTable 中的 "T1" 绑定到第一个表, "ID" 字段绑定到表的第一列。

GCExcelJava还提供了 ITable.setExpandBoundRows 方法用来处理一个绑定的表格对数据源的更改该如何响应。当属性设置为true时,该绑定表格会使用整行操作自动调整行数以适应数据源更改。当此属性设置为false(默认值)时,表的行为类似于Excel,只添加或删除表内的单元格而不是整行,以反映数据源的更改。

请参阅下面的示例代码以手动将数据源绑定到表格。

public void tableBinding() {
    
    // create a new workbook
    Workbook workbook = new Workbook();
    // Fetch default worksheet
    IWorksheet worksheet = workbook.getWorksheets().get(0);

    // create datasource
    SalesData datasource = new SalesData();
    datasource.records = new ArrayList();

    // Add data
    SalesRecord record1 = new SalesRecord();
    record1.area = "NorthChina";
    record1.salesman = "Hellen";
    record1.product = "Apple";
    record1.productType = "Fruit";
    record1.sales = 120;
    datasource.records.add(record1);

    SalesRecord record2 = new SalesRecord();
    record2.area = "NorthChina";
    record2.salesman = "Hellen";
    record2.product = "Banana";
    record2.productType = "Fruit";
    record2.sales = 143;
    datasource.records.add(record2);

    SalesRecord record3 = new SalesRecord();
    record3.area = "NorthChina";
    record3.salesman = "Hellen";
    record3.product = "Kiwi";
    record3.productType = "Fruit";
    record3.sales = 322;
    datasource.records.add(record3);

    // Add a table
    ITable table = worksheet.getTables().add(worksheet.getRange("B2:F5"), true);

    // Set not to auto generate table columns
    table.setAutoGenerateColumns(false);

    // Set table binding path
    table.setBindingPath("records");

    // Set ExpandBoundRows to true.
    table.setExpandBoundRows(true);

    // Set table column data field
    table.getColumns().get(0).setDataField("area");
    table.getColumns().get(1).setDataField("salesman");
    table.getColumns().get(2).setDataField("product");
    table.getColumns().get(3).setDataField("productType");
    table.getColumns().get(4).setDataField("sales");

    // Set custom object as data source
    worksheet.setDataSource(datasource);

    // save to an excel file
    workbook.save("BindTableToCustomObject.xlsx");

}

public static class SalesRecord {
    public int sales;
    public String productType;
    public String product;
    public String salesman;
    public String area;
}

public static class SalesData {
    public ArrayList records;
}

限制

GcExcel支持一次性的数据绑定,即在设置数据源时,只在第一次填充数据,之后即使数据源中的数据发生变化,数据也不会改变。