Unity将UI输入数据保存至Excel失败:仅生成表头无内容
问题分析与解决方案
核心问题
users列表为空:你没有将UI输入的内容添加到users集合中,导致循环写入数据的代码完全不执行。- 文件路径逻辑混乱:初始化
FileInfo时直接使用excelFileName,这个路径并非StreamingAssets目录下的正确路径,会导致文件存在性判断出错。 - 重复创建工作表:每次提交都会新建工作表,而非在已有文件的工作表中追加数据。
修改后的代码
using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.IO; using OfficeOpenXml; public class test22222 : MonoBehaviour { public GameObject inputName; public GameObject emailAddress; public GameObject password; public string excelFileName, sheetName; public void Submit() { string excelFilePath = Path.Combine(Application.streamingAssetsPath, $"{excelFileName}.xlsx"); // 确保StreamingAssets目录存在 if (!Directory.Exists(Application.streamingAssetsPath)) { Directory.CreateDirectory(Application.streamingAssetsPath); } FileInfo fileInfo = new FileInfo(excelFilePath); ExcelPackage package; ExcelWorksheet excelWorksheet; if (fileInfo.Exists) { // 打开已有文件 package = new ExcelPackage(fileInfo); // 获取已存在的工作表,不存在则创建 excelWorksheet = package.Workbook.Worksheets[sheetName] ?? package.Workbook.Worksheets.Add(sheetName); } else { // 创建新文件并添加表头 package = new ExcelPackage(fileInfo); excelWorksheet = package.Workbook.Worksheets.Add(sheetName); excelWorksheet.Cells["A1"].Value = "Name"; excelWorksheet.Cells["B1"].Value = "EmailAddress"; excelWorksheet.Cells["C1"].Value = "Password"; } // 获取当前UI输入的内容 string userName = inputName.GetComponent<InputField>().text; string userEmail = emailAddress.GetComponent<InputField>().text; string userPassword = password.GetComponent<InputField>().text; // 找到下一个空行(表头下一行开始) int nextRow = excelWorksheet.Dimension?.Rows + 1 ?? 2; // 写入当前用户数据 excelWorksheet.Cells[nextRow, 1].Value = userName; excelWorksheet.Cells[nextRow, 2].Value = userEmail; excelWorksheet.Cells[nextRow, 3].Value = userPassword; // 保存文件 package.Save(); // 清空输入框(可选操作) inputName.GetComponent<InputField>().text = ""; emailAddress.GetComponent<InputField>().text = ""; password.GetComponent<InputField>().text = ""; } } // 按需保留User类,若无需批量存储可移除 public class User { public string Name; public string EmailAddress; public string Password; }
关键修改说明
- 直接读取当前UI输入内容,跳过空
users列表的依赖,单次提交直接写入Excel。 - 用
Path.Combine处理路径,确保跨平台兼容性。 - 区分文件存在/不存在的场景:存在则复用工作表追加数据,不存在则创建新文件并添加表头。
- 移除无用的私有字段,简化逻辑结构。
内容的提问来源于stack exchange,提问作者Shiyuan Liu
相关产品推荐
相关产品推荐

