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”。请确定该对象存在,并正确拼写其名称和路径名。

posted on 2012-03-07 17:48  人在做,人在看  阅读(949)  评论(1编辑  收藏  举报