using OfficeOpenXml; using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; using Excel; using System.Reflection; using System; using UnityEngine.UI; using UnityEditor; using System.Data; /// /// 创建Excel表 /// public class CreateExcel : MonoBehaviour { public Text mtext; List mtestList = new List(); string outPutDir; string savePutDir; const string SheetName = "monster"; void Awake() { outPutDir = Application.streamingAssetsPath + "\\" + "Excel/MyExcel.xlsx"; savePutDir = Application.streamingAssetsPath + "\\" + "Excel/MyExcel.xlsx"; } // Use this for initialization void Start() { ExcelType2WriteExcel();//写入数据 LoadExcel();//读取数据 WriteExcel(mtestList,savePutDir);//写入 ReadExcel(outPutDir);//读取 } public void ExcelType2WriteExcel() { string[] head = new string[5] { "id", "name", "level", "hp", "mp" }; string[] data1 = new string[5] { "1001", "哥布林", "50", "1000", "1000" }; string[] data2 = new string[5] { "1002", "猫妖", "70", "7000", "7000" }; string[] data3 = new string[5] { "1003", "牛头怪", "100", "100000", "100000" }; string[] data4 = new string[5] { "1004", "精英僵尸", "200", "200000", "200000" }; List data = new List(); data.Add(head); data.Add(data1); data.Add(data2); data.Add(data3); data.Add(data4); CreateExcels(savePutDir, SheetName, data); } void LoadExcel() { List data = ReadExcelFuncTwo(outPutDir, SheetName); if (data == null || data.Count == 0) return; string allData = ""; for (int i = 0; i < data.Count; i++) { string rowData = ""; for (int k = 0; k < data[i].Length; k++) { rowData += data[i][k] + " "; } allData += rowData + "\n"; } // print(allData); mtext.text = allData; } #region --ExcelFashion 1---- /// ///返回数据的集合 ///数据的格式为 每一行为一条数据 ///例:赵一|党员|1年|赵一.png| /// /// public List ReadExcel(string moutPutDr) { // StreamingAssets目录下的 党员信息.xlsx文件的路径:Application.streamingAssetsPath + "/党员信息.xlsx" FileStream fileStream = File.Open(moutPutDr, FileMode.Open, FileAccess.Read); IExcelDataReader excelDataReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream); // 表格数据全部读取到result里 DataSet result = excelDataReader.AsDataSet(); // 获取表格有多少列 int columns = result.Tables[0].Columns.Count; // 获取表格有多少行 int rows = result.Tables[0].Rows.Count; // 根据行列依次打印表格中的每个数据 List excelDta = new List(); string value; string all; //第一行为表头,不读取 for (int i = 1; i < rows; i++) { value = null; all = null; for (int j = 0; j < columns; j++) { // 获取表格中指定行指定列的数据 value = result.Tables[0].Rows[i][j].ToString(); if (value == "") { continue; } all = all + value + "|"; } if (all != null) { print(all); excelDta.Add(all); } } return excelDta; } /// /// list内容格式 /// 赵一|党员|1年|赵一.png| /// /// public void WriteExcel(List newList, string savePutDir) { //自定义excel的路径 //string path = Application.streamingAssetsPath + "/党员信息.xlsx"; // print(Application.dataPath); FileInfo newFile = new FileInfo(savePutDir); if (newFile.Exists) { //创建一个新的excel文件 newFile.Delete(); newFile = new FileInfo(savePutDir); } //通过ExcelPackage打开文件 using (ExcelPackage package = new ExcelPackage(newFile)) { //在excel空文件添加新sheet ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("message"); //添加列名 worksheet.Cells[1, 1].Value = "姓名"; worksheet.Cells[1, 2].Value = "职务"; worksheet.Cells[1, 3].Value = "党龄"; worksheet.Cells[1, 4].Value = "图片名"; for (int i = 0; i < newList.Count; i++) { string[] messages = newList[i].Split('|'); //赵一|党员|1年|赵一.png| string itemName = messages[0]; string itemWork = messages[1]; string itemYear = messages[2]; string imageName = messages[3]; //添加一行数据 int num = i + 2; worksheet.Cells["A" + num].Value = itemName; worksheet.Cells["B" + num].Value = itemWork; worksheet.Cells["C" + num].Value = itemYear; worksheet.Cells["D" + num].Value = imageName; } //保存excel package.Save(); print("重写完成"); } } #endregion #region --ExcelFashion 2---- /// /// 保存数据到新的Excel表中 ///数据的格式为 每一行为一条数据 /// void CreateExcels(string excelpath, string sheetname, List data) { if (data == null || data.Count == 0) return; FileInfo fileInfo = new FileInfo(excelpath); if (fileInfo.Exists) { //创建一个新的excel文件 fileInfo.Delete(); fileInfo = new FileInfo(excelpath); } using (ExcelPackage package = new ExcelPackage(fileInfo)) { ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(sheetname); for (int i = 0; i < data.Count; i++) { for (int k = 0; k < data[i].Length; k++) { worksheet.Cells[i + 1, k + 1].Value = data[i][k]; } } package.Save(); } Debug.Log("导出Excel成功"); } /// /// 读取Excel表 /// /// 表路径 /// sheet名称 public static List ReadExcelFuncTwo(string excelpath, string sheetname) { FileStream fileStream = File.Open(excelpath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); ExcelPackage pck = new ExcelPackage(new MemoryStream(), fileStream); ExcelWorkbook ewb = pck.Workbook; ExcelWorksheet ew = ewb.Worksheets[sheetname]; int columns = ew.Dimension.End.Column;//获取列数 int rows = ew.Dimension.End.Row;//获取行数 List result = new List(); //第一行为表头,不读取 for (int i = 1; i <= rows; i++) { string[] rowData = new string[columns]; for (int j = 1; j <= columns; j++) { // 获取表格中指定行指定列的数据 rowData[j - 1] = ew.Cells[i, j].Value.ToString(); } result.Add(rowData); } return result; } #endregion }