public static Dictionary<string, List<string>> ReadExcelWorkSheet(string excelPath) { Dictionary<string, List<string>> excelDict = null; try { Funcell.DIY.ExcelWorkSheet sheet = new Funcell.DIY.ExcelWorkSheet(excelPath); if (sheet == null) { UnityEngine.Debug.LogError("读取Excel出错,无数据!" + excelPath); return new Dictionary<string, List<string>>(); } var values = sheet.Cells; // 行个数 int rowNum = values.GetLength(0); if (rowNum > 0) { // 列个数 columnNum = values.GetLength(1); //列数不能为空 columnNum = columnNum > 0 ? columnNum : 1; excelDict = new Dictionary<string, List<string>>(rowNum); for (int i = 0; i < rowNum; i++) { List<string> columnList = new List<string>(columnNum); var key = values[i, 0]; for (int j = 0; j < columnNum; j++) { string value = values[i, j]; columnList.Add(value); } if (!excelDict.ContainsKey(key)) excelDict.Add(key, columnList); } } else { columnNum = 1; excelDict = new Dictionary<string, List<string>>(); } } catch (Exception ex) { UnityEngine.Debug.LogError("读取LanguageConverter出错!" + ex.Message); } return excelDict; }
private static void PeekStringToLanguageConverter(FileInfo fInfo) { try { Funcell.DIY.ExcelWorkSheet sheet = new Funcell.DIY.ExcelWorkSheet(fInfo.FullName); int rowLen = sheet.Cells.GetLength(0); //每列的类型 Dictionary <int, ColumnDataType> dictType = new Dictionary <int, ColumnDataType>(); //需要忽略的列 Dictionary <int, bool> dictIgnore = new Dictionary <int, bool>(); //每列数据类型 if (sheetDataTypeRow < rowLen) { int columnLen = sheet.Cells.GetColumnNum(sheetDataTypeRow); for (int i = 0; i < columnLen; ++i) { var value = sheet.Cells[sheetDataTypeRow, i]; if (string.IsNullOrEmpty(value)) { continue; } ColumnDataType type = ColumnDataType.INT_DATA; // 分解一列的数据类型 if (value.Contains("varchar") || value.Contains("text")) { type = ColumnDataType.STRING; } else if (value.Contains("big")) { type = ColumnDataType.INT64_DATA; } else if (value.Contains("define")) { type = ColumnDataType.DEFINE; } dictType.Add(i, type); } } //可以忽略的列 if (sheetRow < rowLen) { int columnLen = sheet.Cells.GetColumnNum(sheetRow); for (int i = 0; i < columnLen; ++i) { var value = sheet.Cells[sheetRow, i]; dictIgnore.Add(i, value.IndexOf("ignore", StringComparison.CurrentCultureIgnoreCase) >= 0); } } //提取字符串 bool isIgnore = false; for (int i = sheetRow + 1; i < rowLen; ++i) { int columnLen = sheet.Cells.GetColumnNum(i); for (int j = 0; j < columnLen; ++j) { if (dictIgnore.TryGetValue(j, out isIgnore)) { if (isIgnore) { continue; } } ColumnDataType dataType = ColumnDataType.INT_DATA; if (dictType.TryGetValue(j, out dataType)) { if (dataType == ColumnDataType.STRING) { var tempValue = CSharpWriter.ProcessString(sheet.Cells[i, j]); if (tempValue.IndexOf(",") < 0 && tempValue.Length > 2) { tempValue = tempValue.Substring(1, tempValue.Length - 2); } LanguageConverter.Instance.AddText(tempValue); } } } } } catch (Exception ex) { UnityEngine.Debug.LogError(string.Format("加载{0}表异常: {1}", fInfo.Name, ex.ToString())); } }