C#读取Excel表格的方法

最近做自己的独立游戏的时候需要从excel表格中读取配置信息,生成一些xml的配置文件,看了一些别人的代码,然后封装了下自己的工具,来做一些总结

核心代码如下

using System;
using System.Data.OleDb;
using System.Data;

namespace ReadExcelHandler
{
    class ReadDataHandler
    {
        public static void ExcelToDataTable(string strExcelFileName)
        {
            //定义数据源
            string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + 
             strExcelFileName + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1';";

            //连接到数据源
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            DataTable sheetNames = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new 
                object[] { null, null, null, "TABLE" });
            
            //读取每个excel下的sheet
            foreach(DataRow dr in sheetNames.Rows)
            {
                string strSheetName = dr[2].ToString();

                //定义sql
                string strExcel = string.Format("select * from [{0}]",strSheetName);
                ////定义存放的数据表
                DataSet ds = new DataSet();

                //适配数据源
                OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
                adapter.Fill(ds, strSheetName);
                
                //把每个配置表的内容存为特定的Xml文件
                //string writeXmlFile = AppDomain.CurrentDomain.BaseDirectory + @"cfg/" + 
                //strSheetName + ".xml";
                string writeXmlFile = "..\\..\\..\\..\\..\\Assets\\" + "cfg\\" + 
                     strSheetName + ".xml";
                ds.WriteXml(writeXmlFile);

                Console.WriteLine("{0}读取完成", strSheetName);
            }

            conn.Close();
            
        }


    }
}

使用方法

using System;
using System.IO;
using ReadExcelHandler;


namespace ReadExcelTemp
{
    /// 
    ///  自动化读取配置表生成配置文件
    /// 
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("开始读取");
            //读取玩该文件夹下所有配置表表
            string[] files = Directory.GetFiles("..\\..\\..\\..\\..\\"+ "xls");

            for (int i = 0; i < files.Length; i++)
            {
                Console.WriteLine("读取" + files[i]);
                ReadDataHandler.ExcelToDataTable(files[i]);
            }

            Console.ReadKey();

        }
    }
}

Tips 如果遇到以下错误可以参照

错误 1:

System.InvalidOperationException:“未在本地计算机上注册“Microsoft.ACE.OLEDB.8.0”提供程序。”

原因:没有安装excel2007的驱动

可以下载驱动,然后安装就行了

驱动连接如下

链接:https://pan.baidu.com/s/118uwbR6mP-8GCeaCB_DJxw 
提取码:fyfa 

错误2:

无法读取当前个文件格式之类的错误

原因:数据源的驱动设置错误或者没有指定程序在32位平台运行

可以把数据源配置改为"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strExcelFileName + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1';";

换一下下划线的版本号即可,如果还不行可以修改项目属性,如下图所示,必须指定在32位平台运行

C#读取Excel表格的方法_第1张图片


如果还不行,要想了解详细的错误信息如何解决可以参考下这位大神的文章

https://blog.csdn.net/YYZZHC999/article/details/79367114

最后感谢您的观看,如果驱动连接挂了,请在文章下留言,我会及时更新连接

 

 

 

你可能感兴趣的:(c#学习笔迹)