首页 > 编程语言 >如何在 C# 中以编程的方式将 CSV 转为 Excel XLSX 文件

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

时间:2024-03-04 11:58:31浏览次数:31  
标签:中以 XLSX C# worksheet chart BTC new CSV

前言

Microsoft Excel的XLSX格式以及基于文本的CSV(逗号分隔值)格式,是数据交换中常见的文件格式。应用程序通过实现对这些格式的读写支持,可以显著提升性能。在本文中,小编将为大家介绍如何在Java中以编程的方式将【比特币-美元】市场数据CSV文件转化为XLSX 文件。

具体操作步骤如下:

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

1)创建项目

(1)使用 Visual Studio 2022,创建一个新项目 ( CTRL+SHIFT+N ) 并 在下拉列表中 选择 C#所有平台WebAPI ,以快速找到项目类型ASP.NET Core Web API,然后选择它并单击 下一步。

(2)输入BTC_Chart_WebService 作为 项目名称 并选择 项目的 位置,然后单击下一步。

(3)对于 Framework ,选择 .NET 6.0(长期支持)或更高版本。在对话框中为其他配置选择默认值后,单击 “下一步”。

(4)这将创建一个模板 ASP.NET Core WebAPI 项目,其中包含返回天气预报的示例代码。我们的项目中不需要它,但我们可以重用和重新调整控制器的用途。

使用 解决方案资源管理器 ( CTRL+ALT+L ) 将项目中的控制器文件(在 Controllers下)重命名为 BTCChartController.cs

在 Controllers下,将 WeatherForecastController.cs 文件重命名为 BTCChartController.cs ,当更改文件名时, Visual Studio 将提示您并询问您是否还要更改项目中的所有代码引用 - 在对话框中单击“是” :

然后在解决方案资源管理器 ( CTRL+ALT+L ) 中,右键单击 “依赖项” 并选择 “管理 NuGet 包”:

2)查询数据

创建一个CSV类,用于从AlphaVantage Web服务查询CSV格式的月度BTC-USD数据。小编在该类中创建一个getCsvData方法用于获取具体的数据(在代码中替换成你的API密钥即可):

// Get the CSV data from the AlphaVantage web service
private string GetCsvData()
{
    string csv;
    string API_KEY = "YOUR_KEY_HERE";
    string QUERY_URL = $"https://www.alphavantage.co/query?function=DIGITAL_CURRENCY_MONTHLY&symbol=BTC&market=USD&apikey={API_KEY}&datatype=csv";
    Uri queryUri = new Uri(QUERY_URL);
    using (HttpClient client = new HttpClient())
    {
        Task<string> t = client.GetStringAsync(queryUri);
        while (!t.IsCompleted)
            t.Wait();
        csv = t.Result;
    }
    return csv;
}

3)加载CSV

现在,将Get()方法的代码替换为以下代码片段。这会:

  • 将HttpGet属性 中的 Name更新 为 GetBTC-USDChartWorkbook
  • 将返回类型更改为 FileContentResult,
  • 注释掉与天气预报相关的代码
  • 添加调用GetCsvData() 的代码 并将其导入到新 工作簿中

BTCChartController.Get

[HttpGet(Name = "GetBTC-USDChartWorkbook")]
//public IEnumerable<WeatherForecast> Get()
public FileContentResult Get()
{
    //return Enumerable.Range(1, 5).Select(index => new WeatherForecast
    //{
    //    Date = DateTime.Now.AddDays(index),
    //    TemperatureC = Random.Shared.Next(-20, 55),
    //    Summary = Summaries[Random.Shared.Next(Summaries.Length)]
    //})
    //.ToArray();
 
    // first get CSV data
    string csv = GetCsvData();
 
    // create new workbook
    IWorkbook wbk = new Workbook();
    // open CSV data in GcExcel using MemoryStream
    using (Stream s = new MemoryStream())
    {   // convert to byte array using UTF8 encoding
        byte[] arr = System.Text.Encoding.UTF8.GetBytes(csv.ToCharArray());
        s.Write(arr);
        s.Seek(0, SeekOrigin.Begin);
        // open CSV in workbook
        wbk.Open(s, OpenFileFormat.Csv);
    }

4)处理CSV

接下来,复制以下代码(在上一个代码片段中的using块之后)以处理 工作簿中的 CSV :

BTCChartController.Get(续)

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

首先,代码获取 包含 CSV数据的IWorksheet ,并重新排列列以将 Volume 列放在 Date 和 Open列之间。然后,它创建一个 名为 BTC_Monthly的表 ,其中包含 CSV 数据并自动调整 表中的列。

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

5)返回XLSX

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

    // Save Workbook to XLSX and return from web service as "BTC_Chart.xlsx"
    using (MemoryStream ms = new MemoryStream())
    {
        wbk.Save(ms, SaveFileFormat.Xlsx);
        ms.Seek(0, SeekOrigin.Begin);
        byte[] bytes = ms.ToArray();
        return File(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "BTC_Chart.xlsx");
    }
} // Get()

运行结果如下所示:

总结

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

标签:中以,XLSX,C#,worksheet,chart,BTC,new,CSV
From: https://www.cnblogs.com/powertoolsteam/p/18044483

相关文章

  • JSON.parse解析字符串报错-SyntaxError: Unexpected token ‘ in JSON at position 报
    “SyntaxError:Unexpectedtoken’inJSONatposition”报错原因是因为解析的字符串对象中,JSON.parse无法识别;JSON.parse可以将标准的json类型数据转换为JavaScript对象,如果数据不是正确的json类型的数据则会控制台报错,可能会阻断代码的正常运行我们可以写一个函数来......
  • Tomcat学习
     1.3Tomcat目录bin下,startup.bat, startup.sh,shutdown.bat,shutdown.shconflogging.properties日志相关配置confserver.xml需要配置,部署应用端口指定conftomcat-users.xml用户,角色以及功能confweb.xml全局的web.xml,局部覆盖全局1.4浏览器请求服务器流程......
  • AIGC下一步:如何用AI再度重构或优化媒体处理?
    让媒资中“沉默的大多数”再次焕发光彩。邹娟|演讲者编者按AIGC时代下,媒体内容生产领域随着AI的出现也涌现出更多的变化与挑战。面对AI的巨大冲击,如何优化或重构媒体内容生产技术架构?在多样的应用场景中媒体内容生产技术又有着怎样的实践效果?LiveVideoStackCon2023深圳站邀请......
  • ElementPlus+Vue3使用cdn方式编写页面及引入图标
    完整代码1<!DOCTYPEhtml>2<htmllang="en">34<head>5<metacharset="UTF-8">6<metaname="viewport"content="width=1000,initial-scale=1.0">7<title>模型管理&......
  • ACWing 247.亚特兰蒂斯
    #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>usingnamespacestd;constintN=100010;intn;structSegment{doublex,y1,y2;intk;booloperator<(con......
  • 现有Sketch数据结构|持续更新|菜鸟学习
    现有Sketch数据结构基本原理写在前面比较简略,偏差之类的理论推导建议去读论文,如果有误麻烦指出套话由GPT生成Sketch的基础是概要数据结构(SummaryDataStructure),它是一种可以以较小的内存消耗来表示和估计大规模数据集的某些属性的数据结构。概要数据结构通过对原始数据进行......
  • 初识c语言—c语言的初步认识和一个简单的程序
    C语言是什么编程语言(编程语言是控制计算机的一系列指令,他又固定的格式和词汇。同时也叫计算机语言(计算机语言是,人和计算机通讯的语言))C语言的特点语言简洁,紧凑,使用方便运算符丰富数据类型丰富表达方式灵活允许直接访问物理地址,对硬件进行操作生成的目标代码质量高,程序执......
  • STM32标准库RTC时钟
    STM32标准库RTC时钟1.RTC时钟配置1.1头文件引用需要引用以下头文件或打开以下模块:#include"stm32f10x_rcc.h"//包含RCC时钟配置头文件#include"stm32f10x_pwr.h"//包含PWR时钟配置头文件#include"stm32f10x_rtc.h"//包含RTC时钟配置头文件#inclu......
  • 高级别智能驾驶业务系列:自研CPS车辆精准对位系统
        在港口无人水平运输场景中,经纬恒润提供了车、路、网、云、图全栈式自研解决方案,包含了自动驾驶车辆、路侧车路协同、全场高可靠定位、5G远程驾驶、运营调度管理、数字孪生、仿真系统、高精地图等专业模块,组成了一套完整的智慧港口解决方案。    车辆精准对位系......
  • FRPC动态启动
    需求目前FRP客户端默认是带配置文件启动,有部分需求是按需动态启动,所以可由应用程序动态管理和启停。以TCP为例查看参数frpctcp-h`RunfrpcwithasingletcpproxyUsage:frpctcp[flags]Flags:--bandwidth_limitstringbandwidthlimit--bandwidth_limit_mo......