Unity使用Excel.dll对Excel读取,使用EPPlus实现对Excel写入

前言

读写excel是游戏开发中经常用到的技术,程序可以使用策划、文案写好的excel对数据进行修改,达到简易配合的目的。今天记录一下对Excel的读写过程。

准备

下图是所需类库。Excel.dll、EPPlus.dll、ICSharpCode.SharpZLib.dll在网上可以搜到。
备注:
1.你的unity版本是多少,去对应的安装目录中取dll
2.System.Data.dll 在D:\Program Files\Unity2017.2\Editor\Data\Mono\lib\mono\2.0
3.I18N开头的dll 在 D:\Program Files\Unity2017.2\Editor\Data\Mono\lib\mono\unity
Unity使用Excel.dll对Excel读取,使用EPPlus实现对Excel写入_第1张图片

1.读取excel

需要注意读取excel默认第一行第一列是索引0开始,写入是索引1开始。另外要using System.Data使用DataSet储存excel数据。这里0表示第一个sheet, 如果你有多个sheet的话,可以写sheet的名字,例如result.Tables[“mySheet”].Rows.Count

代码示例:

		FileStream stream = File.Open(Application.dataPath + "/Excels/鬼船新攻略文字.xlsx", FileMode.Open, FileAccess.Read); //读取文件流
        IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); //读取Excel
        DataSet result = excelReader.AsDataSet(); //储存数据
        //int columns = result.Tables[0].Columns.Count; //列数 0开始
        int rows = result.Tables[0].Rows.Count; //行数
        //验证数据长度是否匹配 这个根据具体项目取舍
        if(rows != TipsInfoController.instance.allTips.Count)
        {
            Debug.LogError("数据长度不匹配!加载失败!");
            return;
        }
        for (int i = 0; i < rows; i++)
        {
            string nvalue = result.Tables[0].Rows[i][1].ToString();
            TipsInfoController.instance.allTips[i].text.中文 = nvalue; //写入 根据具体项目自己改动
            EditorUtility.SetDirty(TipsInfoController.instance.allTips[i]); //Unity中保存
        }

2.写入Excel

需要using OfficeOpenXml

Epplus备注:
教程及常用设置

代码示例:

    static readonly string _filePath = Application.dataPath + "/Excels/对话.xlsx"; //存储位置
    static readonly string _sheetName = "Sheet1"; //表格名称
    public static void ReadTalks()
    {
        FileInfo _excelName = new FileInfo(_filePath);
        if (_excelName.Exists)
        {
            //删除旧文件,并创建一个新的 excel 文件。
            _excelName.Delete();
            _excelName = new FileInfo(_filePath);
        }
        //通过ExcelPackage打开文件
        using (ExcelPackage package = new ExcelPackage(_excelName))
        {
            //在 excel 空文件添加新 sheet,并设置名称。
            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(_sheetName);
            //添加列名
            worksheet.Cells[1, 1].Value = "ID(对话名称)";
            worksheet.Cells[1, 2].Value = "立绘(文件名,不显示则不填)";
            worksheet.Cells[1, 3].Value = "名字";
            worksheet.Cells[1, 4].Value = "对话内容(对话顺序以先后顺序排序)";

            int whichRow = 2;//第一行已经写好了,所以从第二行开始
            // 读取数据的长度,这个根据自己项目改动
            for (int i = 0; i < ScriptData.instance.talkList.Length; i++)
            {
                for (int j = 0; j < ScriptData.instance.talkList[i].talkList.Count; j++)//写入
                {
                    if(ScriptData.instance.talkList[i].name != null)
                        worksheet.Cells[whichRow, 1].Value = ScriptData.instance.talkList[i].name;
                    if (ScriptData.instance.talkList[i].talkList[j].Image != null)
                        worksheet.Cells[whichRow, 2].Value = ScriptData.instance.talkList[i].talkList[j].Image.name;
                    if (ScriptData.instance.talkList[i].talkList[j].Name != null)
                        worksheet.Cells[whichRow, 3].Value = ScriptData.instance.talkList[i].talkList[j].Name.Text;
                    if (ScriptData.instance.talkList[i].talkList[j].Text != null)
                        worksheet.Cells[whichRow, 4].Value = ScriptData.instance.talkList[i].talkList[j].Text.Text;
                    whichRow += 1;
                }
                whichRow += 1;
            }
            package.Save(); //储存
        }

你可能感兴趣的:(C#,Unity学习,游戏开发,游戏,excel,unity,unity3d)