如何在 Java 中以编程的方式将 CSV 转为 Excel XLSX 文件

前言

Microsoft Excel的XLSX格式以及基于文本的CSV(逗号分隔值)格式,是数据交换中常见的文件格式。应用程序通过实现对这些格式的读写支持,可以显著提升性能。在本文中,小编将为大家介绍如何借助葡萄城公司地Java API组件GrapeCity Documents for Excel(以下简称GcExcel)将CSV文件转化为XLSX 文件。

具体操作步骤如下:

  1. 创建项目(使用intelliJ IDEA创建一个新的Maven项目)
  2. 查询数据(使用AlphaVantage Web服务获取CSV格式的月度BTC-USD数据)
  3. 加载CSV
  4. 处理CSV(重新排列、创建表格并创建带有趋势线的图表)
  5. 返回XLSX

1)创建项目

(1)使用intelliJ IDEA,创建一个新项目。

(2)为项目输入项目名称"BTC_Chart_WebService",并在左侧菜单中选择Maven Archetype后选择一个项目存放位置,然后点击下一步。

(3)打开pom.xml文件并添加GcExcel依赖项

XML 复制代码
<dependency>
  <groupId>com.grapecitysoft.documents</groupId>
  <artifactId>gcexcel</artifactId>
  <version>7.0.1</version>
</dependency>

2)查询数据

创建一个CSV类,用于从AlphaVantage Web服务查询CSV格式的月度BTC-USD数据。

Java 复制代码
public static String getCsvData() {
    String csv = null;
    String apiKey = "YOUR_API_KEY";

    String queryUrl = String.format(
            "https://www.alphavantage.co/query?function=DIGITAL_CURRENCY_MONTHLY&symbol=BTC&market=USD&apikey=%s&datatype=csv",
            apiKey);

    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(queryUrl))
            .GET()
            .build();
    try {
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        csv = response.body();
    } catch (IOException | InterruptedException e) {
        e.printStackTrace();
    }

    return csv;
}

3)加载CSV

接下来,创建一个XLSX类,并添加方法AnalysisCSV,入参为csv字符串,该方法会返回一个Workbook类型的工作簿对象。

Java 复制代码
public static Workbook AnalysisCSV(String csvStr) {
    Workbook workbook = new Workbook();
    byte[] arr = csvStr.getBytes(StandardCharsets.UTF_8);
    try (InputStream s = new ByteArrayInputStream(arr)) {
        workbook.open(s, OpenFileFormat.Csv);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return workbook;
}

4)处理CSV

首先,用代码获取带有CSV数据的IWorksheet,并重排列列的顺序,将Volume列放在Date和Open列之间。然后,创建一个名为"每月比特币数据"的表格,包含CSV数据,并自动适应表中的列。

接着,在工作表中添加一个新的StockVOHLC(成交量、开盘、最高、最低、收盘)类型的图标,并覆盖整个表格范围;设置图标的标题,添加系列到图标,改变类别轴的单位为月份,更新类别轴刻度标签的方向和数字格式;然后创建三条趋势线。趋势线分别以蓝色、绿色和红色显示成交量、最高价和最低价的三个月移动平均线。

Java 复制代码
public static void processWorkbook(Workbook workbook){
    IWorksheet worksheet = workbook.getWorksheets().get(0);
    // 把第K列数据移动到B列位置
    worksheet.getRange("B:B").insert();
    worksheet.getRange("K:K").copy(worksheet.getRange("B:B"));
    worksheet.getRange("K:K").delete();

    // 获取数据范围
    IRange usedRange = worksheet.getUsedRange();

    // 创建表格
    ITable addTable = worksheet.getTables().add(usedRange, true);
    addTable.setName("每月比特币数据");
    usedRange.autoFit();

    // 创建图表
    IShape iShape = worksheet.getShapes().addChart(ChartType.StockVOHLC, 0, 0, usedRange.getWidth(), usedRange.getHeight());
    IChart chart = iShape.getChart();
    chart.getChartTitle().setText("比特币每月开盘-最高-最低-收盘-成交量");
    chart.getSeriesCollection().add(worksheet.getRange(0,0,usedRange.getRowCount(),6), RowCol.Columns,true,true);
    IAxis categoryAxis  = chart.getAxes().item(AxisType.Category);
    categoryAxis.setBaseUnit(TimeUnit.Months);
    categoryAxis.getTickLabels().setOrientation(45);
    categoryAxis.getTickLabels().setNumberFormat("d/m/yyyy");

    ITrendline voltrend  = chart.getSeriesCollection().get(0).getTrendlines().add();
    voltrend.setName("3个月移动平均成交量");
    voltrend.setType(TrendlineType.MovingAvg);
    voltrend.setPeriod(3);
    voltrend.getFormat().getLine().getColor().setRGB(Color.GetBlue());
    voltrend.getFormat().getLine().setDashStyle(LineDashStyle.RoundDot);

    ITrendline hightrend  = chart.getSeriesCollection().get(2).getTrendlines().add();
    hightrend.setName("3个月移动平均最高价");
    hightrend.setType(TrendlineType.MovingAvg);
    hightrend.setPeriod(3);
    hightrend.getFormat().getLine().getColor().setRGB(Color.GetGreen());
    hightrend.getFormat().getLine().setDashStyle(LineDashStyle.RoundDot);

    ITrendline lowtrend  = chart.getSeriesCollection().get(3).getTrendlines().add();
    lowtrend.setName("3个月移动平均最低价");
    lowtrend.setType(TrendlineType.MovingAvg);
    lowtrend.setPeriod(3);
    lowtrend.getFormat().getLine().getColor().setRGB(Color.GetRed());
    lowtrend.getFormat().getLine().setDashStyle(LineDashStyle.RoundDot);
}

5)返回XLSX

最后,创建一个Main类,并添加相关方法作为整个程序的入口,右键执行程序后就可以获得最终的Excel XLSX文件。

Java 复制代码
public static void main(String[] args) {
    Workbook workbook = AnalysisCSV(CSV.getCsvData());
    processWorkbook(workbook);
    workbook.save("比特币月度数据.xlsx");
}

运行结果如下所示:

最后附上完整的代码工程文件:gitee.com/GrapeCity/b...

总结

以上就是在Java 中以编程的方式将 CSV转化为 Excel XLSX 文件的全过程,如果您想了解更多信息,欢迎点击这篇参考资料访问。

扩展链接:

轻松构建低代码工作流程:简化繁琐任务的利器

优化预算管理流程:Web端实现预算编制的利器

如何在.NET电子表格应用程序中创建流程图

相关推荐
序安InToo18 分钟前
第6课|注释与代码风格
后端·操作系统·嵌入式
xyy12318 分钟前
C#: Newtonsoft.Json 到 System.Text.Json 迁移避坑指南
后端
洋洋技术笔记21 分钟前
Spring Boot Web MVC配置详解
spring boot·后端
JxWang0521 分钟前
VS Code 配置 Markdown 环境
后端
navms25 分钟前
搞懂线程池,先把 Worker 机制啃明白
后端
JxWang0525 分钟前
离线数仓的优化及重构
后端
Nyarlathotep011326 分钟前
gin01:初探gin的启动
后端·go
JxWang0526 分钟前
安卓手机配置通用多屏协同及自动化脚本
后端
JxWang0528 分钟前
Windows Terminal 配置 oh-my-posh
后端
SimonKing44 分钟前
OpenCode AI编程助手如何添加Skills,优化项目!
java·后端·程序员