WaiXie_QuestionSystem/Assets/Script/Excel/Read/ReadExcel.cs

267 lines
9.0 KiB
C#
Raw Normal View History

2023-12-10 12:28:20 +08:00
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<Player_DataInfo> SelectPlayerTable(string name, string sheetName = "Sheet1")
{
string excelName = name + ".xlsx";
List<Player_DataInfo> array = new List<Player_DataInfo>();
var objs = ReadExcel.Read(excelName, sheetName);
var xLeng = objs.GetLength(1);
var yLeng = objs.GetLength(0);
for (var i = 2; i < yLeng; i++) //<2F><>
{
2023-12-30 14:20:55 +08:00
string id = objs[i, 1].ToString().Replace(" ", "");
string playerName = objs[i, 2].ToString().Replace(" ", "");
2023-12-10 12:28:20 +08:00
Player_DataInfo info = new Player_DataInfo(
id,
playerName
);
array.Add(info);
}
return array;
}
public static List<SingleChoice_QuestionBank_A_DataInfo> SelectATable(string name, string sheetName = "Sheet1")
{
string excelName = name + ".xlsx";
List<SingleChoice_QuestionBank_A_DataInfo> array = new List<SingleChoice_QuestionBank_A_DataInfo>();
var objs = ReadExcel.Read(excelName, sheetName);
var xLeng = objs.GetLength(1);
var yLeng = objs.GetLength(0);
for (var i = 2; i < yLeng; i++) //<2F><>
{
2023-12-30 14:20:55 +08:00
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());
2023-12-10 12:28:20 +08:00
SingleChoice_QuestionBank_A_DataInfo info = new SingleChoice_QuestionBank_A_DataInfo(
id,
topic,
options,
answer
);
array.Add(info);
}
return array;
}
2023-12-30 14:20:55 +08:00
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<string> list = new List<string>();
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}<7D><><EFBFBD><EFBFBD>Ծ<EFBFBD>{strings.Length}<7D><><EFBFBD>ٲ<EFBFBD>{number}");
return false;
}
return true;
}
2023-12-10 12:28:20 +08:00
public static List<SingleChoice_QuestionBank_B_DataInfo> SelectBTable(string name, string sheetName = "Sheet1")
{
string excelName = name + ".xlsx";
List<SingleChoice_QuestionBank_B_DataInfo> array = new List<SingleChoice_QuestionBank_B_DataInfo>();
var objs = ReadExcel.Read(excelName, sheetName);
var xLeng = objs.GetLength(1);
var yLeng = objs.GetLength(0);
for (var i = 2; i < yLeng; i++) //<2F><>
{
2023-12-30 14:20:55 +08:00
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());
2023-12-10 12:28:20 +08:00
SingleChoice_QuestionBank_B_DataInfo info = new SingleChoice_QuestionBank_B_DataInfo(
id,
topic,
options,
answer
);
array.Add(info);
}
return array;
}
public static List<TureOrFalse_QuestionBank_C_DataInfo> SelectCTable(string name, string sheetName = "Sheet1")
{
string excelName = name + ".xlsx";
List<TureOrFalse_QuestionBank_C_DataInfo> array = new List<TureOrFalse_QuestionBank_C_DataInfo>();
var objs = ReadExcel.Read(excelName, sheetName);
var xLeng = objs.GetLength(1);
var yLeng = objs.GetLength(0);
for (var i = 2; i < yLeng; i++) //<2F><>
{
2023-12-30 14:20:55 +08:00
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());
2023-12-10 12:28:20 +08:00
TureOrFalse_QuestionBank_C_DataInfo info = new TureOrFalse_QuestionBank_C_DataInfo(
id,
topic,
options,
answer
);
array.Add(info);
}
return array;
}
public static List<MultipleChoice_QuestionBank_D_DataInfo> SelectDTable(string name, string sheetName = "Sheet1")
{
string excelName = name + ".xlsx";
List<MultipleChoice_QuestionBank_D_DataInfo> array = new List<MultipleChoice_QuestionBank_D_DataInfo>();
var objs = ReadExcel.Read(excelName, sheetName);
var xLeng = objs.GetLength(1);
var yLeng = objs.GetLength(0);
for (var i = 2; i < yLeng; i++) //<2F><>
{
2023-12-30 14:20:55 +08:00
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());
2023-12-10 12:28:20 +08:00
MultipleChoice_QuestionBank_D_DataInfo info = new MultipleChoice_QuestionBank_D_DataInfo(
id,
topic,
options,
answer
);
array.Add(info);
}
return array;
}
/// <summary>
/// <20><>ȡ Excel ; <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> Excel.dll; System.Data.dll;
/// </summary>
/// <param name="excelName">excel<65>ļ<EFBFBD><C4BC><EFBFBD></param>
/// <param name="sheetName">sheet<65><74><EFBFBD><EFBFBD></param>
/// <returns>DataRow<6F>ļ<EFBFBD><C4BC><EFBFBD></returns>
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;
}
2023-12-30 14:20:55 +08:00
}
2023-12-10 12:28:20 +08:00
2023-12-30 14:20:55 +08:00
void CheckAndRemovePunctuationMark(string str)
{
2023-12-10 12:28:20 +08:00
}
private static DataTable GetDataTable()
{
return new DataTable("");
}
/// <summary>
/// <20><>ȡ Excel ; <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> Excel.dll; System.Data.dll;
/// </summary>
/// <param name="excelName">excel<65>ļ<EFBFBD><C4BC><EFBFBD></param>
/// <param name="sheetName">sheet<65><74><EFBFBD><EFBFBD></param>
/// <returns>DataRow<6F>ļ<EFBFBD><C4BC><EFBFBD></returns>
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<65><73><EFBFBD>԰<EFBFBD><D4B0><EFBFBD>sheet<65><74><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ҳ<EFBFBD><D2B2><EFBFBD>԰<EFBFBD><D4B0><EFBFBD>sheet<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
//return result.Tables[0].Rows;
return result.Tables[sheetIndex].Rows;
}
}
}