posts - 609,  comments - 13,  views - 64万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

需要引用:using System.Data.OleDb;

复制代码
/// <summary>
        /// 获取Excel数据,包含所有sheet
        /// </summary>
        /// <param name="fullPath"></param>
        /// <returns></returns>
        public DataSet GetExcelTables(string fullPath)
        {
            DataSet ds = new DataSet();
            if (File.Exists(fullPath))
            {
                //HDR=No 第一行就是数据
                string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fullPath + ";Extended Properties='Excel 12.0;HDR=No;IMEX=1;'";
                using (OleDbConnection conn = new OleDbConnection(strConn))
                {
                    conn.Open();
                    foreach (DataRow item in conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows)
                    {
                        string tableName = item[2].ToString().Trim();
                        DataTable dt = new DataTable();
                        dt.TableName = tableName;
                        OleDbDataAdapter odda = new OleDbDataAdapter("select * from [" + tableName + "]", conn);
                        odda.Fill(dt);
                        ds.Tables.Add(dt);
                    }
                }
            }
            return ds;
        }
复制代码

Excel有两种格式:.xls(office2003) 和 .xlsx(office2007),xlsx需要用12.0的驱动,

下载地址:http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe

.xlsx(office2007)连接字符串:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=表格绝对路径;Extended Properties='Excel 12.0;HDR=No;IMEX=1;'

.xls(office2003)连接字符串:Provider=Microsoft.Jet.Oledb.4.0;Data Source=表格绝对路径;Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'

说明:HDR=No,意思是表格中的第一行就是数据,不是表头,系统会自动生成列;HDR=Yes,意思是表格中的第一行是表头,系统会把第一行当做DataTable的列名。

当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。
当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。
特别注意:IMEX=1的时候,读取Excel的时候会把科学计数法的数字自动转字符串,我就被这个地方坑了一下,导致我总是读不到对的数据。

posted on   邢帅杰  阅读(619)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示