C#连接Excel

近期有需求要用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、写代码测试

先放图如下:


上面是从EXCEL直接读取到的数据。

代码如下:

                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文件所塞满。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章