如何在 Java 中以编程的方式将 CSV 转为 Excel XLSX 文件
前言
Microsoft Excel的XLSX格式以及基于文本的CSV(逗号分隔值)格式,是数据交换中常见的文件格式。应用程序通过实现对这些格式的读写支持,可以显著提升性能。在本文中,小编将为大家介绍如何借助葡萄城公司地Java API组件GrapeCity Documents for Excel(以下简称GcExcel)将CSV文件转化为XLSX 文件。
具体操作步骤如下:
- 创建项目(使用intelliJ IDEA创建一个新的Maven项目)
- 查询数据(使用AlphaVantage Web服务获取CSV格式的月度BTC-USD数据)
- 加载CSV
- 处理CSV(重新排列、创建表格并创建带有趋势线的图表)
- 返回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 文件的全过程,如果您想了解更多信息,欢迎点击这篇参考资料访问。
扩展链接:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
中国科学技术大学 Linux 用户协会编写:《Linux 101》在线讲义
中国科学技术大学 Linux 用户协会的数名优秀成员协力编写了《Linux 101》在线讲义,用于配套和延展“Linux 101”校内社团活动。 在线阅读:https://101.lug.ustc.edu.cn/ GitHub 仓库:https://github.com/ustclug/Linux101-docs 其面向 Linux 零基础读者,从计算机操作系统和 Linux 的起源讲起,深入浅出带领读者一步步逐渐掌握最必要的 Linux 实用知识,并在其中感悟到社区开源文化的魅力。 本书包括前言、正文及附录。正文共包括 9 章,每章的内容如下: 第 1 章主要讲述了 Linux 的文化和生态,并提供了安装流程。 第 2 章提供了一个自定义 Linux 系统和利用其设立自己专属服务器的体验指南,这一部分应配合课堂分发的工具包和虚拟机使用。 第 3 章简单提供了基本的软件安装和文件操作知识。 第 4 章全面介绍了系统的进程、服务和任务,是一块丰富的核心内容,读者应反复阅读。 第 5 章讲解了用户和用户组、文件权限以及文件系统层次结构等系统管理员必知的文件管理核心知识。 第 6 章提供了网...
- 下一篇
导入Excel文件的时候公式为【#Ref!】应该怎么解决?
前言 在我们使用Excel时,经常会遇到一个问题,就是导入Excel时公式显示为【#Ref!】的情况。这通常是因为公式中引用的单元格已被删除或对应的工作表被删除,导致原公式无法识别对应的参数而显示为【#Ref!】。 比如在一张Excel表中,sheet1 中 A1 单元格的公式为‘=Sheet2!B1’,如果 Sheet2 由于各种历史原因丢失,那么此时 sheet1 中 A1 计算结果为【#Ref!】,如果此时想查找到 Sheet2 怎么办呢?今天小编就将为大家介绍如何用葡萄城公司的Java API 组件——GrapeCity Documents for Excel(以下简称GcExcel)来查找丢失的Sheet页。 具体操作步骤 1)准备 首先创建公式 Workbook workbook = new Workbook(); IWorksheet workSheet = workbook.getWorksheets().get(0); workSheet.setName("sheet1"); workSheet.getRange(1, 1).setFormula("sheet2!F7...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Mario游戏-低调大师作品
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果