public void TestReadStartTokenNotFirstRowTableToJsonString() { string jsonString = string.Empty; string debugString = string.Empty; Console.WriteLine(string.Format("path = {0}", exceDirectorylPath)); EnumClassValue test = new EnumClassValue(typeof(EventData), "EventData_StartTokenNotFirstRow"); ReadExcelToJsonStringError error = _excelToJsonString.ReadExcelFile(exceDirectorylPath, test, NeedReadSite.CLIENT, out jsonString, out debugString); Assert.AreEqual(ReadExcelToJsonStringError.NONE, error); }
/// <summary> /// 讀取excel檔案,不論是否有錯誤,回傳前都會關閉檔案 /// </summary> /// <param name="directoryPath">資料夾路徑</param> /// <param name="dataLoadTag">資料轉換的資訊</param> /// <param name="needReadSite">轉出資料是哪方(Server/Client)需要</param> /// <param name="jsonString">對應輸出的json字串</param> /// <param name="debugString">偵錯字串</param> /// <returns>可能有的錯誤訊息</returns> public ReadExcelToJsonStringError ReadExcelFile(string directoryPath, EnumClassValue dataConvertInfo, NeedReadSite needReadSite, out string jsonString, out string debugString) { if (string.IsNullOrEmpty(dataConvertInfo.FileName) || dataConvertInfo.ClassType == null) { ReadExcelFileEnd(null, out jsonString, out debugString); return ReadExcelToJsonStringError.ENUM_ATTRIBUTE_ERROR; } ReadExcelToJsonStringError readExcelError = _excelToTable.OpenExcelFile(directoryPath, dataConvertInfo.FileName); if (readExcelError != ReadExcelToJsonStringError.NONE) { ReadExcelFileEnd(null, out jsonString, out debugString); return readExcelError; } List<string> allType; readExcelError = _excelToTable.CheckAndReadTableHeader(needReadSite, out allType); if (readExcelError != ReadExcelToJsonStringError.NONE) { ReadExcelFileEnd(null, out jsonString, out debugString); return readExcelError; } #region 確認各欄位和要被寫入的物件欄位Type有對應 object checkObject = Activator.CreateInstance(dataConvertInfo.ClassType); List<string>.Enumerator tableTypeEnumerator = allType.GetEnumerator(); bool isConform = CheckObjectTypeCorrect(dataConvertInfo.ClassType, checkObject, ref tableTypeEnumerator); if (!isConform) { _debugMessage = string.Format("{0}{1} 轉換失敗:表格與資料結構({2})內容不符\n", _debugMessage, dataConvertInfo.FileName, dataConvertInfo.ClassType); ReadExcelFileEnd(null, out jsonString, out debugString); return ReadExcelToJsonStringError.TABLE_TYPE_IS_NOT_CONFORM; } #endregion #region 抓取資料 List<object> allData = new List<object>(); bool hasEOR = false; List<string> tableRowData = _excelToTable.GetNextRow(); while (tableRowData != null) // 還有資料 { if (_excelToTable.CheckEndOfTable(tableRowData)) { // 有結尾符號,正常結束 hasEOR = true; break; } if (CheckEmptyRow(tableRowData)) { ReadExcelFileEnd(null, out jsonString, out debugString); return ReadExcelToJsonStringError.HAS_EMPTY_ROW; } object obj = Activator.CreateInstance(dataConvertInfo.ClassType); List<string>.Enumerator rowDataEnumerator = tableRowData.GetEnumerator(); ReadExcelToJsonStringError error = GetObjectTypeDataFromExcel(dataConvertInfo.ClassType, ref obj, ref rowDataEnumerator); if (error != ReadExcelToJsonStringError.NONE) { ReadExcelFileEnd(null, out jsonString, out debugString); return error; } allData.Add(obj); // 取得下一行資料 tableRowData = _excelToTable.GetNextRow(); } if (!hasEOR) { ReadExcelFileEnd(null, out jsonString, out debugString); return ReadExcelToJsonStringError.CANT_FIND_END_OF_ROW_TOKEN; } #endregion ReadExcelFileEnd(allData, out jsonString, out debugString); return ReadExcelToJsonStringError.NONE; }
public void TestReadStringArray() { string jsonString = string.Empty; string debugString = string.Empty; EnumClassValue test = new EnumClassValue(typeof(TestStringArray), "EventData_TestStringArray"); ReadExcelToJsonStringError error = _excelToJsonString.ReadExcelFile(exceDirectorylPath, test, NeedReadSite.CLIENT, out jsonString, out debugString); Assert.AreEqual(ReadExcelToJsonStringError.NONE, error); }
// 得處理一下非同步狀況處理 IEnumerator Load(int tag, EnumClassValue loadAttr) { string filePath = GlobalConst.DIR_DATA_JSON + loadAttr.FileName + GlobalConst.EXT_JSONDATA; string encodingStr = string.Empty; if (filePath.Contains("://")) { WWW www = new WWW(filePath); yield return www; encodingStr = www.text; } else { encodingStr = File.ReadAllText(filePath); } try { CommonFunction.DebugMsgFormat("讀取 {0} 的 Data", (GlobalConst.DataLoadTag)tag); object refObj = Activator.CreateInstance(typeof(List<>).MakeGenericType(loadAttr.DataType)); bool isSuccess = DeserializeObject(encodingStr, ref refObj); if (isSuccess) { _allDataList[(GlobalConst.DataLoadTag)tag] = refObj as IList; DataState[tag] = ReadDataState.HaveLoad; // TODO: 讀取事件資料完成用觀察者? if (tag == (int)GlobalConst.DataLoadTag.Event) { GameMain.Instance.GameEventManager.Initialize(); } CommonFunction.DebugMsgFormat("{0}讀取成功", (GlobalConst.DataLoadTag)tag); } else { DataState[tag] = ReadDataState.ReadError; CommonFunction.DebugMsgFormat("{0}讀取失敗", (GlobalConst.DataLoadTag)tag); } } catch (Exception e) { CommonFunction.DebugMsgFormat("EventData Read Error:\n"); CommonFunction.DebugMsgFormat("StackTrace:\n{0}\n", e.StackTrace); CommonFunction.DebugMsgFormat("Msg:\n{0}\n", e.Message); DataState[tag] = ReadDataState.ReadError; } }