当前位置:   article > 正文

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

如何在 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依赖项

<dependency>
  <groupId>com.grapecitysoft.documents</groupId>
  <artifactId>gcexcel</artifactId>
  <version>7.0.1</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

2)查询数据

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

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

3)加载CSV

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

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4)处理CSV

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

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

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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

5)返回XLSX

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

public static void main(String[] args) {
    Workbook workbook = AnalysisCSV(CSV.getCsvData());
    processWorkbook(workbook);
    workbook.save("比特币月度数据.xlsx");
}
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

运行结果如下所示:
在这里插入图片描述

最后附上完整的代码工程文件:https://gitee.com/GrapeCity/btc_-chart_-web-service

总结

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

扩展链接:

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/237546
推荐阅读
相关标签
  

闽ICP备14008679号