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
{
    /// <summary>
    ///  自動化讀取配置表生成配置文件
    /// </summary>
    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位平臺運行


如果還不行,要想了解詳細的錯誤信息如何解決可以參考下這位大神的文章

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

最後感謝您的觀看,如果驅動連接掛了,請在文章下留言,我會及時更新連接

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章