最近做自己的獨立遊戲的時候需要從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
最後感謝您的觀看,如果驅動連接掛了,請在文章下留言,我會及時更新連接