[]
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支持一次性的数据绑定,即在设置数据源时,只在第一次填充数据,之后即使数据源中的数据发生变化,数据也不会改变。