近期有需求要用C#来读Excel里的数据。上网查到了,为了以后查询方便,所以在此做个C#连接Excel小结。
步骤如下:
1、EXCEL.DLL 制作
首先需要在自己Office文件目录拿到EXCEL.EXE文件。
我自己EXCEL版本为2016,所以在C:\Program Files\Microsoft Office\Office16\EXCEL.EXE。自己可以在自己office安装目录下面去找,很容易找到。
进一步打开VS2013(或者其他版本同理)在VS的文件目录下找到visual Studio2013 命令提示工具,通过命令提示定位到EXCEL.EXE所在地,再利用运行“tlbimp Excel.EXE Excel.dll”的命令,将EXCEL.EXE文件编译为Excel.dll文件。通过以上操作可以较为快速得到EXCEL.DLL文件。
2、添加引用
在C#中添加引用,导入自己编译生成的EXCEL.DLL文件。并在抬头编写using Microsoft.Office.Interop.Excel;
3、写代码测试
先放图如下:
代码如下:
System.Diagnostics.Stopwatch watchtime = new Stopwatch();
watchtime.Start();
object missing = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
//将新值赋给一个数组
if (excel == null)
{
MessageBox.Show("Can't create excel!");
}
else
{
excel.Visible = false; excel.UserControl = true;
Workbook wb = excel.Application.Workbooks.Open(ExcelFileName, missing, true, missing, missing, missing
, missing, missing, missing, true, missing, missing, missing, missing, missing);
//取得第一个工作薄
Worksheet ws = (Worksheet)wb.Worksheets.get_Item(1);
//取得总记录行数 (包括标题列)int rowsint = ws.UsedRange.Cells.Rows.Count; //得到行数
int columnsint = ws.UsedRange.Cells.Columns.Count;//得到列数
//获得点个数SpaceRendezvousN = rowsint - 1;
//取得数据范围区域 (不包括标题列)
Range exceldata;
string currentstr = "";
currentstr += (char)('A' + columnsint - 1);
exceldata = ws.Cells.get_Range('A' + "2", currentstr + "2" + rowsint);
object[,] arryItem = (object[,])exceldata.Value2; //get range's value
for (int i = 0; i < rowsint - 1; i++)
{
//增加一个点位
int index = this.dataGridView1.Rows.Add();
SpaceRendezvous_OriData Space_rendezvous_data = new SpaceRendezvous_OriData();
for (int j = 0; j < columnsint; j++)
{
//Item_Code列
this.dataGridView1.Rows[i].Cells[j].Value = (arryItem[i + 1, j + 1]).ToString();
}
Space_rendezvous_data.Num = Convert.ToDouble(this.dataGridView1.Rows[i].Cells[0].Value);
Space_rendezvous_data.gcpX = Convert.ToDouble(this.dataGridView1.Rows[i].Cells[1].Value);
Space_rendezvous_data.gcpY = Convert.ToDouble(this.dataGridView1.Rows[i].Cells[2].Value);
Space_rendezvous_data.gcpZ = Convert.ToDouble(this.dataGridView1.Rows[i].Cells[3].Value);
Space_rendezvous_data.x = Convert.ToDouble(this.dataGridView1.Rows[i].Cells[4].Value);
Space_rendezvous_data.y = Convert.ToDouble(this.dataGridView1.Rows[i].Cells[5].Value);
SpaceRendezvous_ControlPoints.Add(Space_rendezvous_data);
}
}
watchtime.Stop();
TimeSpan timespan = watchtime.Elapsed;
excel.Quit();
excel = null;
上面代码标红的地方就是读取Excel数据的过程,有注释很容易看懂。值得注意的是最后excel.Quit()和excel = null;需要加上去,不然的话,你的内存会被你所创建的excel文件所塞满。