using UnityEngine; using System.IO; using OfficeOpenXml; using System.Collections.Generic; using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; using System; public class ExcelReader : MonoBehaviour { public List workDatas = new List(); private void Awake() { } void Start() { //string filePath = Path.Combine(Application.streamingAssetsPath, "数据表.xlsx"); //ReadExcelFile(filePath, "低压公配变"); //for (int i = 0; i < workDatas.Count; i++) //{ // if (workDatas[i].Tip.Contains("工单详情")) // { // for (int j = 0; j < workDatas[i].workOrderDatas.Count; j++) // { // Debug.LogError(workDatas[i].workOrderDatas[j].workOrderNumTip + " " + workDatas[i].workOrderDatas[j].workOrderNum); // } // } //} } public void ReadExcelFile(string filePath, string name) { // 加载文件 FileInfo file = new FileInfo(filePath); // 检查文件是否存在 if (!file.Exists) { Debug.LogError("文件不存在: " + filePath); return; } // 读取文件 using (ExcelPackage package = new ExcelPackage(file)) { ExcelWorksheet worksheet = package.Workbook.Worksheets[name]; // 假设只有一个工作表 // 获取表格有多少列和行 int columns = worksheet.Dimension.Columns; int rows = worksheet.Dimension.Rows; //Debug.Log("共有:" + columns + "列 " + rows + "行"); // 从第二行开始读取数据(假设第一行是表头) for (int row = 1; row <= 20; row++) { for (int col = 1; col <= columns; col++) { // 获取单元格的值 string cellValue = worksheet.Cells[row, col].Value?.ToString(); if (!string.IsNullOrEmpty(cellValue)) { ////Debug.Log("第" + row + "行,第" + col + "列的值为:" + cellValue); if (cellValue.Contains("&")) { AddExcelPackage(worksheet, row, col, columns); } } } } } } public void AddExcelPackage(ExcelWorksheet worksheet, int row, int col, int colMax) { WorkData workData = new WorkData(); workData.Tip = worksheet.Cells[row, col].Value?.ToString(); List workOrderDatas = new List(); for (int i = col; i < colMax; i++) { if (worksheet.Cells[row + 1, i].Value?.ToString() != "*") { WorkOrderData workOrderData = new WorkOrderData(); workOrderData.workOrderNumTip = worksheet.Cells[row + 1, i].Value?.ToString(); workOrderData.workOrderNum = worksheet.Cells[row + 2, i].Value?.ToString(); if (!string.IsNullOrEmpty(workOrderData.workOrderNumTip) || !string.IsNullOrEmpty(workOrderData.workOrderNum)) { workOrderDatas.Add(workOrderData); } } } workData.workOrderDatas = workOrderDatas; workDatas.Add(workData); } } /// /// 工单详情,第二行和第三行的所有数据 /// [Serializable] public class WorkOrderData { public string workOrderNumTip; public string workOrderNum; } [Serializable] public class WorkData { public string Tip; public List workOrderDatas; }