#if UNITY_EDITOR && UNITY_STANDALONE using System; using System.Collections.Generic; using System.IO; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; namespace BFEditor { public static class BFExcelHelper { /// /// 创建excel xlsx /// /// sheetName /// excel路径 /// public static XSSFWorkbook CreateExecel(List sheetName, string excelFileName) { XSSFWorkbook xSSFWorkbook = new XSSFWorkbook(); foreach (var sheet in sheetName) { xSSFWorkbook.CreateSheet(sheet); } FileStream fs; if (!File.Exists(excelFileName)) { fs = File.Create(excelFileName); } else { fs = new FileStream(excelFileName, FileMode.Open); } xSSFWorkbook.Write(fs); fs.Close(); return xSSFWorkbook; } /// /// 获取excel workbook /// /// excel路径 /// public static IWorkbook GetWorkbook(string excelPath) { var fs = new FileStream(excelPath, FileMode.Open, FileAccess.ReadWrite); var workbook = WorkbookFactory.Create(fs); fs.Close(); return workbook; } /// /// 保存excel /// /// IWorkbook /// excel路径 public static void SaveBFExcel(this IWorkbook workbook, string excelPath) { var fs = File.Create(excelPath); workbook.Write(fs); fs.Close(); } /// /// 获取项目配置表格sheet /// /// IWorkbook /// public static ISheet GetBFSheet(this IWorkbook workbook) { return workbook.GetSheetAt(0); } /// /// 获取表格数据行数 /// /// IWorkbook /// public static int GetBFConfigDataCount(this IWorkbook workbook) { var sheet = workbook.GetBFSheet(); return sheet.GetBFConfigDataCount(); } /// /// 获取项目配置数据 /// /// IWorkbook /// public static List GetBFConfigDataList(this IWorkbook workbook) { var sheet = workbook.GetBFSheet(); return sheet.GetBFConfigDataList(); } /// /// 获取项目配置数据 /// /// IWorkbook /// public static Dictionary GetBFConfigDataNumberKeyDict(this IWorkbook workbook) { var sheet = workbook.GetBFSheet(); return sheet.GetBFConfigDataNumberKeyDict(); } /// /// 获取项目配置数据 /// /// IWorkbook /// public static Dictionary GetBFConfigDataStringKeyDict(this IWorkbook workbook) { var sheet = workbook.GetBFSheet(); return sheet.GetBFConfigDataStringKeyDict(); } /// /// 获取主键所在列index /// /// IWorkbook /// public static int GetBFConfigKeyColumnIndex(this IWorkbook workbook) { var sheet = workbook.GetBFSheet(); return sheet.GetBFConfigKeyColumnIndex(); } /// /// 获取字段所在列index /// /// IWorkbook /// 字段名 /// public static int GetBFConfigfieldColumnIndex(this IWorkbook workbook, string fieldName) { var sheet = workbook.GetBFSheet(); return sheet.GetBFConfigfieldColumnIndex(fieldName); } /// /// 根据key值获取项目配置行数据 /// /// IWorkbook /// key值 /// public static IRow GetBFConfigRowDataByKey(this IWorkbook workbook, double keyValue) { var sheet = workbook.GetBFSheet(); return sheet.GetBFConfigRowDataByKey(keyValue); } /// /// 根据key值获取项目配置行数据 /// /// IWorkbook /// key值 /// public static IRow GetBFConfigRowDataByKey(this IWorkbook workbook, string keyValue) { var sheet = workbook.GetBFSheet(); return sheet.GetBFConfigRowDataByKey(keyValue); } /// /// 获取项目配置表格单元格 /// /// IWorkbook /// key值 /// 字段名 /// 如果不存在是否自动创建 /// public static ICell GetBFCell(this IWorkbook workbook, string keyValue, string fieldName, bool needCreate = false) { var sheet = workbook.GetBFSheet(); return sheet.GetBFCell(keyValue, fieldName, needCreate); } /// /// 写入项目配置表格单元格 /// /// workbook /// key值 /// 字段名 /// 写入的字段值 /// 如果不存在是否自动创建 public static void WriteBFCell(this IWorkbook workbook, string keyValue, string fieldName, string fieldValue, bool needCreate = false) { var sheet = workbook.GetBFSheet(); var cell = GetBFCell(sheet, keyValue, fieldName, needCreate); if (cell != null) { cell.SetCellValue(fieldValue); } } /// /// 写入项目配置表格单元格 /// /// workbook /// key值 /// 字段名 /// 写入的字段值 /// 如果不存在是否自动创建 public static void WriteBFCell(this IWorkbook workbook, int keyValue, string fieldName, string fieldValue, bool needCreate = false) { var sheet = workbook.GetBFSheet(); var cell = GetBFCell(sheet, keyValue, fieldName, needCreate); if (cell != null) { cell.SetCellValue(fieldValue); } } /// /// 是否有配置内容,前四行为表头 /// /// ISheet /// public static bool BFConfigHasData(this ISheet sheet) { return sheet.LastRowNum > 3; } /// /// 获取表格数据长度 /// /// ISheet /// public static int GetBFConfigDataCount(this ISheet sheet) { return Math.Max(sheet.LastRowNum - 3, 0); } /// /// 获取主键所在列index /// /// ISheet /// public static int GetBFConfigKeyColumnIndex(this ISheet sheet) { var fieldNameRow = sheet.GetRow(2); for (int i = 0; i < fieldNameRow.Cells.Count; i++) { if (fieldNameRow.Cells[i].StringCellValue.Replace(" ", "").StartsWith("*")) { return i; } } return -1; } /// /// 获取字段所在列index /// /// ISheet /// 字段名 /// public static int GetBFConfigfieldColumnIndex(this ISheet sheet, string fieldName) { var fieldNameRow = sheet.GetRow(2); for (int i = 0; i < fieldNameRow.Cells.Count; i++) { if (fieldNameRow.Cells[i].StringCellValue == fieldName) { return i; } } return -1; } /// /// 获取项目配置数据 /// /// ISheet /// public static List GetBFConfigDataList(this ISheet sheet) { List datas = new List(); if (sheet.LastRowNum < 4) { return datas; } var keyIndex = sheet.GetBFConfigKeyColumnIndex(); for (int i = 4; i <= sheet.LastRowNum; i++) { var row = sheet.GetRow(i); var cell = row.GetCell(keyIndex); if (cell != null) { datas.Add(row); } } return datas; } /// /// 获取项目配置数据 /// /// ISheet /// public static Dictionary GetBFConfigDataNumberKeyDict(this ISheet sheet) { Dictionary datas = new Dictionary(); if (sheet.LastRowNum < 4) { return datas; } var keyIndex = sheet.GetBFConfigKeyColumnIndex(); for (int i = 4; i <= sheet.LastRowNum; i++) { var row = sheet.GetRow(i); if (row != null) { var cell = row.GetCell(keyIndex); if (cell != null) { var keyValue = row.GetCell(keyIndex).NumericCellValue; if(!datas.ContainsKey(keyValue)) { datas.Add(keyValue, row); } } } } return datas; } /// /// 获取项目配置数据 /// /// ISheet /// public static Dictionary GetBFConfigDataStringKeyDict(this ISheet sheet) { Dictionary datas = new Dictionary(); if (sheet.LastRowNum < 4) { return datas; } var keyIndex = sheet.GetBFConfigKeyColumnIndex(); for (int i = 4; i <= sheet.LastRowNum; i++) { var row = sheet.GetRow(i); var cell = row.GetCell(keyIndex); if (cell != null) { var keyValue = row.GetCell(keyIndex).StringCellValue; datas.Add(keyValue, row); } } return datas; } /// /// 根据key值获取项目配置行数据 /// /// ISheet /// key值 /// public static IRow GetBFConfigRowDataByKey(this ISheet sheet, double keyValue) { var keyIndex = sheet.GetBFConfigKeyColumnIndex(); if (keyIndex == -1) { return null; } if (sheet.LastRowNum < 4) { return null; } for (int i = 4; i <= sheet.LastRowNum; i++) { var row = sheet.GetRow(i); if (row == null) { continue; } if (row.GetCell(keyIndex) == null) { continue; } if (row.GetCell(keyIndex).NumericCellValue == keyValue) { return row; } } return null; } /// /// 根据key值获取项目配置行数据 /// /// ISheet /// key值 /// public static IRow GetBFConfigRowDataByKey(this ISheet sheet, string keyValue) { var keyIndex = sheet.GetBFConfigKeyColumnIndex(); if (keyIndex == -1) { return null; } if (sheet.LastRowNum < 4) { return null; } for (int i = 4; i <= sheet.LastRowNum; i++) { var row = sheet.GetRow(i); if (row.GetCell(keyIndex).StringCellValue == keyValue) { return row; } } return null; } /// /// 获取项目配置表格单元格 /// /// ISheet /// key值 /// 字段名 /// 如果不存在是否自动创建 /// public static ICell GetBFCell(this ISheet sheet, string keyValue, string fieldName, bool needCreate = false) { var row = sheet.GetBFConfigRowDataByKey(keyValue); if (row == null) { return null; } var fieldIndex = sheet.GetBFConfigfieldColumnIndex(fieldName); if (fieldIndex == -1) { return null; } var cell = row.GetCell(fieldIndex); if (cell == null && needCreate) cell = row.CreateCell(fieldIndex); return cell; } /// /// 获取项目配置表格单元格 /// /// ISheet /// key值 /// 字段名 /// 如果不存在是否自动创建 /// public static ICell GetBFCell(this ISheet sheet, int keyValue, string fieldName, bool needCreate = false) { var row = sheet.GetBFConfigRowDataByKey(keyValue); if (row == null) { return null; } var fieldIndex = sheet.GetBFConfigfieldColumnIndex(fieldName); if (fieldIndex == -1) { return null; } var cell = row.GetCell(fieldIndex); if (cell == null && needCreate) cell = row.CreateCell(fieldIndex); return cell; } /// /// 写入项目配置表格单元格 /// /// ISheet /// key值 /// 字段名 /// 写入的字段值 /// 如果不存在是否自动创建 public static void WriteBFCell(this ISheet sheet, string keyValue, string fieldName, string fieldValue, bool needCreate = false) { var cell = GetBFCell(sheet, keyValue, fieldName, needCreate); if (cell != null) { cell.SetCellValue(fieldValue); } } /// /// 写入项目配置表格单元格 /// /// ISheet /// key值 /// 字段名 /// 写入的字段值 /// 如果不存在是否自动创建 public static void WriteBFCell(this ISheet sheet, int keyValue, string fieldName, string fieldValue, bool needCreate = false) { var cell = GetBFCell(sheet, keyValue, fieldName, needCreate); if (cell != null) { cell.SetCellValue(fieldValue); } } public static ICell GetBFMissingCell(this IRow row, int columnIndex) { var cell = row.GetCell(columnIndex); if (cell == null) { cell = row.CreateCell(columnIndex); } return cell; } /// /// 删除空行 /// /// ISheet public static void DeleteEmptyRow(this ISheet sheet) { var i = sheet.LastRowNum; while (i > 0) { i--; var tempRow = sheet.GetRow(i); if (tempRow == null) { sheet.ShiftRows(i + 1, sheet.LastRowNum, -1); } } } /// /// 清空配置 /// /// public static void ClearBFRow(this ISheet sheet) { for (int i = 4; i <= sheet.LastRowNum; i++) { var row = sheet.GetRow(i); if (null != row) sheet.RemoveRow(row); } } } } #endif