C#读取EXCEL列数据,并画折线图(刚开始入门小白自己整理的,方便自己以后看)

首先建立一个c#dll文件,添加代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Office.Interop.Excel;
using System.Diagnostics;
using System.Reflection;

namespace ClassLibrary3
{
public class Class1
{

    #region 获取Excel某列数据

    /// <summary>

    /// 获取Excel某列数据

    /// </summary>

    /// <param name="ExcelName"></param>

    public List<string> ColumnDB = new List<string>();

    public List<string> getColumnDB(string ExcelName)

    {

        //创建 Excel对象

        Application App = new Application();

        //获取缺少的object类型值

        object missing = Missing.Value;

        //打开指定的Excel文件

        Workbook openwb = App.Workbooks.Open(ExcelName, missing, missing, missing, missing,

            missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);

        //获取选选择的工作表

        Worksheet ws = ((Worksheet)openwb.Worksheets["Sheet1"]);//方法一:指定工作表名称读取

        //Worksheet ws = (Worksheet)openwb.Worksheets.get_Item(1);//方法二:通过工作表下标读取

        //获取工作表中的行数

        int rows = ws.UsedRange.Rows.Count;

        //获取工作表中的列数

        int columns = ws.UsedRange.Columns.Count;

       // Console.WriteLine("请输入你要获取哪列数据");

       // int column = Convert.ToInt16(Console.ReadLine());
        int column = 2;

        //提取对应行列的数据并将其存入数组中

        for(int i=1;i<=rows;i++)

        {

            string a = ((Range)ws.Cells[i, column]).Text.ToString();
           // Console.WriteLine("读取的数据:" + a);//测试是否获得数据

            ColumnDB.Add(a);

        }
     /*   for (int i = 0; i < rows; i++)
        {
            Console.WriteLine(ColumnDB[i]);
        }
           */
        return ColumnDB;
        //遍历数组
    /*
        foreach (string db in ColumnDB)

        {

            Console.WriteLine("列表中的数据"+db);//查看数组中的数据,测试是否存储成功

        }

        Console.ReadLine();
     *
           */
    }
    

    #endregion

}

}
此处借鉴:https://blog.csdn.net/kevinfan2011/article/details/83960232 大佬代码
稍作修改,注释的非常清楚:
public List ColumnDB = new List();
泛型,字符串类型,创建了一个容量可根据需要自动扩充的列表
Workbooks.Open方法(Excel):
Excel.Workbook workbook = ExcelApplication.Workbooks.Open(fileName)
参考:https://www.cnblogs.com/ilookbo/p/5531698.html
接下来,右键解决方案,找到管理解决方案的NUGET包(若VS2010没有,可以再添加,可自行搜索),在里面搜索excel

右键解决方案,找到管理解决方案的NUGET包

搜索excel,安装即可

接下来生成解决方案,即创建完dll

新建项目,添加工具:按钮、chart,布局如下
在这里插入图片描述
添加代码,我将所有代码都附上了:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ClassLibrary3;

namespace Curve
{
public partial class Form1 : Form
{
int count = 0;
List data = new List();
List dataFloat = new List();

    private void updateChart()
    {
        
        chart1.Series[0].Points.Clear();
        for (int i = 0; i < count; i++)
        {
            chart1.Series[0].Points.AddXY(i, dataFloat[i]);
        }
    }
     //更新chart表格

    public Form1()
    {
        InitializeComponent();
    }

    private void btn_DrawSignal_Click(object sender, EventArgs e)
    {
        Class1 hanshu = new Class1();
        data = hanshu.getColumnDB("C:/Users/ASUS/Desktop/6.xlsx");
        foreach (var v in data)
        {
            count++;
        }
       //遍历data列表,找出列表元素数目
        
        for (int i = 0; i < count; i++)
        {
            dataFloat.Add(Convert.ToSingle(data[i]));   //将string类型强制转换为double
        } 
        

        updateChart();             
    }
}

}

运行即可:

在这里插入图片描述
代码都实测可用,三十注意添加点的效率太慢,我画了8万个点用了四分钟左右,本来想做个信号图,六十万个点,电脑卡死。请求大佬教教该怎么解决这个问题!谢谢

这是刚开始入门小白自己整理的,方便以后自己改正查看,如有那边不妥,欢迎指正0.0。

  • 3
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值