using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System; using System.Collections.Generic; using System.Data; using System.Data.OleDb; using System.IO; using System.Linq; using System.Threading.Tasks; namespace VueWebCoreApi.Tools { public class NPOIHelper { /// /// NPOI简单Demo,快速入门代码 /// /// /// /// NPOI认为Excel的第一个单元格是:(0,0) /// 柳永法 http://www.yongfa365.com/ 2010-5-8 22:21:41 public static void ExportEasy(DataTable dtSource, string strFileName) { HSSFWorkbook workbook = new HSSFWorkbook(); ISheet sheet = workbook.CreateSheet(); //填充表头 IRow dataRow = sheet.CreateRow(0); foreach (DataColumn column in dtSource.Columns) { dataRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName); } //填充内容 for (int i = 0; i < dtSource.Rows.Count; i++) { dataRow = sheet.CreateRow(i + 1); for (int j = 0; j < dtSource.Columns.Count; j++) { dataRow.CreateCell(j).SetCellValue(dtSource.Rows[i][j].ToString()); } } //保存 using (MemoryStream ms = new MemoryStream()) { using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write)) { workbook.Write(ms); ms.Flush(); ms.Position = 0; byte[] data = ms.ToArray(); fs.Write(data, 0, data.Length); fs.Flush(); } } //workbook.Dispose(); } public static System.Data.DataTable GetExcelDatatable(string fileUrl) { string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + fileUrl + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'"; DataSet myDataSet = new DataSet(); //连接串 OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); //返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等  DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //包含excel中表名的字符串数组 string[] strTableNames = new string[dtSheetName.Rows.Count]; for (int k = 0; k < dtSheetName.Rows.Count; k++) { strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString(); } OleDbDataAdapter myCommand = null; DataTable dt = new DataTable(); //从指定的表明查询数据,可先把所有表明列出来供用户选择 string strExcel = "select*from[" + strTableNames[0] + "]"; myCommand = new OleDbDataAdapter(strExcel, strConn); //myCommand.Fill(dt); myCommand.Fill(myDataSet, "ExcelInfo"); conn.Close(); DataTable ExcelTable = myDataSet.Tables["ExcelInfo"].DefaultView.ToTable(); return ExcelTable; } /// /// 多个sheet导入 /// /// /// public static List GetExcelDatatableList(string fileUrl) { List list = new List(); string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + fileUrl + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'"; DataSet myDataSet = new DataSet(); //连接串 OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); //返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等  DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //包含excel中表名的字符串数组 string[] strTableNames = new string[dtSheetName.Rows.Count]; for (int k = 0; k < dtSheetName.Rows.Count; k++) { strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString(); } for (int i = 0; i < strTableNames.Length; i++) { OleDbDataAdapter myCommand = null; DataTable dt = new DataTable(); //从指定的表明查询数据,可先把所有表明列出来供用户选择 string strExcel = "select*from[" + strTableNames[i].Trim() + "]"; myCommand = new OleDbDataAdapter(strExcel, strConn); //myCommand.Fill(dt); myCommand.Fill(myDataSet, "" + i + ""); conn.Close(); DataTable ExcelTable = myDataSet.Tables[i].DefaultView.ToTable(); list.Add(ExcelTable); } return list; } /// /// 多个sheet导入 /// /// /// public static List GetExcelDatatableListName(string fileUrl) { List list = new List(); string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + fileUrl + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'"; DataSet myDataSet = new DataSet(); //连接串 OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); //返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等  DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); for (int m = 0; m < dtSheetName.Rows.Count; m++) { string TABLE_NAME = dtSheetName.Rows[m]["TABLE_NAME"].ToString(); string FilterDatabase = "$FilterDatabase"; if (TABLE_NAME.Contains(FilterDatabase)) { dtSheetName.Rows.Remove(dtSheetName.Rows[m]); } } //包含excel中表名的字符串数组 string[] strTableNames = new string[dtSheetName.Rows.Count]; for (int k = 0; k < dtSheetName.Rows.Count; k++) { strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString(); } for (int i = 0; i < strTableNames.Length; i++) { OleDbDataAdapter myCommand = null; DataTable dt = new DataTable(); //从指定的表明查询数据,可先把所有表明列出来供用户选择 string strExcel = "select*from[" + strTableNames[i].Trim() + "]"; myCommand = new OleDbDataAdapter(strExcel, strConn); //myCommand.Fill(dt); myCommand.Fill(myDataSet, "" + i + ""); conn.Close(); DataTable ExcelTable = myDataSet.Tables[i].DefaultView.ToTable(); ExcelTable.TableName = strTableNames[i].Trim(); list.Add(ExcelTable); } return list; } } }