学习DsExcel的科学实践之文档创建(二)

DsExcel
placeholder image
admin 发布于:2025-07-18 10:54:16
阅读:loading

DsExcel是一款高速 Java Excel 电子表格 API 库,终极 Java Excel 电子表格 API 库解决方案。特别说明:只为单纯的学习摸索与自我突破,商业软件请勿直接使用于生产环境(购买商业授权)

1.基本介绍

  • 高速 Java Excel 电子表格 API 库

    (1)创建、加载、编辑和保存 Excel .xlsx 电子表格;

    (2)保存至 XLSX,PDF,HTML,CSV,JSON,图片, 和SpreadJS文件;

    (3)比 Apache POI 快 2 倍以上,占用内存更少;

    (4)不依赖 Microsoft Excel;

    (5)包含 JavaScript 数据查看器在客户端上查看数据文档并选择性地与其交互;

  • Java Excel API 库概述

    Java 版 Excel 文档解决方案允许开发人员大规模加载、创建、修改、计算、保存和转换 Excel 电子表格。它支持读写 .XLSX 文件、使用自定义模板创建和共享报告,以及在 8.0 及以上版本的 Java 应用程序中部署电子表格。

  • 终极 Java Excel 电子表格 API 库解决方案

    用于无缝电子表格管理的高级 API 功能:这个功能丰富的 API 基于强大的 Excel 对象模型,支持使用 Java 无缝创建、编辑、转换和导出 Excel 文件。它支持企业应用程序的公式、图表、数据透视表、数据验证、样式设置和高性能处理。

    使用 Java 中的 .XLSX 模板构建专业的 Excel 报告:使用 Java 定义 Excel 模板,自动快速生成全面的 .xlsx 报表,例如发票、销售报告、收据、运输标签、采购订单等。绑定来自多个数据源的数据,使用图表模板、迷你图和表格创建报表,同时还支持 Microsoft Excel 公式进行快速数据计算和条件格式设置。

    跨平台 Java 开发:一次编写,随处运行:凭借对 Windows、Linux 和 macOS 的全面支持,您可以使用单一 Java 代码库创建与 Excel 兼容的电子表格应用程序。Excel 文档解决方案 Java 版可在桌面和 Web 应用中无缝运行,无需依赖 Microsoft Excel。您可以使用 Java 创建、加载、编辑、计算和导出电子表格,并部署到本地或云端,兼容 Azure、AWS 和 AWS Lambda 等平台。

  • Java Excel API 功能

    (1)生成Excel文件;

    (2)导入/导出功能;

    (3)数据可视化功能;

    (4)数据分析;

    (5)强大的计算引擎;

    (6)单元级特征;

    (7)高级功能;

Java操作Excel的库已知(或多或少的接触过)相当多的组件了,有商业的,也有免费的,它们是:Jacob、JXL、JXLS、POI、EasyPOI、EasyExcel、Aspose、Spire.Xls、Qoppa Software等等,今天这款DsExcel也是相当的强大,作为Java操作Excel的实现之一,在酌情了解它的特性后,按需有效选择即可。Apache POI已经够强大了,足够使用,而且开源免费,首选。

2.代码示例

@RunWith(JUnit4.class)
public class ExcelCreateTest {

    @Before
    public void before() {
        DsExcelRegister.register8_1_4();
    }

    /**
     * 创建Excel
     */
    @Test
    public void test() {

        // Create a new workbook
        Workbook workbook = new Workbook();

        //-----------------------------Set Value------------------------------
        Object[][] sourceData = new Object[][]{
                {"ITEM", "AMOUNT"},
                {"Income 1", 2500},
                {"Income 2", 1000},
                {"Income 3", 250},
                {"Other", 250},
        };

        Object[][] sourceData1 = new Object[][]{
                {"ITEM", "AMOUNT"},
                {"Rent/mortgage", 800},
                {"Electricity", 120},
                {"Gas", 50},
                {"Cell phone", 45},
                {"Groceries", 500},
                {"Car payment", 273},
                {"Auto expenses", 120},
                {"Student loans", 50},
                {"Credit cards", 100},
                {"Auto insurance", 78},
                {"Personal care", 50},
                {"Entertainment", 100},
                {"Miscellaneous", 50},
        };

        IWorksheet worksheet = workbook.getWorksheets().get(0);
        worksheet.getRange("B3:C7").setValue(sourceData);
        worksheet.getRange("B10:C23").setValue(sourceData1);
        worksheet.setName("Tables");

        worksheet.getRange("B2:C2").merge();
        worksheet.getRange("B2").setValue("MONTHLY INCOME");
        worksheet.getRange("B9:C9").merge();
        worksheet.getRange("B9").setValue("MONTHLY EXPENSES");
        worksheet.getRange("E2:G2").merge();
        worksheet.getRange("E2").setValue("PERCENTAGE OF INCOME SPENT");
        worksheet.getRange("E5:G5").merge();
        worksheet.getRange("E5").setValue("SUMMARY");
        worksheet.getRange("E3:F3").merge();
        worksheet.getRange("E9").setValue("BALANCE");
        worksheet.getRange("E6").setValue("Total Monthly Income");
        worksheet.getRange("E7").setValue("Total Monthly Expenses");


        //--------------------------------Set Height & Width--------------------------------
        worksheet.setStandardHeight(26.25);
        worksheet.setStandardWidth(8.43);

        worksheet.getRange("2:24").setRowHeight(27);
        worksheet.getRange("A:A").setColumnWidth(2.855);
        worksheet.getRange("B:B").setColumnWidth(33.285);
        worksheet.getRange("C:C").setColumnWidth(25.57);
        worksheet.getRange("D:D").setColumnWidth(1);
        worksheet.getRange("E:F").setColumnWidth(25.57);
        worksheet.getRange("G:G").setColumnWidth(14.285);

        //------------------------------Set Table--------------------------------------
        // Create the first table to show Income
        ITable incomeTable = worksheet.getTables().add(worksheet.getRange("B3:C7"), true);
        incomeTable.setName("tblIncome");
        incomeTable.setTableStyle(workbook.getTableStyles().get("TableStyleMedium4"));

        // Create the second table to show Expenses
        ITable expensesTable = worksheet.getTables().add(worksheet.getRange("B10:C23"), true);
        expensesTable.setName("tblExpenses");
        expensesTable.setTableStyle(workbook.getTableStyles().get("TableStyleMedium4"));

        //------------------------------Set Formulas-----------------------------------
        worksheet.getNames().add("TotalMonthlyIncome", "=SUM(tblIncome[AMOUNT])");
        worksheet.getNames().add("TotalMonthlyExpenses", "=SUM(tblExpenses[AMOUNT])");

        worksheet.getRange("E3").setFormula("=TotalMonthlyExpenses");
        worksheet.getRange("G3").setFormula("=TotalMonthlyExpenses/TotalMonthlyIncome");
        worksheet.getRange("G6").setFormula("=TotalMonthlyIncome");
        worksheet.getRange("G7").setFormula("=TotalMonthlyExpenses");
        worksheet.getRange("G9").setFormula("=TotalMonthlyIncome-TotalMonthlyExpenses");

        //----------------------------Set Styles-------------------------
        IStyle currencyStyle = workbook.getStyles().get("Currency");
        currencyStyle.setIncludeAlignment(true);
        currencyStyle.setHorizontalAlignment(HorizontalAlignment.Left);
        currencyStyle.setVerticalAlignment(VerticalAlignment.Bottom);
        currencyStyle.setNumberFormat("$#,##0.00");

        IStyle heading1Style = workbook.getStyles().get("Heading 1");
        heading1Style.setIncludeAlignment(true);
        heading1Style.setHorizontalAlignment(HorizontalAlignment.Center);
        heading1Style.setVerticalAlignment(VerticalAlignment.Center);
        heading1Style.setIncludeFont(true);
        heading1Style.getFont().setName("Century Gothic");
        heading1Style.getFont().setBold(true);
        heading1Style.getFont().setSize(11);
        heading1Style.getFont().setColor(Color.GetWhite());
        heading1Style.setIncludeBorder(false);
        heading1Style.setIncludePatterns(true);
        heading1Style.getInterior().setColor(Color.FromArgb(255, 32, 61, 64));

        IStyle percentStyle = workbook.getStyles().get("Percent");
        percentStyle.setIncludeAlignment(true);
        percentStyle.setHorizontalAlignment(HorizontalAlignment.Center);
        percentStyle.setIncludeFont(true);
        percentStyle.getFont().setColor(Color.FromArgb(255, 32, 61, 64));
        percentStyle.getFont().setName("Century Gothic");
        percentStyle.getFont().setBold(true);
        percentStyle.getFont().setSize(14);

        worksheet.getSheetView().setDisplayGridlines(false);
        worksheet.getRange("C4:C7, C11:C23, G6:G7, G9").setStyle(currencyStyle);
        worksheet.getRange("B2, B9, E2, E5").setStyle(heading1Style);
        worksheet.getRange("G3").setStyle(percentStyle);

        worksheet.getRange("E6:G6").getBorders().get(BordersIndex.EdgeBottom).setLineStyle(BorderLineStyle.Medium);
        worksheet.getRange("E6:G6").getBorders().get(BordersIndex.EdgeBottom).setColor(Color.FromArgb(255,32, 61, 64));
        worksheet.getRange("E7:G7").getBorders().get(BordersIndex.EdgeBottom).setLineStyle(BorderLineStyle.Medium);
        worksheet.getRange("E7:G7").getBorders().get(BordersIndex.EdgeBottom).setColor(Color.FromArgb(255,32,61,64));

        worksheet.getRange("E9:G9").getInterior().setColor(Color.FromArgb(255,32,61,64));
        worksheet.getRange("E9:G9").setHorizontalAlignment(HorizontalAlignment.Left);
        worksheet.getRange("E9:G9").setVerticalAlignment(VerticalAlignment.Center);
        worksheet.getRange("E9:G9").getFont().setName("Century Gothic");
        worksheet.getRange("E9:G9").getFont().setBold(true);
        worksheet.getRange("E9:G9").getFont().setSize(11);
        worksheet.getRange("E9:G9").getFont().setColor(Color.GetWhite());
        worksheet.getRange("E3:F3").getBorders().setColor(Color.FromArgb(255,32,61,64));

        //----------------------------Set Conditional Format-------------------------
        IDataBar dataBar = worksheet.getRange("E3").getFormatConditions().addDatabar();
        dataBar.getMinPoint().setType(ConditionValueTypes.Number);
        dataBar.getMinPoint().setValue(1);
        dataBar.getMaxPoint().setType(ConditionValueTypes.Number);
        dataBar.getMaxPoint().setValue("=TotalMonthlyIncome");
        dataBar.setBarFillType(DataBarFillType.Gradient);
        dataBar.getBarColor().setColor(Color.GetRed());
        dataBar.setShowValue(false);

        //--------------------------------Create pivot table--------------------------------
        IWorksheet worksheet2 = workbook.getWorksheets().add();
        worksheet2.setName("Pivot Table");

        sourceData = new Object[][]{
                {"Order ID", "Product", "Category", "Amount", "Date", "Country"},
                {1, "Carrots", "Vegetables", 4270, new GregorianCalendar(2022, 9, 6), "United States"},
                {2, "Broccoli", "Vegetables", 8239, new GregorianCalendar(2022, 8, 7), "United States"},
                {3, "Banana", "Fruit", 617, new GregorianCalendar(2022, 10, 18), "United States"},
                {4, "Banana", "Fruit", 8384, new GregorianCalendar(2022, 11, 10), "Canada"},
                {5, "Beans", "Vegetables", 2626, new GregorianCalendar(2022, 10, 10), "Germany" },
                {6, "Orange", "Fruit", 3610, new GregorianCalendar(2022, 11, 11), "United States"},
                {7, "Broccoli", "Vegetables", 9062, new GregorianCalendar(2022, 10, 11), "Australia"},
                {8, "Banana", "Fruit", 6906, new GregorianCalendar(2022, 10, 16), "New Zealand"},
                {9, "Apple", "Fruit", 2417, new GregorianCalendar(2022,11,16), "France"},
                {10, "Apple", "Fruit", 7431, new GregorianCalendar(2022, 11, 16), "Canada"},
                {11, "Banana", "Fruit", 8250, new GregorianCalendar(2022, 10, 16), "Germany"},
                {12, "Broccoli", "Vegetables", 7012, new GregorianCalendar(2022, 10, 18), "United States"},
                {13, "Carrots", "Vegetables", 1903, new GregorianCalendar(2022, 11, 20), "Germany"},
                {14, "Broccoli", "Vegetables", 2824, new GregorianCalendar(2022, 9, 24), "Canada"},
                {15, "Apple", "Fruit", 6946, new GregorianCalendar(2022, 11, 24), "France"},
        };

        worksheet2.getRange("A1:F16").setValue(sourceData);
        worksheet2.getRange("A:F").setColumnWidth(15);

        IPivotCache pivotCache = workbook.getPivotCaches().create(worksheet2.getRange("A1:F16"));
        IPivotTable pivotTable = worksheet2.getPivotTables().add(pivotCache, worksheet2.getRange("H7"), "pivotTable1");

        //--------------------------------Configure pivot table's fields--------------------------------
        IPivotField fieldCategory = pivotTable.getPivotFields().get("Category");
        fieldCategory.setOrientation(PivotFieldOrientation.RowField);

        IPivotField fieldProduct = pivotTable.getPivotFields().get("Product");
        fieldProduct.setOrientation(PivotFieldOrientation.ColumnField);

        IPivotField fieldAmount = pivotTable.getPivotFields().get("Amount");
        fieldAmount.setOrientation(PivotFieldOrientation.DataField);
        fieldAmount.setNumberFormat("$#,##0");

        IPivotField fieldCountry = pivotTable.getPivotFields().get("Country");
        fieldCountry.setOrientation(PivotFieldOrientation.PageField);


        //--------------------------------Add chart--------------------------------
        IWorksheet worksheet3 = workbook.getWorksheets().add();
        worksheet3.setName("Chart");

        IShape shape = worksheet3.getShapes().addChart(ChartType.ColumnClustered, 300, 10, 300, 300);

        shape.getChart().getChartTitle().setText("Sales Increases Over Previous Quarter");

        worksheet3.getRange("A1:D6").setValue(new Object[][]{
                {null, "Q1", "Q2", "Q3"},
                {"Belgium", 10, 25, 25},
                {"France", -51, -36, 27},
                {"Greece", 52, -85, -30},
                {"Italy", 22, 65, 65},
                {"UK", 23, 69, 69},
        });

        shape.getChart().getSeriesCollection().add(worksheet3.getRange("A1:D6"), RowCol.Columns, true, true);

        worksheet3.getRange("B1:D1").setHorizontalAlignment(HorizontalAlignment.Right);
        worksheet3.getRange("B1:D1").getFont().setBold(true);
        worksheet3.getRange("B2:D6").setNumberFormat("€#,##0");

        IAxis valueAxis = shape.getChart().getAxes().item(AxisType.Value);
        valueAxis.getTickLabels().setNumberFormat("€#,##0");

        workbook.save("resources/output/Hello_World.xlsx");
    }

}

3.示例说明

(1)示例使用了DsExcel的8.1.4版本,演示了写入一个Hello.xlsx文件,拷贝来源于官网的示例;

(2)演示了生成Xlsx格式文件,包含3个Sheet页,涉及到表格、数据筛选、公式计算、数据汇总、数据透视、统计图表,等;

image.png

(数据表格)

image.png

(数据透视)

image.png

(统计图表

4.其它说明

(1)DsExcel是mescius公司出的众多产品中的其中一款Java语言的产品,目前只知道这款Java语言产品,属于商业产品;

(2)关于Jar文件的下载可以直接从Maven中央仓库下载,下载到的Jar文件内有许多class属于加密混淆的;

(3)使用试用版本将会有对应的试用提示信息与版本限制,比如:文档水印、API最大限制调用100次、程序所在的进程限制10小时内访问有效,本系列文章中的实现属于的科学使用,不需额外关注License,又不改动Jar的任何地方,同时又恰好没有各种限制。特别说明:只为单纯的学习摸索与自我突破,商业软件请勿直接使用于生产环境(购买商业授权)

(4)官网的产品组件页面给出了大量的示例代码,至于更多的API示例实现,不作为本次学习摸索的重点,如果未科学使用则会有一些限制;

(5)截至目前(2025年7月)最新的版本为8.1.4,科学的实践只验证了与8.1.3这两个版本;

(6)相关示例输出文件下载:《示例输出.zip》;


 点赞


 发表评论

当前回复:作者

 评论列表


留言区