Unity は NPOI を使用して Exect テーブルの作成、データの保存、データの変更と削除を行います。そして、パッケージ化後の落とし穴 - 新しく作成された Exect テーブルを開けない

まず最初に言っておきますが、私はその問題の解決策を見つけるのに丸一日かかりました。

Unity編集モードでオブジェクトをクリックして対応するテーブルを作成し、オブジェクト名とInputTextに記入されたアノテーションデータを取得します。それから保存します。作成された Exect テーブルを開くことができます。PC をパッケージ化した後、オブジェクトによって作成されたテーブルをクリックすると、ファイルを開くことができず、ファイルが破損しています。

解決策: Unity エディターが配置されているパスに移動し、このパス
\Editor\Data\MonoBleedingEdge\lib\mono\unityaot または Unityjit フォルダーまたは unityyaot-win32 を
、「I18N」で始まる 4 つの DLL ファイルを見つけます。

 

ここのボスに感謝します: LAIALAIA

ソリューションのアイデアの元のリンク: Unity は EPPlus を使用して Excel を作成、書き込み、読み取ります - da da da~~~ - Blog Garden (cnblogs.com)

作成読み取り削除エクセル

 //Excelファイルを初期化する
 

 // 初始化 Excel 文件
        public void InitializeExcelFile(string ExcelFileName)
        {
        // 获取应用的数据文件夹路径
        string dataPath = Application.streamingAssetsPath + "/Data";
        // 合并路径,得到完整的 Excel 文件路径
        excelFilePath = Path.Combine(dataPath, ExcelFileName + ".xls");
        // 创建一个文件信息对象来检查 Excel 文件是否存在
        FileInfo excelFile = new FileInfo(excelFilePath);
        // 隐藏输入框
        inputField.gameObject.SetActive(false);
        // 如果 Excel 文件不存在,创建一个新的 Excel 工作簿,并添加一个工作表
        if (!excelFile.Exists)
        {
            // 创建一个新的 Excel 工作簿对象
            workbook = new XSSFWorkbook();
            // 在工作簿中创建一个名为 "Comments" 的工作表
            sheet = (XSSFSheet)workbook.CreateSheet(ExcelFileName);
            // 在工作表的第一行(行索引为0)上创建一个新的行对象,并在该行中创建一个新的单元格对象(列索引为0)
            // 然后将 "Object Name" 这个字符串设置为单元格的值
            sheet.CreateRow(0).CreateCell(0).SetCellValue("Object Name");
            // 获取工作表的第一行(行索引为0),然后在该行中创建一个新的单元格对象(列索引为1)
            // 然后将 "Comment" 这个字符串设置为单元格的值
            sheet.GetRow(0).CreateCell(1).SetCellValue("Comment");
        }
        else
        {
            using (FileStream fs = new FileStream(excelFilePath, FileMode.Open, FileAccess.Read))
            {
                workbook = new XSSFWorkbook(fs);
                sheet = (XSSFSheet)workbook.GetSheetAt(0);
            }
        }
    }

消去

   private void DeleteObjectFromExcel()
    {
        if (workbook == null || lastClickedObject == null)
        {
            Debug.LogError("Excel workbook is not initialized or no object clicked.");
            return;
        }

        string objectName = lastClickedObject.name;

        int rowIndex = FindRowIndexByObjectName(objectName);
        if (rowIndex >= 0)
        {
            // 删除选定的行
            sheet.RemoveRow(sheet.GetRow(rowIndex));

            // 清空 InputField 的文本内容
            inputField.text = "";

            for (int i = rowIndex + 1; i <= sheet.LastRowNum; i++)
            {
                IRow currentRow = sheet.GetRow(i);

                // 跳过已删除的行
                if (currentRow == null)
                {
                    continue;
                }

                IRow newRow = sheet.CreateRow(i - 1); // 创建一个新行
                for (int j = 0; j < currentRow.LastCellNum; j++)
                {
                    ICell currentCell = currentRow.GetCell(j);
                    ICell newCell = newRow.CreateCell(j); // 创建一个新单元格
                    if (currentCell != null)
                    {
                        newCell.SetCellValue(currentCell.ToString());
                    }
                }
            }

            // 清除最后一行
            sheet.RemoveRow(sheet.GetRow(sheet.LastRowNum));


            // 保存修改后的文件
            using (FileStream fs = new FileStream(excelFilePath, FileMode.Create, FileAccess.Write))
            {
                workbook.Write(fs);
            }
        }
    }

おすすめ

転載: blog.csdn.net/weixin_44047050/article/details/132325410