using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; using OfficeOpenXml; using Script.Excel; using Script.UI; using UnityEngine; using UnityEngine.UI; using ZXL.Excel; using ZXL.ID; public class ExcelManager : SingleManager { private SingleChoice_QuestionBank_A_Data _aData; private SingleChoice_QuestionBank_B_Data _bData; private TureOrFalse_QuestionBank_C_Data _cData; private MultipleChoice_QuestionBank_D_Data _dData; private Player_Data _playerData; public SingleChoice_QuestionBank_A_DataInfo GetRandomAInfo => _aData.RandomGet(); public SingleChoice_QuestionBank_B_DataInfo GetRandomBInfo => _bData.RandomGet(); public TureOrFalse_QuestionBank_C_DataInfo GetRandomCInfo => _cData.RandomGet(); public MultipleChoice_QuestionBank_D_DataInfo GetRandomDInfo => _dData.RandomGet(); public Player_DataInfo GetPlayerInfo => _playerData.GetAndRemove(); public ExcelManager() { var aData = ReadExcel.SelectATable("QuestionBank_A"); _aData = new SingleChoice_QuestionBank_A_Data(aData); var bData = ReadExcel.SelectBTable("QuestionBank_B"); _bData = new SingleChoice_QuestionBank_B_Data(bData); var cData = ReadExcel.SelectCTable("QuestionBank_C"); _cData = new TureOrFalse_QuestionBank_C_Data(cData); var dData = ReadExcel.SelectDTable("QuestionBank_D"); _dData = new MultipleChoice_QuestionBank_D_Data(dData); var payerData = ReadExcel.SelectPlayerTable("PlayerData"); _playerData = new Player_Data(payerData); Debug.Log("excel data load finish !!"); } public SingleChoice_QuestionBank_A_DataInfo GetRandomA() { return _aData.RandomGet(false); } #region 存入内容并导出Excel文件 public void SaveAndExp(SaveExcelData data) // 目前弃用了 { string path = Application.streamingAssetsPath + "/程序输出数据" + DateTime.Now.Ticks + ".xlsx"; FileStream fs = new FileStream(path, FileMode.OpenOrCreate); using (var pck = new ExcelPackage(fs)) { var sheet = pck.Workbook.Worksheets.Add("Sheet1"); for (int i = 0; i < data.hands.Length; i++) { sheet.SetValue(1, i + 2, data.hands[i]); } for (var i = 0; i < data.infos.Count; i++) { for (var j = 0; j < data.infos[i].strings.Length; j++) { //第0行、列留白 // sheet.Cells[i + 2, j + 2].Value = data.infos[i].strings[j]; sheet.SetValue(i + 2, j + 2, data.infos[i].strings[j]); } } pck.Save(); } fs.Dispose(); } public void SaveAndExpIndex(SaveDataInfo info, int index) { string path = Application.streamingAssetsPath + "/程序输出数据" + ".xlsx"; FileStream fs = new FileStream(path, FileMode.OpenOrCreate); using (var pck = new ExcelPackage(fs)) { ExcelWorksheet worksheet; if (pck.Workbook.Worksheets.Count <= 0) { worksheet = pck.Workbook.Worksheets.Add("Sheet1"); } else { worksheet = pck.Workbook.Worksheets[1]; } if (index == 0) { string[] hands = new[] { "选手ID", "赛项", "科目", "第一题", "第二题", "第三题", "第四题", "第五题", "分数", "正确数量", "错误数量", "未答数量", "正确率", "用时" }; for (int i = 0; i < hands.Length; i++) { worksheet.SetValue(1, i + 2, hands[i]); } } int j = 0; worksheet.SetValue(index + 2, j + 2, info.id); worksheet.SetValue(index + 2, j + 3, info.title); worksheet.SetValue(index + 2, j + 4, info.subject); int num = 0; foreach (var infoAnswerData in info.answerDatas) { StringBuilder sb = new StringBuilder(); sb.AppendLine("题目:"); sb.AppendLine(infoAnswerData.title); sb.AppendLine("选项:"); foreach (var option in infoAnswerData.options) { sb.AppendLine(option); } sb.AppendLine("正确答案:"); foreach (var answer in infoAnswerData.answers) { sb.AppendLine(answer); } sb.AppendLine("回答结果:"); foreach (var result in infoAnswerData.result) { sb.AppendLine(result); } worksheet.SetValue(index + 2, num + j + 5, sb.ToString()); num++; } worksheet.SetValue(index + 2, j + 10, info.score); worksheet.SetValue(index + 2, j + 11, info.trueCount); worksheet.SetValue(index + 2, j + 12, info.falseCount); worksheet.SetValue(index + 2, j + 13, info.nullCount); worksheet.SetValue(index + 2, j + 14, info.accuracy); worksheet.SetValue(index + 2, j + 15, info.time); pck.Save(); } fs.Dispose(); } public void SaveAndExpIndex(SaveData saveData) { List infos = saveData.DataInfos; string path = Application.streamingAssetsPath + "/程序输出数据" + DateTime.Now.Ticks + ".xlsx"; FileStream fs = new FileStream(path, FileMode.OpenOrCreate); using (var pck = new ExcelPackage(fs)) { ExcelWorksheet worksheet; if (pck.Workbook.Worksheets.Count <= 0) { worksheet = pck.Workbook.Worksheets.Add("Sheet1"); } else { worksheet = pck.Workbook.Worksheets[1]; } string[] hands = new[] { "选手ID", "赛项", "科目", "第一题", "第二题", "第三题", "第四题", "第五题", "分数", "正确数量", "错误数量", "未答数量", "正确率", "用时" }; for (int i = 0; i < hands.Length; i++) { worksheet.SetValue(1, i + 2, hands[i]); } int index = 0; foreach (var info in infos) { int j = 0; worksheet.SetValue(index + 2, j + 2, info.id); worksheet.SetValue(index + 2, j + 3, info.title); worksheet.SetValue(index + 2, j + 4, info.subject); int num = 0; foreach (var infoAnswerData in info.answerDatas) { StringBuilder sb = new StringBuilder(); sb.AppendLine("题目:"); sb.AppendLine(infoAnswerData.title); sb.AppendLine("选项:"); foreach (var option in infoAnswerData.options) { sb.AppendLine(option); } sb.AppendLine("正确答案:"); foreach (var answer in infoAnswerData.answers) { sb.AppendLine(answer); } sb.AppendLine("回答结果:"); foreach (var result in infoAnswerData.result) { sb.AppendLine(result); } worksheet.SetValue(index + 2, num + j + 5, sb.ToString()); num++; } worksheet.SetValue(index + 2, j + 10, info.score); worksheet.SetValue(index + 2, j + 11, info.trueCount); worksheet.SetValue(index + 2, j + 12, info.falseCount); worksheet.SetValue(index + 2, j + 13, info.nullCount); worksheet.SetValue(index + 2, j + 14, info.accuracy); worksheet.SetValue(index + 2, j + 15, info.time); index++; } pck.Save(); } fs.Dispose(); } #endregion } //模拟数据写入