初めて使わせて頂きます、よろしくお願いします。
前提・実現したいこと
ゲームのダンジョンデータをエクセルで管理していたのですが、
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)
該当のソースコード
下記のコードはダンジョンデータを読み込んで、そのまま書き出しているだけなのですが、
これでも同じエラーが出ています。
var dungeonAreaPath = "Assets/Excel/dungeon_area.xls";
using (var fs = new FileStream(dungeonAreaPath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
//書き出す用のエクセルファイル
IWorkbook book = new HSSFWorkbook();
//既存ファイルからエクセルファイル作成.
IWorkbook importBook = new HSSFWorkbook(fs);
for (int i = 0; i < importBook.NumberOfSheets; i++)
{
//シートを取得
ISheet importSheet = importBook.GetSheetAt(i);
ISheet sheet = book.CreateSheet(importSheet.SheetName);
for (int j = 1; j < importSheet.LastRowNum; j++)
{
IRow importRow = importSheet.GetRow(j);
IRow row = sheet.CreateRow(j);
Debug.Log(importRow.LastCellNum);
for (int k = 0; k < importRow.LastCellNum - 1; k++)
{
ICell importCell = importRow.GetCell(k);
if (importCell == null || importCell.ToString() == "")
break;
ICell cell = row.CreateCell(k);
string exportStr = importCell.ToString();
Encoding utf8 = Encoding.GetEncoding("utf-8");
byte[] bytes = utf8.GetBytes(exportStr);
string encordingStr = utf8.GetString(bytes);
Debug.Log(encordingStr);
cell.SetCellValue(encordingStr);
}
}
}
book.Write(fs);
}
試したこと
同じようなエラー(?)が下記にありましたが解決出来ませんでした
Monodevelopが原因ではないかと意見を頂いたのでVisualStudioCodeで試してみましたが同じくエラーが出たのでそこが原因ではありませんでした。
以下のコードでエクセルファイルが出力されたのは確認出来ました。
if (GUILayout.Button("Export"))
{
var path = "Assets/Excel/testes.xls";
using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
//新規エクセルファイル作成.
IWorkbook book = new HSSFWorkbook();
//シートを取得.
ISheet sheet = book.CreateSheet();
//行を取得.
IRow row = sheet.CreateRow(0);
//セルを取得して編集.
ICell cell = row.CreateCell(1);
cell.SetCellValue("テスト");
book.Write(fs);
}
}
補足情報(言語/FW/ツール等のバージョンなど)
使用言語はC#です。
Unity version:5.3.2p1
OS:Mac
エクセルファイルを開くのにはOpenOfficeを使っています。
使用エディタはMonodevelopです。
知っている方が居られれば、よろしくお願い致します!
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
質問の内容とは意図しない回答となりますが、ご了承ください。
ゲームデータをエクセルに直接出力するのではなく、あらかじめテキストデータ(csvなど)で出力し
それをエクセルで処理するという形を取ってはいかがでしょうか。
vbaという別言語の知識が必要となりますが、エクセルを触りに行くよりは円滑に進むのではないかと思われます。
別言語の習得が煩わしいのであれば、自前のダンジョン編集用エンジンを作成することをお薦めします。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/05/20 09:19
あれから色々試してみましたが、どうしてもMacのOpenOfficeで編集すると文字コードがUTF-16LEになってしまうみたいで、どうしても読み込み時にエラーが出るみたいです。
ので回答して頂いた通り、CSVに出力しエクセルにコピーするという形に収まりました。
エクセル形式でないと第三者が見れないのでエクセル形式で読み込む事になったのですが、これからはScriptableObject等で編集し、エクセルで出力するという形を取ろうと思います。有難うございました。