using DS.Module.Core; using DS.Module.ExcelModule.Model; using LanguageExt.ClassInstances; using LanguageExt; using Microsoft.AspNet.SignalR.Hubs; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; using MiniExcelLibs; using Newtonsoft.Json.Linq; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using NPOI.SS.UserModel; using OfficeOpenXml; using System.Data; using Spire.Xls; namespace DS.Module.ExcelModule { public class EPPlusService : IEPPlusService { private readonly IServiceProvider _serviceProvider; private static string GetString(object obj) { try { if (obj == null) return ""; return obj.ToString(); } catch (Exception ex) { return ""; } } /// ///将指定的Excel的文件转换成DataTable (Excel的第一个sheet) /// /// 文件的绝对路径 /// public DataTable WorksheetToTable(string fullFielPath, int SheetIndex = 0) { try { string[] PathNames = fullFielPath.Split(new string[] { @"/" }, StringSplitOptions.RemoveEmptyEntries); var ExcelFileName = PathNames[PathNames.Length - 1]; if (ExcelFileName.EndsWith(".xls")) { var newExcelFileName = PathNames[PathNames.Length - 1].Replace(".xls", ".xlsx"); var _newFileFullname = Path.GetDirectoryName(fullFielPath) + "/" + newExcelFileName; Workbook book = new Workbook(); book.LoadFromFile(fullFielPath); book.SaveToFile(_newFileFullname, ExcelVersion.Version2013); fullFielPath = _newFileFullname; } ExcelPackage.LicenseContext = LicenseContext.NonCommercial; FileInfo existingFile = new FileInfo(fullFielPath); ExcelPackage package = new ExcelPackage(existingFile); ExcelWorksheet worksheet = package.Workbook.Worksheets[0];//选定 指定页 return WorksheetToTable(worksheet); } catch (Exception e) { throw; } } public DataTable WorksheetToTable_NoTitle(string fullFielPath, int SheetIndex = 1) { try { string[] PathNames = fullFielPath.Split(new string[] { @"/" }, StringSplitOptions.RemoveEmptyEntries); var ExcelFileName = PathNames[PathNames.Length - 1]; if (ExcelFileName.EndsWith(".xls")) { var newExcelFileName = PathNames[PathNames.Length - 1].Replace(".xls", ".xlsx"); var _newFileFullname = Path.GetDirectoryName(fullFielPath) + "/" + newExcelFileName; Workbook book = new Workbook(); book.LoadFromFile(fullFielPath); book.SaveToFile(_newFileFullname, ExcelVersion.Version2013); fullFielPath = _newFileFullname; } FileInfo existingFile = new FileInfo(fullFielPath); ExcelPackage package = new ExcelPackage(existingFile); ExcelWorksheet worksheet = package.Workbook.Worksheets[SheetIndex];//选定 指定页 return WorksheetToTable_NoTitle(worksheet); } catch (Exception e) { throw; } } /// /// 将worksheet转成datatable /// /// 待处理的worksheet /// 返回处理后的datatable public DataTable WorksheetToTable(ExcelWorksheet worksheet) { //获取worksheet的行数 int rows = worksheet.Dimension.End.Row; //获取worksheet的列数 int cols = worksheet.Dimension.End.Column; DataTable dt = new DataTable(worksheet.Name); DataRow dr = null; for (int i = 1; i <= rows; i++) { if (i > 1) dr = dt.Rows.Add(); for (int j = 1; j <= cols; j++) { //默认将第一行设置为datatable的标题 if (i == 1) dt.Columns.Add(GetString(worksheet.Cells[i, j].Value)); //剩下的写入datatable else dr[j - 1] = GetString(worksheet.Cells[i, j].Value); } } return dt; } public DataTable WorksheetToTable_NoTitle(ExcelWorksheet worksheet) { //获取worksheet的行数 int rows = worksheet.Dimension.End.Row; //获取worksheet的列数 int cols = worksheet.Dimension.End.Column; DataTable dt = new DataTable(worksheet.Name); DataRow dr = null; for (int i = 1; i <= rows; i++) { //if (i > 1) dr = dt.Rows.Add(); for (int j = 1; j <= cols; j++) { //默认将第一行设置为datatable的标题 if (i == 1) { dt.Columns.Add(GetString(worksheet.Cells[i, j].Value)); dr[j - 1] = GetString(worksheet.Cells[i, j].Value); } //剩下的写入datatable else { dr[j - 1] = GetString(worksheet.Cells[i, j].Value); } } } return dt; } } }