如何在 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>

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;
}

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;
}

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);
}

5)返回XLSX

最後,創建一個Main類,並添加相關方法作爲整個程序的入口,右鍵執行程序後就可以獲得最終的Excel XLSX文件。

public static void main(String[] args) {
    Workbook workbook = AnalysisCSV(CSV.getCsvData());
    processWorkbook(workbook);
    workbook.save("比特幣月度數據.xlsx");
}

運行結果如下所示:

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

總結

以上就是在Java 中以編程的方式將 CSV轉化爲 Excel XLSX 文件的全過程,如果您想了解更多信息,歡迎點擊這篇參考資料訪問。

擴展鏈接:

輕鬆構建低代碼工作流程:簡化繁瑣任務的利器

優化預算管理流程:Web端實現預算編制的利器

如何在.NET電子表格應用程序中創建流程圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章