[]
        
(Showing Draft Content)

创建透视表

GcExcel 提供了使用指定范围或表格在电子表格中创建和添加数据透视表的功能。create 方法属于 IPivotCaches 接口,它用于为数据透视表初始化数据透视缓存,而 add 方法属于 IPivotTables 接口,它使用该缓存将新的数据透视表插入到电子表格中。

使用基于范围的数据源创建数据透视表

参考以下示例代码,在工作表中使用指定范围创建数据透视表:

// 创建一个新的工作簿。
Workbook workbook = new Workbook();

// 数据透视缓存的源数据。
Object sourceData = new Object[][]{
        {"订单 ID", "产品", "类别", "金额", "日期", "国家"},
        {1, "Bose 785593 - 0050", "消费电子产品", 4270, new GregorianCalendar(2018, 0, 6), "美国"},
        {2, "佳能 EOS 1500D", "消费电子产品", 8239, new GregorianCalendar(2018, 0, 7), "英国"},
        {3, "海尔 394L 4 星", "消费电子产品", 617, new GregorianCalendar(2018, 0, 8), "美国"},
        {4, "IFB 6.5 公斤全自动", "消费电子产品", 8384, new GregorianCalendar(2018, 0, 10), "加拿大"},
        {5, "小米 40 英寸 LED", "消费电子产品", 2626, new GregorianCalendar(2018, 0, 10), "德国"},
        {6, "森海塞尔 HD 4.40 - BT", "消费电子产品", 3610, new GregorianCalendar(2018, 0, 11), "美国"},
        {7, "iPhone XR", "手机", 9062, new GregorianCalendar(2018, 0, 11), "澳大利亚"},
        {8, "一加 7 Pro", "手机", 6906, new GregorianCalendar(2018, 0, 16), "新西兰"},
        {9, "红米 7", "手机", 2417, new GregorianCalendar(2018, 0, 16), "法国"},
        {10, "三星 S9", "手机", 7431, new GregorianCalendar(2018, 0, 16), "加拿大"},
        {11, "一加 7 Pro", "手机", 8250, new GregorianCalendar(2018, 0, 16), "德国"},
        {12, "红米 7", "手机", 7012, new GregorianCalendar(2018, 0, 18), "美国"},
        {13, "Bose 785593 - 0050", "消费电子产品", 1903, new GregorianCalendar(2018, 0, 20), "德国"},
        {14, "佳能 EOS 1500D", "消费电子产品", 2824, new GregorianCalendar(2018, 0, 22), "加拿大"},
        {15, "海尔 394L 4 星", "消费电子产品", 6946, new GregorianCalendar(2018, 0, 24), "法国"},
};

// 获取第一个工作表。
IWorksheet worksheet = workbook.getWorksheets().get(0);
        
// 将数据分配给指定范围。
worksheet.getRange("G1:L16").setValue(sourceData);
worksheet.getRange("G:L").setColumnWidth(15);
        
// 创建数据透视表。
IPivotCache pivotcache = workbook.getPivotCaches().create(worksheet.getRange("G1:L16"));
IPivotTable pivottable = worksheet.getPivotTables().add(pivotcache, worksheet.getRange("A1"), "pivottable1");
worksheet.getRange("J1:J16").setNumber格式("$#,##0.00");

// 配置数据透视表字段。
IPivotField field_Category = pivottable.getPivotFields().get("类别");
field_Category.setOrientation(PivotFieldOrientation.ColumnField);

IPivotField field_Product = pivottable.getPivotFields().get("产品");
field_Product.setOrientation(PivotFieldOrientation.RowField);

IPivotField field_Amount = pivottable.getPivotFields().get("金额");
field_Amount.setOrientation(PivotFieldOrientation.DataField);
field_Amount.setNumber格式("$#,##0.00");

IPivotField field_Country = pivottable.getPivotFields().get("国家");
field_Country.setOrientation(PivotFieldOrientation.PageField);

worksheet.getRange("A:D").getEntireColumn().autoFit();
    
// 保存为 Excel 文件。
workbook.save("CreatePivotTable.xlsx");

pivot-table-range

使用基于表格的数据源创建数据透视表

参考以下示例代码,在工作表中使用表格创建数据透视表:

// 创建一个新的工作簿。
var workbook = new Workbook();

// 创建表格的源数据。
Object[][] sourceData = new Object[][]{
    {"订单 ID", "产品", "类别", "金额", "日期", "国家"},
    {1, "Bose 785593 - 0050", "消费电子产品", 4270, new GregorianCalendar(2018, 0, 6), "美国"},
    {2, "佳能 EOS 1500D", "消费电子产品", 8239, new GregorianCalendar(2018, 0, 7), "英国"},
    {3, "海尔 394L 4 星", "消费电子产品", 617, new GregorianCalendar(2018, 0, 8), "美国"},
    {4, "IFB 6.5 公斤全自动", "消费电子产品", 8384, new GregorianCalendar(2018, 0, 10), "加拿大"},
    {5, "小米 40 英寸 LED", "消费电子产品", 2626, new GregorianCalendar(2018, 0, 10), "德国"},
    {6, "森海塞尔 HD 4.40 - BT", "消费电子产品", 3610, new GregorianCalendar(2018, 0, 11), "美国"},
    {7, "iPhone XR", "手机", 9062, new GregorianCalendar(2018, 0, 11), "澳大利亚"},
    {8, "一加 7 Pro", "手机", 6906, new GregorianCalendar(2018, 0, 16), "新西兰"},
    {9, "红米 7", "手机", 2417, new GregorianCalendar(2018, 0, 16), "法国"},
    {10, "三星 S9", "手机", 7431, new GregorianCalendar(2018, 0, 16), "加拿大"},
    {11, "一加 7 Pro", "手机", 8250, new GregorianCalendar(2018, 0, 16), "德国"},
    {12, "红米 7", "手机", 7012, new GregorianCalendar(2018, 0, 18), "美国"},
    {13, "Bose 785593 - 0050", "消费电子产品", 1903, new GregorianCalendar(2018, 0, 20), "德国"},
    {14, "佳能 EOS 1500D", "消费电子产品", 2824, new GregorianCalendar(2018, 0, 22), "加拿大"},
    {15, "海尔 394L 4 星", "消费电子产品", 6946, new GregorianCalendar(2018, 0, 24), "法国"},
};

// 将数据分配给指定范围。
IWorksheet worksheet = workbook.getWorksheets().get(0);
worksheet.getRange("G1:L16").setValue(sourceData);
worksheet.getRange("G:L").setColumnWidth(15);

// 使用范围 G1:L16 创建表格。
ITable table = worksheet.getTables().add(worksheet.getRange("G1:L16"), true);

// 使用表格作为数据源创建数据透视表。
IPivotCache pivotcache = workbook.getPivotCaches().create(table);
IPivotTable pivottable = worksheet.getPivotTables().add(pivotcache, worksheet.getRange("A1"), "pivottable1");
worksheet.getRange("J1:J16").setNumber格式("$#,##0.00");

// 配置数据透视表的字段。
IPivotField field_Category = pivottable.getPivotFields().get("类别");
field_Category.setOrientation(PivotFieldOrientation.ColumnField);

IPivotField field_Product = pivottable.getPivotFields().get("产品");
field_Product.setOrientation(PivotFieldOrientation.RowField);

IPivotField field_Amount = pivottable.getPivotFields().get("金额");
field_Amount.setOrientation(PivotFieldOrientation.DataField);
field_Amount.setNumber格式("$#,##0.00");

IPivotField field_Country = pivottable.getPivotFields().get("国家");
field_Country.setOrientation(PivotFieldOrientation.PageField);

worksheet.getRange("A:D").getEntireColumn().autoFit();

// 保存工作簿。
workbook.save("CreatePivotTableUsingTable.xlsx");

pivot-table-table

限制

GcExcel 不支持引用表格的部分区域,例如 'Table1[[Column1]:[Column3]]'。