using UnityEngine; using System.IO; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using NPOI.HSSF.UserModel; using TMPro; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System; using System.Reflection; public class ReadExlAndSetValue : MonoBehaviour { string basePath=Application.streamingAssetsPath+ "/ExcelData"; public string excelName; public string sheetName; public string keyName; public void Awake() { //System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); // 手动注册编码提供程序 FillFromExcel(); } private void FillFromExcel() { string filePath = Path.Combine( basePath, excelName+ ".xlsx"); if (!File.Exists(filePath)) { Debug.LogWarning($"Excel 文件不存在: {filePath}"); return; } IWorkbook workbook; using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { //if (Path.GetExtension(fileName).ToLower() == ".xls") // workbook = new HSSFWorkbook(fs); //else // workbook = new XSSFWorkbook(fs); workbook = new XSSFWorkbook(fs); } //string sheetName = sheetName; // Sheet 名与挂载物体名一致 ISheet sheet = workbook.GetSheet(sheetName); if (sheet == null) { Debug.LogWarning($"Sheet 不存在: {sheetName}"); return; } for (int i = 0; i <= sheet.LastRowNum; i++) { IRow row = sheet.GetRow(i); if (row == null) continue; ICell keyCell = row.GetCell(0); ICell valueCell = row.GetCell(1); if (keyCell == null || valueCell == null) continue; string key = GetCellStringValue(keyCell); if (key == keyName) { string value = GetCellStringValue(valueCell); ApplyValueToChild(gameObject, value); break; } //Transform target = FindTargetByKey(transform, key); //if (target != null) //{ // ApplyValueToChild(target.gameObject, value); //} //else //{ // Debug.LogWarning($"子物体未找到: {key}"); //} } } private string GetCellStringValue(ICell cell) { if (cell == null) return ""; switch (cell.CellType) { case CellType.String: return cell.StringCellValue; case CellType.Numeric: return cell.NumericCellValue.ToString(); case CellType.Boolean: return cell.BooleanCellValue.ToString(); case CellType.Formula: if (cell.CachedFormulaResultType == CellType.String) return cell.StringCellValue; if (cell.CachedFormulaResultType == CellType.Numeric) return cell.NumericCellValue.ToString(); return cell.ToString(); default: return ""; } } /// /// 将 Excel value 填充到自身组件 /// private void ApplyValueToChild(GameObject go, string value) { // TMP_InputField 优先 TMP_InputField tmpInput = go.GetComponent(); if (tmpInput != null) { tmpInput.text = value; return; // 不再操作子物体 } TMP_Dropdown tmpDropdown = go.GetComponent(); if (tmpDropdown != null) { string[] options = value.Split('-'); tmpDropdown.ClearOptions(); tmpDropdown.AddOptions(new List(options)); if (options.Length > 0) { tmpDropdown.value = 0; // 默认选第一个 tmpDropdown.RefreshShownValue(); } return; } TMP_Text tmpText = go.GetComponent(); if (tmpText != null) { tmpText.text = value; } } }