最近做自己的独立游戏的时候需要从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
最后感谢您的观看,如果驱动连接挂了,请在文章下留言,我会及时更新连接