Unity 读取Excel文件转换XML格式文件

此方法用到 excel.dll 

下载连接 点击打开链接

using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Xml;
using Excel;
using System.Data;

/// <summary>
/// 创建XML表
/// </summary>
public class CreateXML : MonoBehaviour
{
    /// <summary>
    /// 表头
    /// </summary>
    public const string xmlRoot = "FZW_MASK_XML_TABLE";

    //Excel名字
    public string ExcelPathName;

    //xml文件路径;
    private string Path;
    //表文件名
    public string xmlName = "XMLTABLE.xml";
    //表名
    public string xmlTabeName = "XMLTABLE";

    //第一行字段
    private string[] tableTop;

    //表List
    private List<string[]> tableList=new List<string[]>();

   
    private void Awake()
    {
        //设置路径
        Path = Application.streamingAssetsPath + "/XMLTable/" + xmlName;

        //读取Excel
        ReadExcel(ExcelPathName);
    }


    /// <summary>
    /// 读Excel
    /// </summary>
    /// <param name="ExcelPath"></param>
    /// <returns></returns>
    public void ReadExcel(string ExcelPath)
    {
        //excel文件位置 /MaskGame/ReadExcel/excel文件名
        FileStream stream = File.Open(Application.dataPath + "/MaskGame/ReadExcel/" + 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;//获取列数(多少列字段)
        
        
        //初始化字段
        tableTop = new string[columns];
       

        //存字段
        for (int i = 0; i < columns; i++)
        {
            tableTop[i]= result.Tables[0].Rows[0][i].ToString();
        }

        //从第二行开始读 读信息
        for (int i = 1; i < rows; i++)
        {
            //临时表
            string[] table = new string[columns];
            //赋值表信息
            for (int j = 0; j < columns; j++)
            {
                string nvalue = result.Tables[0].Rows[i][j].ToString();
                table[j] = nvalue;   
            }
            //添加到List
            tableList.Add(table);
        }
    }




    /// <summary>
    /// 创建表格
    /// </summary>
    private void CreateXMLTable()
    {
        //路径错误
        if (File.Exists(Path)) return;

        //xml对象;
        XmlDocument xmll = new XmlDocument();
        //跟节点
        XmlElement Root = xmll.CreateElement(xmlRoot);

        for (int i = 0; i < tableList.Count; i++)
        {
            XmlElement xmlElement = xmll.CreateElement(xmlTabeName);
            xmlElement.SetAttribute(tableTop[0], tableList[i][0]);

            for (int j = 0; j < tableTop.Length-1; j++)
            {
                XmlElement infoElement = xmll.CreateElement(tableTop[j + 1]);
                infoElement.InnerText = tableList[i][j + 1];
                xmlElement.AppendChild(infoElement);
            }
            Root.AppendChild(xmlElement);
        }

        xmll.AppendChild(Root);
        xmll.Save(Path);

    }

    void OnGUI()
    {
        if (GUI.Button(new Rect(200, 200, 500, 500), "创建XML表"))
        {
            CreateXMLTable();
            Debug.Log("创建成功: " + Path);
        }
        
    }
}



发布了40 篇原创文章 · 获赞 36 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/yzx5452830/article/details/79787398
今日推荐