学习DsExcel的科学实践之文档创建(二)
DsExcel
admin 发布于:2025-07-18 10:54:16
阅读:loading
DsExcel是一款高速 Java Excel 电子表格 API 库,终极 Java Excel 电子表格 API 库解决方案。特别说明:只为单纯的学习摸索与自我突破,商业软件请勿直接使用于生产环境(购买商业授权)
高速 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已经够强大了,足够使用,而且开源免费,首选。
@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");
}
}
(1)示例使用了DsExcel的8.1.4版本,演示了写入一个Hello.xlsx文件,拷贝来源于官网的示例;
(2)演示了生成Xlsx格式文件,包含3个Sheet页,涉及到表格、数据筛选、公式计算、数据汇总、数据透视、统计图表,等;
(数据表格)
(数据透视)
(统计图表)
(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》;
点赞