You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity将UI输入数据保存至Excel失败:仅生成表头无内容

问题分析与解决方案

核心问题

  1. users列表为空:你没有将UI输入的内容添加到users集合中,导致循环写入数据的代码完全不执行。
  2. 文件路径逻辑混乱:初始化FileInfo时直接使用excelFileName,这个路径并非StreamingAssets目录下的正确路径,会导致文件存在性判断出错。
  3. 重复创建工作表:每次提交都会新建工作表,而非在已有文件的工作表中追加数据。

修改后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 18:54:51