質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

12072閲覧

Unityでエクセルを読み込み、編集して直接エクセルに出力したい

LightGive

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2016/05/10 01:59

編集2016/05/10 05:18

初めて使わせて頂きます、よろしくお願いします。

###前提・実現したいこと
ゲームのダンジョンデータをエクセルで管理していたのですが、
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

###試したこと

同じようなエラー(?)が下記にありましたが解決出来ませんでした

同じようなエラー1
同じようなエラー2

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です。

知っている方が居られれば、よろしくお願い致します!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

質問の内容とは意図しない回答となりますが、ご了承ください。

ゲームデータをエクセルに直接出力するのではなく、あらかじめテキストデータ(csvなど)で出力し
それをエクセルで処理するという形を取ってはいかがでしょうか。
vbaという別言語の知識が必要となりますが、エクセルを触りに行くよりは円滑に進むのではないかと思われます。

別言語の習得が煩わしいのであれば、自前のダンジョン編集用エンジンを作成することをお薦めします。

投稿2016/05/19 02:55

syunjiK

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LightGive

2016/05/20 00:19

回答ありがとうございます。 あれから色々試してみましたが、どうしてもMacのOpenOfficeで編集すると文字コードがUTF-16LEになってしまうみたいで、どうしても読み込み時にエラーが出るみたいです。 ので回答して頂いた通り、CSVに出力しエクセルにコピーするという形に収まりました。 エクセル形式でないと第三者が見れないのでエクセル形式で読み込む事になったのですが、これからはScriptableObject等で編集し、エクセルで出力するという形を取ろうと思います。有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問