Unity 导入读取Excel表数据

先给出给出Excel DLL链接:https://download.csdn.net/download/qq_40120946/11827526

先把dell导进去

导出Excel为了打开自定义文件夹,我使用standaloneFileBrowser插件:https://download.csdn.net/download/qq_40120946/11827535

读取Excel核心代码部分:

  /// <summary>
    /// 读取EXCEL配置表
    /// </summary>
    /// <returns></returns>
    private void ReadExcelConfig(string outPutDir, out object[,] excelArray, out Dictionary<string, int> keyValues)
    {
        excelArray = new object[1, 1];
        //保存表第一行名字的字典
        keyValues = new Dictionary<string, int>();
        try
        {
            FileStream stream = File.Open(outPutDir, FileMode.Open, FileAccess.Read);
            IExcelDataReader excelDataReader = ExcelReaderFactory.CreateReader(stream);
            DataSet result = excelDataReader.AsDataSet();
            //获取第几个表
            DataTable dataTable = result.Tables[0];
            int columns = dataTable.Columns.Count;
            int rows = dataTable.Rows.Count;

            //二维数组存放数据
            excelArray = new object[rows, columns];
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < columns; j++)
                {
                    object value = dataTable.Rows[i][j];
                    if (value != null)
                    {
                        if (i == 0 && !string.IsNullOrEmpty(value.ToString()) && !keyValues.ContainsKey(value.ToString()))
                        {
                            keyValues.Add(value.ToString(), j);
                        }
                        else
                            excelArray[i, j] = value;
                    }
                    else
                    {
                        excelArray[i, j] = "";
                    }
                }
            }
            result.Clear();
            // excelDataReader.Close();
            stream.Close();
        }
        catch (Exception e)
        {
            Debug.Log(e.Message);
        }
    }

写入Excel表核心部分:

  private static void SaveStudentExcel(string path)
    {
        if (path != null && path.Length > 1)
        {
            FileInfo Info = new FileInfo(path);
            if (Info.Exists)
            {
                Info.Delete();
                Info = new FileInfo(path);
            }
            using (ExcelPackage pakeage = new ExcelPackage(Info))
            {
                ExcelWorksheet work = pakeage.Workbook.Worksheets.Add("Sheet1");
                for (int i = 0; i < TitleName.Count; i++)
                {
                    work.Cells[1, i + 1].Value = TitleName[i];
                }
                for (int i = 0; i < StudentShow.Count; i++)
                {
                    work.Cells["A" + (i + 2)].Value = i + 1;
                    work.Cells["B" + (i + 2)].Value = StudentShow[i].id;
                    work.Cells["C" + (i + 2)].Value = StudentShow[i].name;
                    work.Cells["D" + (i + 2)].Value = StudentShow[i].age;
                    work.Cells["E" + (i + 2)].Value = StudentShow[i].grade;
                    work.Cells["F" + (i + 2)].Value = StudentShow[i].score;
                }
                pakeage.Save();
            }
        }
    }

 

工具类(读取Excel表)ReadExcelTool:

public class ReadExcelTool {

    public ReadExcelTool()
    {

    }

    /// <summary>
    /// 学生信息
    /// </summary>
    public List<Student> ReadStudentInfoConfig
    {
        get
        {
            string path = Application.streamingAssetsPath + "/ExcelRead/学生信息表.xlsx";

            return GetStudentInfos(path);
        }
    }

    /// <summary>
    /// 读取学生信息excel配置表
    /// </summary>
    /// <returns></returns>
    private List<Student> GetStudentInfos(string outPutDir)
    {
        List<Student> students = new List<Student>();
        try
        {
            object[,] excelArray = new object[1, 1];
            Dictionary<string, int> keyValues = new Dictionary<string, int>();
            ReadExcelConfig(outPutDir, out excelArray, out keyValues);

            int rows = excelArray.GetLength(0);
            for (int i = 1; i < rows; i++)
            {
                Student student = new Student();
                student.id = excelArray[i, keyValues["编号"]].ToString();
                student.name = excelArray[i, keyValues["姓名"]].ToString();
                student.age = excelArray[i, keyValues["年龄"]].ToString();
                student.grade = excelArray[i, keyValues["班级"]].ToString();
                student.score = excelArray[i, keyValues["分数"]].ToString();

                students.Add(student);
            }
        }
        catch (Exception e)
        {
            Debug.Log(e.Message);
        }

        return students;
    }

    /// <summary>
    /// 读取EXCEL配置表
    /// </summary>
    /// <returns></returns>
    private void ReadExcelConfig(string outPutDir, out object[,] excelArray, out Dictionary<string, int> keyValues)
    {
        excelArray = new object[1, 1];
        //保存表第一行名字的字典
        keyValues = new Dictionary<string, int>();
        try
        {
            FileStream stream = File.Open(outPutDir, FileMode.Open, FileAccess.Read);
            IExcelDataReader excelDataReader = ExcelReaderFactory.CreateReader(stream);
            DataSet result = excelDataReader.AsDataSet();
            //获取第几个表
            DataTable dataTable = result.Tables[0];
            int columns = dataTable.Columns.Count;
            int rows = dataTable.Rows.Count;

            //二维数组存放数据
            excelArray = new object[rows, columns];
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < columns; j++)
                {
                    object value = dataTable.Rows[i][j];
                    if (value != null)
                    {
                        if (i == 0 && !string.IsNullOrEmpty(value.ToString()) && !keyValues.ContainsKey(value.ToString()))
                        {
                            keyValues.Add(value.ToString(), j);
                        }
                        else
                            excelArray[i, j] = value;
                    }
                    else
                    {
                        excelArray[i, j] = "";
                    }
                }
            }
            result.Clear();
            // excelDataReader.Close();
            stream.Close();
        }
        catch (Exception e)
        {
            Debug.Log(e.Message);
        }
    }
}

工具类(导出Excel表)WriteExcelTool:
 

public static class WriteExcelTool
{
    public static List<string> TitleName = new List<string>();

    public static List<Student> StudentShow = new List<Student>();


    /// <summary>
    /// 协同单位信息表      maki      
    /// </summary>
    public static void WriteStudentExcel(List<string> Tile, List<Student> showContent)
    {
        StudentShow = showContent;
        TitleName = Tile;
        var extensions = new[] {
                new ExtensionFilter("xlsx", "xls"),
            };
        StandaloneFileBrowser.SaveFilePanelAsync("学生信息表", "", "学生信息表", extensions, SaveStudentExcel);
    }

    private static void SaveStudentExcel(string path)
    {
        if (path != null && path.Length > 1)
        {
            FileInfo Info = new FileInfo(path);
            if (Info.Exists)
            {
                Info.Delete();
                Info = new FileInfo(path);
            }
            using (ExcelPackage pakeage = new ExcelPackage(Info))
            {
                ExcelWorksheet work = pakeage.Workbook.Worksheets.Add("Sheet1");
                for (int i = 0; i < TitleName.Count; i++)
                {
                    work.Cells[1, i + 1].Value = TitleName[i];
                }
                for (int i = 0; i < StudentShow.Count; i++)
                {
                    work.Cells["A" + (i + 2)].Value = i + 1;
                    work.Cells["B" + (i + 2)].Value = StudentShow[i].id;
                    work.Cells["C" + (i + 2)].Value = StudentShow[i].name;
                    work.Cells["D" + (i + 2)].Value = StudentShow[i].age;
                    work.Cells["E" + (i + 2)].Value = StudentShow[i].grade;
                    work.Cells["F" + (i + 2)].Value = StudentShow[i].score;
                }
                pakeage.Save();
            }
        }
    }
}

 

测试代码:

public class Student
{
    public string id { get; set; }
    public string name { get; set; }
    public string age { get; set; }
    public string grade { get; set; }
    public string score { get; set; }
}
public class ExcelTest : MonoBehaviour {

    public Transform item;
    public RectTransform parent;

    private List<Student> students;

	// Use this for initialization
	void Start () {
        students = new List<Student>();
        ReadExcelTool excelReadAnd = new ReadExcelTool();
        students.AddRange(excelReadAnd.ReadStudentInfoConfig);
        Debug.Log(students.Count);
        if (students.Count <= 0) return;
        foreach (var s in students)
        {
            var obj = Instantiate(item, parent);
            obj.gameObject.SetActive(true);
            obj.GetChild(0).GetComponent<Text>().text = s.id;
            obj.GetChild(1).GetComponent<Text>().text = s.name;
            obj.GetChild(2).GetComponent<Text>().text = s.age;
            obj.GetChild(3).GetComponent<Text>().text = s.grade;
            obj.GetChild(4).GetComponent<Text>().text = s.score;
        }
        //导出EXcel表
        WriteExcelTool.WriteStudentExcel(new List<string>() { "序号", "编号", "姓名", "年龄", "班级","分数" }, students);
    }
	
}

 

显示效果如下:

 

注意:1、unity运行时不要打开excel表否则会读取不到

2、IExcelDataReader 是否要关闭问题,这个原因我没找到,在给定的项目中,容易闪退,所以我屏蔽了但没影响

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值