excel导入 总结

        public static string GetConnectionString(string FileName)

        {

            if (FileName.ToLower().EndsWith("xls"))

            {

                return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0;HDR=No;IMEX=1;';Persist Security Info=False";//2003

            }

            else if (FileName.ToLower().EndsWith("xlsx"))

            {

                return "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties='Excel 12.0;HDR=No;IMEX=1;';Persist Security Info=False";//2007

            }

            else

                return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties='Text;FMT=Delimited;HDR=YES;IMEX=1;'";//读取文本文档(.csv,.txr等) 此处filename是指文本文件所在路径,不包含文件名

        }



/// <summary>

        /// 读取文件数据

        /// </summary>

        /// <param name="FileName">读取excel时,此参数是文件全路径(带文件名,eg:E:\data\abc.xls),读取文本文件时,此参数是文件路径(不带文件名 eg:E:\data)</param>

        /// <param name="SheetName">读取excel时,此参数是sheet名 eg:sheet1,读取文本文件时,此参数是文件名 eg:abc.cvs</param>

        /// <returns></returns>

        public static DataTable ToDataTable(string FileName, string SheetName)

        {

            OleDbDataAdapter adp = new OleDbDataAdapter("select * from [" + SheetName + "]",

                GetConnectionString(FileName));

            DataTable dt = new DataTable();

            adp.Fill(dt);

            return dt;

        }

  以上是主要代码

需要注意的地方:

1,03和07的链接字符串不同,写错会报错:外部表不是预期的格式  

2,cvs和txt的链接字符串和excel不同,它是指向目录的而不是文件,文件名需要在sql语句中作为sheet名给出

3,导入 cvs或txt时,每列的数据格式必须相同,否则会丢失数据。最好将所有非字符串格式的数据加上双引号

4,sheet名,必须在后边加上 $ 如:Sheet1$ 否则 :Microsoft Office Access 数据库引擎找不到对象“Sheet1”。请确定该对象存在,并正确拼写其名称和路径名。

你可能感兴趣的:(Excel)