项目建Editor文件夹,写工具,这里将“Excel转Txt”和“Txt转ab包”分开。

考虑到一般游戏中,Excel表格都会对应一种类型的对象,所以还需要在游戏加载,ab包被读出来时,生成对应类型的Obejct,并将他们放到集合里方便使用,以后需要更新这部分的功能。

using UnityEditor;
using UnityEngine;
using Excel;
using System.IO;
using System.Data;
using System.Text;
using System.Collections.Generic;public class LoadTableTask : Editor
{private static string excelDirPath = System.Environment.CurrentDirectory + @"\TableExcel";//excel表路径private static string txtDirPath = Application.dataPath + @"\TableTxt";//txt目录路径\private static StringBuilder builder;/// <summary>/// 根据excel表生成txt文件/// </summary>[MenuItem("BuildAsset/GenerateTxtByExcel")]public static void GenerateTxt(){//遍历目录下的excel文件,读取,生成txtif (!Directory.Exists(excelDirPath)){//Debug.Log("项目路径下没有TableExcel文件夹");//对于不存在的目录,也可以在这里新建一个Directory.CreateDirectory(excelDirPath);}if (!Directory.Exists(txtDirPath)){//Debug.Log("没有TableTxt文件夹");Directory.CreateDirectory(txtDirPath);}LoadExcel();}private static void LoadExcel(){//读excel文件DirectoryInfo dirInfo = new DirectoryInfo(excelDirPath);FileInfo[] excelFiles = dirInfo.GetFiles();for (int i = 0; i < excelFiles.Length; i++)//遍历目录下每个表{try{IExcelDataReader reader = ExcelReaderFactory.CreateOpenXmlReader(File.Open(excelDirPath + @"\" + excelFiles[i].Name, FileMode.Open, FileAccess.Read, FileShare.Read));DataSet dataSet = reader.AsDataSet();//讲excel中的内容读成DataSet的形式TurnExcelToTxt(dataSet.Tables, excelFiles[i].Name);//这里注意传进去的文件名带.xlsx后缀,要在函数中处理一下}catch (IOException err){Debug.LogError("文件" + excelFiles[i].Name + "被占用,请先关闭");Debug.LogError(err.Message);}}}/// <summary>/// 遍历每个表中的所有内容,这里只有sheet1的,如果有需要遍历其他sheet,可以改写/// </summary>private static void TurnExcelToTxt(DataTableCollection tables,string txtFileName){DataTable table = tables[0];int colNum = table.Columns.Count;int rowNum = table.Rows.Count;if (builder == null)builder = new StringBuilder();string txtFilePath = txtDirPath + @"\" + txtFileName.Split('.')[0] + ".txt";if (File.Exists(txtFilePath))File.Delete(txtFilePath);for (int i = 0; i < rowNum; i++){if (i == 2)//注释行不写进txtcontinue;for(int j = 0; j < colNum; j++)builder.Append(table.Rows[i][j].ToString()).Append('\t');builder.Append("\n");//读完一行换一行}File.AppendAllText(txtFilePath, builder.ToString(), Encoding.UTF8);//builder.Remove(0, builder.Length);}/// <summary>/// 打包成AssetBundle/// </summary>[MenuItem("BuildAsset/ToTextAssets")]public static void ToTextAssets(){DirectoryInfo dirInfo = new DirectoryInfo(txtDirPath);FileInfo[] txtFiles = dirInfo.GetFiles();AssetBundleBuild[] buildMap = new AssetBundleBuild[2];buildMap[0].assetBundleName = "tables";//要打包的资源名(ab包名)List<string> lst = new List<string>();for (int i = 0; i < txtFiles.Length; i++)//遍历目录下每个表{if (txtFiles[i].Name.EndsWith(".meta"))continue;try{lst.Add("Assets/TableTxt/" + txtFiles[i].Name);}catch (IOException err){Debug.LogError(err.Message);}}string[] resources = new string[lst.Count];//不要.meta文件for (int i = 0; i < lst.Count && i < resources.Length; i++){resources[i] = lst[i];}buildMap[0].assetNames = resources;//关联资源和ab包BuildPipeline.BuildAssetBundles("Assets/AssetBundles", buildMap,BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);AssetDatabase.Refresh();}
}

关于表结构,有一行是注释,给策划用,程序在处理时不用考虑。

【Unity3D】游戏配表Excel转Txt,并且打成ab包相关推荐

  1. Unity3D游戏开发之网络游戏服务器架构设计培训

    下面我们开始今天的Unity3D游戏开发技能培训. 我们专业培养"游戏主程",挑战20W年薪,初期学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改 ...

  2. .NET 将数据输出到WORD、EXCEL、TXT、HTM

    其实,利用ASP.NET输出指定内容的WORD.EXCEL.TXT.HTM等类型的文档很容易的.主要分为三步来完成. 一.定义文档类型.字符编码 Response.Clear(); Response. ...

  3. [Unity3D]Unity3D游戏开发Lua随着游戏的债券(于)

    ---------------------------------------------------------------------------------------------------- ...

  4. mysql导入多个txt_MySQL批量导入Excel、txt数据

    我想Excel是当今最大众化的批量数据管理软件了吧,所以我们会经常涉及到将Excel中数据导入到MySQL中的工作.网上有一些关于直接将Excel导入MySQL的教程,不知道是我安装的office不对 ...

  5. txt doc rtf html,JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例.docx

    JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例 JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例??2012-06-2 ...

  6. python分词统计词频_python jieba分词并统计词频后输出结果到Excel和txt文档方法

    前两天,班上同学写论文,需要将很多篇论文题目按照中文的习惯分词并统计每个词出现的频率. 让我帮她实现这个功能,我在网上查了之后发现jieba这个库还挺不错的. 运行环境: 安装python2.7.13 ...

  7. mysql批量导入txt数据_MySQL批量导入Excel、txt数据

    我想Excel是当今最大众化的批量数据管理软件了吧,所以我们会经常涉及到将Excel中数据导入到MySQL中的工作.网上有一些关于直接将Excel导入MySQL的教程,不知道是我安装的office不对 ...

  8. win系统excel、txt文件传到linux,行列数对不齐,乱码的的问题

    问题描述:因为自己研究需要经常跨win和linux两个平台,由于两个平台下txt编码方式不一样,经常会出现穿过去txt文件数据对不齐,无法读取的情况. 自己遇到的一个案例是,我需要把excel的气象数 ...

  9. 安卓导出Excel,txt文件工具类

    开始 安卓开发中,有时候会遇到到处文件的需求,尤其是平板上的开发,这个需求更为普遍,本文记录导出excel,txt文件的方法,并提供工具类,抛砖引玉,让大家遇到类似需求的时候,处理起来更为顺手. 导出 ...

  10. MySQL批量导入Excel、txt数据

    我想Excel是当今最大众化的批量数据管理软件了吧,所以我们会经常涉及到将Excel中数据导入到MySQL中的工作.网上有一些关于直接将Excel导入MySQL的教程,不知道是我安装的office不对 ...

最新文章

  1. 电信运营商如何玩转大数据?
  2. html中列表的嵌套
  3. vue项目使用encode_Vue项目中使用xlsx-style导出有格式的表格
  4. monty python flying circus-巨蟒剧团之飞翔的马戏团 第一季
  5. 利用JPEG制作更快,更准确的神经网络
  6. python3 set_python3.x 基础三:set集合
  7. Win7电脑定时关机怎么设置
  8. python经典教程游戏_使用pygame制作经典小游戏:五子棋
  9. 【Webpack】TypeError: Cannot read property ‘tap‘ of undefined at HtmlWebpackPlugin.
  10. Windows linux子系统安装mysql
  11. 安卓系统实现播放器变速功能
  12. nacos做配置中心读取不到配置报错:Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder ‘cou
  13. 人与自然超越彩虹-下
  14. 快速选取单元格的10种方法。
  15. dr优先级默认_OSPF路由器不能成为DR/BDR唯一的方法:DR优先级=0
  16. LeetCode 11-20 题
  17. Ping IP时出现 request time out怎么解决?
  18. 格式化硬盘出现/dev/sdb2 is apparently in use by the system错误
  19. unity3D游戏开发实战原创视频讲座系列13之帽子戏法游戏开发(预告)
  20. Linux4.1初始化流程详细注释——第一阶段head.S与head-common.S

热门文章

  1. matlab 异常,Matlab 2017b 异常信息。程序奔溃。
  2. linux上的mysql数据库恢复
  3. 伺服驱动器cn1引脚定义_关于三菱驱动器CN1端口的接线-专业自动化论坛-中国工控网论坛...
  4. 一看就懂的Android APP开发入门教程
  5. Keil与ADS软件冲突问题解决办法
  6. 【机器学习基石】概述(一)
  7. jsp html5 模板,JSP标准模板库
  8. vs 编译nmake工程
  9. 怎么修改探索者服务器地址,探索者可不可以修改快捷键???
  10. Java入门基础 安装并配置Java软件和JDK