using UnityEngine; using Excel; using System.Data; using System.IO; using System.Collections.Generic; using System.Linq; using OfficeOpenXml; using OfficeOpenXml.Table; using Unity.VisualScripting; namespace ZXL.Excel { public class ReadExcel { //public static string Excel = "Book"; public static List SelectPlayerTable(string name, string sheetName = "Sheet1") { string excelName = name + ".xlsx"; List array = new List(); var objs = ReadExcel.Read(excelName, sheetName); var xLeng = objs.GetLength(1); var yLeng = objs.GetLength(0); for (var i = 2; i < yLeng; i++) //列 { string id = objs[i, 1].ToString().Replace(" ", ""); string playerName = objs[i, 2].ToString().Replace(" ", ""); Player_DataInfo info = new Player_DataInfo( id, playerName ); array.Add(info); } return array; } public static List SelectATable(string name, string sheetName = "Sheet1") { string excelName = name + ".xlsx"; List array = new List(); var objs = ReadExcel.Read(excelName, sheetName); var xLeng = objs.GetLength(1); var yLeng = objs.GetLength(0); for (var i = 2; i < yLeng; i++) //列 { string id = objs[i, 1].ToString().Replace(" ", ""); string topic = objs[i, 2].ToString().Replace(" ", ""); // var strings = objs[i, 3].ToString().Replace(" ", "").Split("\n"); string[] options = ConvertToStrings_Option(objs[i, 3].ToString()); CheckLog(objs[i, 3].ToString(), options, 4, i); string[] answer = ConvertToStrings_Answer(objs[i, 4].ToString()); SingleChoice_QuestionBank_A_DataInfo info = new SingleChoice_QuestionBank_A_DataInfo( id, topic, options, answer ); array.Add(info); } return array; } static string[] ConvertToStrings_Option(string str) { string s = str; s = str.Replace(" ", ""); s = s.Replace("\n", ""); var strings = s.Split(";"); var removeNullStrings = RemoveNullStrings(strings); return removeNullStrings; } static string[] ConvertToStrings_Answer(string str) { string s = str; s = str.Replace(" ", ""); s = s.Replace("\n", ""); var strings = s.Split(","); var removeNullStrings = RemoveNullStrings(strings); return removeNullStrings; } static string[] RemoveNullStrings(string[] strings) { List list = new List(); for (var i = 0; i < strings.Length; i++) { if (strings[i] != "") list.Add(strings[i]); } return list.ToArray(); } static bool CheckLog(string str, string[] strings, int count, int number) { if (strings.Length != count) { Debug.Log($"{str}--{strings}这里不对劲{strings.Length},速查{number}"); return false; } return true; } public static List SelectBTable(string name, string sheetName = "Sheet1") { string excelName = name + ".xlsx"; List array = new List(); var objs = ReadExcel.Read(excelName, sheetName); var xLeng = objs.GetLength(1); var yLeng = objs.GetLength(0); for (var i = 2; i < yLeng; i++) //列 { string id = objs[i, 1].ToString().Replace(" ", ""); string topic = objs[i, 2].ToString().Replace(" ", ""); string[] options = ConvertToStrings_Option(objs[i, 3].ToString()); CheckLog(objs[i, 3].ToString(), options, 4, i); string[] answer = ConvertToStrings_Answer(objs[i, 4].ToString()); SingleChoice_QuestionBank_B_DataInfo info = new SingleChoice_QuestionBank_B_DataInfo( id, topic, options, answer ); array.Add(info); } return array; } public static List SelectCTable(string name, string sheetName = "Sheet1") { string excelName = name + ".xlsx"; List array = new List(); var objs = ReadExcel.Read(excelName, sheetName); var xLeng = objs.GetLength(1); var yLeng = objs.GetLength(0); for (var i = 2; i < yLeng; i++) //列 { string id = objs[i, 1].ToString().Replace(" ", ""); string topic = objs[i, 2].ToString().Replace(" ", ""); string[] options = ConvertToStrings_Option(objs[i, 3].ToString()); CheckLog(objs[i, 3].ToString(), options, 2, i); string[] answer = ConvertToStrings_Answer(objs[i, 4].ToString()); TureOrFalse_QuestionBank_C_DataInfo info = new TureOrFalse_QuestionBank_C_DataInfo( id, topic, options, answer ); array.Add(info); } return array; } public static List SelectDTable(string name, string sheetName = "Sheet1") { string excelName = name + ".xlsx"; List array = new List(); var objs = ReadExcel.Read(excelName, sheetName); var xLeng = objs.GetLength(1); var yLeng = objs.GetLength(0); for (var i = 2; i < yLeng; i++) //列 { string id = objs[i, 1].ToString().Replace(" ", ""); string topic = objs[i, 2].ToString().Replace(" ", ""); string[] options = ConvertToStrings_Option(objs[i, 3].ToString()); CheckLog(objs[i, 3].ToString(), options, 5, i); string[] answer = ConvertToStrings_Answer(objs[i, 4].ToString()); MultipleChoice_QuestionBank_D_DataInfo info = new MultipleChoice_QuestionBank_D_DataInfo( id, topic, options, answer ); array.Add(info); } return array; } /// /// 读取 Excel ; 需要添加 Excel.dll; System.Data.dll; /// /// excel文件名 /// sheet名称 /// DataRow的集合 static object[,] Read(string excelName, string sheetName) { object[,] objs = new object[,] { }; using FileStream fs = new FileStream(Application.streamingAssetsPath + "/Excel/" + excelName, FileMode.Open, FileAccess.Read, FileShare.Read); using (var pck = new ExcelPackage(fs)) { var sheet = pck.Workbook.Worksheets[sheetName]; objs = sheet.Cells.Value as object[,]; return objs; } } void CheckAndRemovePunctuationMark(string str) { } private static DataTable GetDataTable() { return new DataTable(""); } /// /// 读取 Excel ; 需要添加 Excel.dll; System.Data.dll; /// /// excel文件名 /// sheet索引 /// DataRow的集合 static DataRowCollection Read(string excelName, int sheetIndex) { string path = Application.streamingAssetsPath + "/Excel/" + excelName; //string path = Application.dataPath + "/" + excelName; FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read); IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); DataSet result = excelReader.AsDataSet(); //int columns = result.Tables[0].Columns.Count; //int rows = result.Tables[0].Rows.Count; //tables可以按照sheet名获取,也可以按照sheet索引获取 //return result.Tables[0].Rows; return result.Tables[sheetIndex].Rows; } } }