C#开发学习笔记:C#利用代码导入Excel数据

1.需要到添加引用Microsoft.Office.Interop.Excel程序集


2.编码

	    //定义全局变量
	    System.Data.DataTable dt = new System.Data.DataTable();      
	    System.Data.DataTable dt_temp = new  System.Data.DataTable();
            dt_temp.Tables[0].Merge( efDevGrid1.DataSource as System.Data.DataTable);//获取grid的表结构
            dt_temp.Tables[0].Clear();

	    //选择要导入的Excel文件
            OpenFileDialog open = new OpenFileDialog();
            open.ShowDialog();
            string fileName = open.FileName;

            if (fileName != "")
            {
                Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();//定义一个Excel文件变量
                Microsoft.Office.Interop.Excel.Workbook workbook;//定义一个Excel工作薄
                Microsoft.Office.Interop.Excel.Worksheet worksheet;//定义一个Excel文件的sheet页

		//获取Excel文件
                workbook = excel.Workbooks.Open(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                worksheet = (Worksheet)workbook.Worksheets.get_Item(1);//获取sheet页,这里默认取第一个sheet页
                int rowCount = worksheet.UsedRange.Rows.Count-1;//获取sheet页的数据行数(指非空的数据行)
                int colCount = worksheet.UsedRange.Columns.Count;//获取sheet页的列数
                Microsoft.Office.Interop.Excel.Range range1;//


                int i;
                
                for (i = 0; i < colCount; i++)
                {
                    string temp = ((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i+1]).Text.ToString();//获取单元格文本
                    if (temp.Trim() == "")
                    {
                        continue;
                    }
                    range1 = worksheet.Range[worksheet.Cells[1, i + 1], worksheet.Cells[1, i + 1]];//获取单元格
                    //dt.Columns.Add(range1.Value2.ToString());
                    string A="";
                    if (range1.Value2 != null)
                    {
                        A = range1.Value2.ToString();//获取单元格的值
                        for (int k = 0; k < dt_temp.Tables[0].Columns.Count; k++)
                        {
			    //将Excel中的列添加到数据表中
                            if (!dt.Columns.Contains(A) && dt_temp.Tables[0].Columns[k].Caption == A)
                            {    //dt.Columns.Add(range1.Value2.ToString());
                                dt.Columns.Add(dt_temp.Tables[0].Columns[k].ColumnName);
                                string c = dt_temp.Tables[0].Columns[k].DataType.ToString();
                                dt.Columns[dt_temp.Tables[0].Columns[k].ColumnName].DataType = Type.GetType(c);
                                dt.Columns[dt_temp.Tables[0].Columns[k].ColumnName].AllowDBNull = true;
                                break;
                            }
                            if (k == dt_temp.Tables[0].Columns.Count - 1)
                            {
                                if (!dt.Columns.Contains(A))
                                {
                                    dt.Columns.Add(range1.Value2.ToString());
                                }
                            }
                        }                                                   
                    }
                }
		
		//将数据行添加到数据表中
                int j;
                for (j = 1; j < rowCount; j++)
                {
                    DataRow dr = dt.NewRow();
                    for (i = 0; i < colCount; i++)
                    {
                        range1 = worksheet.Range[worksheet.Cells[j + 1, i + 1], worksheet.Cells[j + 1, i + 1]];
                        dr[i] = range1.Value2;
                    }
                    dt.Rows.Add(dr);
                }
                //
                dt_temp.Tables[0].Merge(dt);

3.说明

Microsoft.Office.Interop.Excel.Application excel

对象表示

 Excel 

应用程序本身。

Application

 

象公开了大量有关正在运行的应用程序、应用于该实例的选项以及在该实例中打开的当前用户的对象的信

息。

Microsoft.Office.Interop.Excel.Application excel

对象表示

 Excel 

应用程序本身。

Application

 

象公开了大量有关正在运行的应用程序、应用于该实例的选项以及在该实例中打开的当前用户的对象的信

息。

(1).Microsoft.Office.Interop.Excel.Application excel对象表示 Excel 应用程序本身。Application 对象公开了大量有关正在运行的应用程序、应用于该实例的选项以及在该实例中打开的当前用户的对象的信息

(2).Microsoft.Office.Interop.Excel.Workbook 类表示 Excel 应用程序中的单个工作簿

(3).Microsoft.Office.Interop.Excel.Worksheet 对象是 Worksheets 集合的成员

(4).Microsoft.Office.Interop.Excel.Range 对象是 Excel 应用程序中最常用的对象。在能够处理 Excel 内的任何范围之前,必须将它表示为 Range 对象,并处理该对象的方法和属性。Range 对象表示一个单元格、一行、一列、包含一个或多个单元格块(可以连续,也可以不连续)的单元格选定范围,甚至多个工作表中的一组单元格

(5)Type.Missing:

1.Type.Missing指的是空类型,因为有些方法你传null给它会出错的,必须要用Type.Missing.

2.表示 Type 信息中的缺少值。 使用 Missing 字段通过反射进行调用,以获取参数的默认值。如果传入一个参数值的 Missing 字段,并且该参数没有默认值,则引发 ArgumentException。

(6)引用Microsoft.Office.Interop.Excel程序集

需要修改程序集的嵌入互操作类型为false,否则可能会报编译动态表达式找不到引用的错误

参考链接:

https://wenku.baidu.com/view/a14880c23b3567ec102d8aa5.html

http://blog.sina.com.cn/s/blog_6c6780330101e4l9.html


  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值