Unity Excel的读取写入

废话不多说,对 Excel 表的操作少不了要引入第三方库,首先我们需要引入 Excel.dll 和 ICSharpCode.SharpZipLib.dll,这两个类库在网上都能找到;然后我们还需要引入 System.Data.dll,这个类库在 Unity3D 的安装路径下的 Editor\Data\Mono\lib\mono\unity 文件夹下能找到。

using UnityEngine;
using System.Collections;
using System.IO;
using OfficeOpenXml;
using Excel;
using System.Data;
using UnityEngine.UI;

public class Excels : MonoBehaviour
{
    string Ename = "test", sheet = "Sheet1";
    public Text fd;
    public Button write, read;
    void Start()
    {
        string gg = Ename + ".xlsx";
        read.onClick.AddListener(delegate () { ReadExcel2(gg, sheet); });
        write.onClick.AddListener(delegate () { WriteExcel(gg, sheet); });
    }

    /// <summary>
    /// 读取 Excel 
    /// </summary>
    /// <param name="excelName"></param>
    /// <param name="sheetName"></param>
    public void ReadExcel(string excelName, string sheetName)
    {
        FileStream stream = File.Open(Application.streamingAssetsPath + "/" + excelName, FileMode.Open, FileAccess.Read);
        IExcelDataReader excelReadder = ExcelReaderFactory.CreateOpenXmlReader(stream);


        DataSet result = excelReadder.AsDataSet();

        int columns = result.Tables[0].Columns.Count;
        int rows = result.Tables[0].Rows.Count;

        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < columns; j++)
            {
                string gg = result.Tables[0].Rows[i][j].ToString();
                if (j % 3 == 0 && j != 0)
                {
                    fd.text += gg + "\n";
                }
                else
                {
                    fd.text += gg + "\t";
                }
            }
        }
    }


    void ReadExcel2(string excelName, string sheetName)
    {
        fd.text = "读取";
        FileStream stream = File.Open(Application.streamingAssetsPath + "/" + excelName, FileMode.Open, FileAccess.Read);
        IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
        do
        {
            // sheet name
            Debug.Log(excelReader.Name);
            while (excelReader.Read())
            {
                for (int i = 0; i < excelReader.FieldCount; i++)
                {
                    string value = excelReader.IsDBNull(i) ? "" : excelReader.GetString(i);
                    //fd.text = "读取";
                    fd.text += value;
                }
            }
        } while (excelReader.NextResult());
    }
}

如果这样写,发布后运行,也许会报错,这时我们就又需要引入第三方库了,去 Unity3D 安装路径下的Editor\Data\Mono\lib\mono\unity,找到所有 I18N 开头的类库导入Unity中,就不会报错了,如下图:
在这里插入图片描述
Excel 表的读取功能解决了,那我们如何生成一张 Excel 表,并写入数据呢?这时我们需要导入一个叫 EPPlus.dll 的类库,网上也有,大家可以自己下载。

代码如下:

 /// <summary>
    /// 写入 Excel ; 需要添加 OfficeOpenXml.dll;
    /// </summary>
    /// <param name="excelName">excel文件名</param>
    /// <param name="sheetName">sheet名称</param>
     void WriteExcel()
    {
        fd.text = "写入";
        string outputDir = Application.streamingAssetsPath + "/Test.xlsx";
        FileInfo newFile = new FileInfo(outputDir);
        if (newFile.Exists)
        {
            newFile.Delete();  // ensures we create a new workbook
            newFile = new FileInfo(outputDir);
        }
        using (ExcelPackage package = new ExcelPackage(newFile))
        {
            // add a new worksheet to the empty workbook
            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet1");
            //Add the headers
            worksheet.Cells[1, 1].Value = "ID";
            worksheet.Cells[1, 2].Value = "Product";
            worksheet.Cells[1, 3].Value = "Quantity";
            worksheet.Cells[1, 4].Value = "Price";
            worksheet.Cells[1, 5].Value = "Value";

            //Add some items...
            worksheet.Cells["A2"].Value = 12001;
            worksheet.Cells["B2"].Value = "Nails";
            worksheet.Cells["C2"].Value = 37;
            worksheet.Cells["D2"].Value = 3.99;

            worksheet.Cells["A3"].Value = 12002;
            worksheet.Cells["B3"].Value = "Hammer";
            worksheet.Cells["C3"].Value = 5;
            worksheet.Cells["D3"].Value = 12.10;

            worksheet.Cells["A4"].Value = 12003;
            worksheet.Cells["B4"].Value = "Saw";
            worksheet.Cells["C4"].Value = 12;
            worksheet.Cells["D4"].Value = 15.37;

            //save our new workbook and we are done!
            package.Save();
        }
   }

好了,Excel 表的读写操作就实现了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity读取Excel配置文件的插件有很多,其中比较常用的有NPOI和ExcelDataReader。 NPOI是 Apache 的一个开源项目,它可以帮助我们在Unity读取写入和操作Excel文件。NPOI提供了一系列的类和方法,可以很方便地打开Excel文件,读取其中的数据,并将其转换成对应的对象。我们只需要将NPOI的DLL文件导入到Unity项目中,并在代码中引入相关命名空间,就可以开始使用NPOI了。 另一个常用的插件是ExcelDataReader,它也是一个开源项目,可以在Unity读取Excel文件。与NPOI不同的是,ExcelDataReader不需要额外导入文件,它是直接在运行时解析Excel文件的。我们可以通过ExcelDataReader提供的API来打开Excel文件,并读取其中的数据。ExcelDataReader支持各种常见的Excel文件格式,包括XLS、XLSX等。 无论是使用NPOI还是ExcelDataReader,读取Excel配置文件的过程基本相似。首先,我们需要确定Excel文件的路径,然后使用相应的方法打开Excel文件。接下来,我们可以使用循环遍历的方式读取Excel表格中的每一行,然后获取每个单元格的值。在读取Excel数据后,我们可以将其转化为我们需要的数据结构,例如数组、字典或自定义的对象。最后,我们可以根据读取到的数据进行相应的处理,例如初始化游戏的配置参数或生成游戏中的物体。 总之,Unity读取Excel配置文件的插件可以帮助我们方便地获取Excel中的数据,并在游戏中进行处理和应用。根据具体需求,我们可以选择合适的插件来实现读取Excel配置文件的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

付帅v

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值