1. 程式人生 > >unity 分享一個讀取excel踩坑的方法,只限於unityeditor狀態下。

unity 分享一個讀取excel踩坑的方法,只限於unityeditor狀態下。

分享一個讀取excel的方法。

只可以再unityeditor編輯下使用

不做太多的解釋,直接上程式碼,每個方法都有註釋。

有任何問題直接留言,看到會回覆 QQ791719266 備註“CSDN 讀取excel”

資源路徑如下圖所示。下面會放litjson、excel動態庫連結。 資源如下 倒數第二個是litjson,用於轉換json格式的,需要的用,不需要的就不用搭理了

System.Data為本機安裝版本的資料檔案,路徑為Editor\Data\Mono\lib\mono\unity

using Excel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using UnityEngine;
using LitJson;
using UnityEditor;
public class ReadExcel
{
    public static List<RadarInfo> radarInfoList = new List<RadarInfo>();

    [MenuItem("GF/ReadExcel/ToJson")]
    public static void ReadExcelToJson()
    {
        GameReadExcel(Application.streamingAssetsPath + "/excel/20160602RadarInfo.xlsx");
    }

    /// <summary>
    /// 只讀Excel方法
    /// </summary>
    /// <param name="ExcelPath"></param>
    /// <returns></returns>
    public static void GameReadExcel(string ExcelPath)
    {
        FileStream stream = File.Open(ExcelPath, FileMode.Open, FileAccess.Read);
        IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);

        DataSet result = excelReader.AsDataSet();

        int rows = result.Tables[0].Rows.Count;//獲取行數
        int columns = result.Tables[0].Columns.Count;//獲取列數

        RadarInfo radarinfo = new RadarInfo();
        //從第二行開始讀
        for (int i = 1; i < rows; i++)
        {
            for (int j = 0; j < columns; j++)
            {
                string nvalue = result.Tables[0].Rows[i][j].ToString();

                if (!String.IsNullOrEmpty(nvalue))
                {
                    if (j==0)
                    {
                        radarinfo.bm00 = nvalue;
                    }
                    else if (j == 1)
                    {
                        radarinfo.bm01 = nvalue;
                    }
                   //有多少列都可以在下面增加。有更好的方法可以告訴我,我能裡有限
                    radarInfoList.Add(radarinfo);
                }
            }
        }
        //轉換為json組
        string json = JsonMapper.ToJson(radarInfoList);
         //存為txt檔案
        StreamWriter sw;
        FileInfo fi = new FileInfo(Application.dataPath + "/" + "json" + ".txt");

        if (!fi.Exists)
        {
            sw = fi.CreateText();
        }
        else
        {
            fi.Delete();
            sw = fi.CreateText();
        }

        sw.Write(json);
        sw.Close();
        sw.Dispose();
    }
}

public class RadarInfo
{
    public string bm00;
    public string bm01;
    public string bm02;
    //可增加
}