首先建立一个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
接下来生成解决方案,即创建完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。