初めて使わせて頂きます、よろしくお願いします。
###前提・実現したいこと
ゲームのダンジョンデータをエクセルで管理していたのですが、
IDだけだと分かりにくかったため、
Unityでエクセルを読み込み、そのデータをエディタ拡張で画像を選択する等
分かりやすくして、編集したダンジョンデータをエクセルに直接出力したいと思っています。
###発生している問題・エラーメッセージ
「Unityでエクセルを読み込む事」と
「Unityで新しくエクセルファイルを作成して出力する事」
は出来ましたが、読み込んだファイルを編集して出力しようとすると以下のエラーメッセージが出ます。
ArgumentException: Encoding name 'UTF-16LE' not supported Parameter name: name System.Text.Encoding.GetEncoding (System.String name) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Text/Encoding.cs:718) NPOI.Util.StringUtil.PutUnicodeLE (System.String input, ILittleEndianOutput out1) NPOI.HSSF.Record.BoundSheetRecord.Serialize (ILittleEndianOutput out1) NPOI.HSSF.Record.StandardRecord.Serialize (Int32 offset, System.Byte[] data) NPOI.HSSF.Model.InternalWorkbook.Serialize (Int32 offset, System.Byte[] data) NPOI.HSSF.UserModel.HSSFWorkbook.GetBytes () NPOI.HSSF.UserModel.HSSFWorkbook.Write (System.IO.Stream stream) CheckDungeonEditor.OnGUI () (at Assets/Editor/DebugEditorWindow.cs:565) System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222)
###該当のソースコード
下記のコードはダンジョンデータを読み込んで、そのまま書き出しているだけなのですが、
これでも同じエラーが出ています。
C#
1 var dungeonAreaPath = "Assets/Excel/dungeon_area.xls"; 2 using (var fs = new FileStream(dungeonAreaPath, FileMode.OpenOrCreate, FileAccess.ReadWrite)) 3 { 4 //書き出す用のエクセルファイル 5 IWorkbook book = new HSSFWorkbook(); 6 7 //既存ファイルからエクセルファイル作成. 8 IWorkbook importBook = new HSSFWorkbook(fs); 9 10 for (int i = 0; i < importBook.NumberOfSheets; i++) 11 { 12 //シートを取得 13 ISheet importSheet = importBook.GetSheetAt(i); 14 ISheet sheet = book.CreateSheet(importSheet.SheetName); 15 16 for (int j = 1; j < importSheet.LastRowNum; j++) 17 { 18 IRow importRow = importSheet.GetRow(j); 19 IRow row = sheet.CreateRow(j); 20 21 Debug.Log(importRow.LastCellNum); 22 for (int k = 0; k < importRow.LastCellNum - 1; k++) 23 { 24 ICell importCell = importRow.GetCell(k); 25 26 if (importCell == null || importCell.ToString() == "") 27 break; 28 29 ICell cell = row.CreateCell(k); 30 31 string exportStr = importCell.ToString(); 32 33 Encoding utf8 = Encoding.GetEncoding("utf-8"); 34 byte[] bytes = utf8.GetBytes(exportStr); 35 string encordingStr = utf8.GetString(bytes); 36 37 Debug.Log(encordingStr); 38 cell.SetCellValue(encordingStr); 39 40 } 41 42 } 43 } 44 45 book.Write(fs); 46 } 47
###試したこと
同じようなエラー(?)が下記にありましたが解決出来ませんでした
Monodevelopが原因ではないかと意見を頂いたのでVisualStudioCodeで試してみましたが同じくエラーが出たのでそこが原因ではありませんでした。
以下のコードでエクセルファイルが出力されたのは確認出来ました。
C#
1if (GUILayout.Button("Export")) 2{ 3 var path = "Assets/Excel/testes.xls"; 4 using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite)) 5 { 6 //新規エクセルファイル作成. 7 IWorkbook book = new HSSFWorkbook(); 8 //シートを取得. 9 ISheet sheet = book.CreateSheet(); 10 //行を取得. 11 IRow row = sheet.CreateRow(0); 12 //セルを取得して編集. 13 ICell cell = row.CreateCell(1); 14 cell.SetCellValue("テスト"); 15 book.Write(fs); 16 } 17}
###補足情報(言語/FW/ツール等のバージョンなど)
使用言語はC#です。
Unity version:5.3.2p1
OS:Mac
エクセルファイルを開くのにはOpenOfficeを使っています。
使用エディタはMonodevelopです。
知っている方が居られれば、よろしくお願い致します!

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/20 00:19