#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