很久没写文章了,主要是从java转到c#,经历坎坷一言难尽呀,但最重的一点,就是变懒了。希望你们不要学小编。。。咳咳。。好干货开始。
一、首先当然要下载导入NPOI插件,这里呢我给个参考:
https://www.cnblogs.com/-Tiger/p/8880939.html
第一次做Excel表格功能的小伙伴们好好看下。
主要是这三个
二、前端用form表单提交即可,js或jq触发form提交即可
<form class="form-horizontal" id="uploadForm" enctype="multipart/form-data" action="写你自己的路径" >
<input type="file" id="fileUpload" name="fileUpload">
</form>
三、后台代码
using NPOI.SS.UserModel; //NPOI
using NPOI.HSSF.Util; //NPOI
using NPOI.HSSF.UserModel; //NPOI
using NPOI.XSSF.UserModel; //NPOI
/// <summary>
///将Excel中第一个sheet中内容导入到DataTable中
/// 区分xsl和xslx分别处理
/// </summary>
/// <param name="filePath">Excel文件路径,含文件全名</param>
/// <param name="sheetName">此Excel中sheet名</param>
/// <returns></returns>
public DataTable ReadExcelToDataTable()
{
HttpPostedFileBase File = Request.Files["fileUpload"];//<input type="file" name="fileUpload">中name对应获取Excel文件
Stream streamfile = File.InputStream;//将文件转换成流
DataTable dt = new DataTable();
IWorkbook workbook = null;//创建一个工作薄来装Excel表
if (Path.GetExtension(File.FileName).ToLower() == ".xls".ToLower()) //filePath
{//.xls
#region .xls文件处理:HSSFWorkbook
workbook = new HSSFWorkbook(streamfile);
ISheet sheet = workbook.GetSheetAt(0); //获取第一个工作表(sheet)
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
HSSFRow headerRow = (HSSFRow)sheet.GetRow(0);
//一行最后一个方格的编号 即总的列数
for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
{
//SET EVERY COLUMN NAME
HSSFCell cell = (HSSFCell)headerRow.GetCell(j);
dt.Columns.Add(cell.ToString());
}
while (rows.MoveNext())
{
IRow row = (HSSFRow)rows.Current;
DataRow dr = dt.NewRow();
if (row.RowNum == 0) continue;//The firt row is title,no need import
for (int i = 0; i < row.LastCellNum; i++)
{
if (i >= dt.Columns.Count)//cell count>column count,then break //每条记录的单元格数量不能大于表格栏位数量 20140213
{
break;
}
ICell cell = row.GetCell(i);
if ((i == 0) && (string.IsNullOrEmpty(cell.ToString()) == true))//每行第一个cell为空,break
{
break;
}
if (cell == null)
{
dr[i] = null;
}
else
{
//dr[i] = cell.ToString();
if (cell.CellType == CellType.NUMERIC && DateUtil.IsCellDateFormatted(cell))
{
dr[i] = cell.DateCellValue.ToString("yyyy-MM-dd hh:mm:ss"); // //如果内容是时间格式转成这种格式
}
else
{
dr[i] = row.GetCell(i).ToString();
}
}
}
dt.Rows.Add(dr);
}
#endregion
}
else
{//.xlsx
#region .xlsx文件处理:XSSFWorkbook
workbook = new XSSFWorkbook(streamfile);
ISheet sheet = workbook.GetSheetAt(0);
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
XSSFRow headerRow = (XSSFRow)sheet.GetRow(0);
//一行最后一个方格的编号 即总的列数
for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
{
//SET EVERY COLUMN NAME
XSSFCell cell = (XSSFCell)headerRow.GetCell(j);
dt.Columns.Add(cell.ToString());
}
while (rows.MoveNext())
{
IRow row = (XSSFRow)rows.Current;
DataRow dr = dt.NewRow();
if (row.RowNum == 0) continue;//The firt row is title,no need import
for (int i = 0; i < row.LastCellNum; i++)
{
if (i >= dt.Columns.Count)//cell count>column count,then break //每条记录的单元格数量不能大于表格栏位数量 20140213
{
break;
}
ICell cell = row.GetCell(i);
if ((i == 0) && (string.IsNullOrEmpty(cell.ToString()) == true))//每行第一个cell为空,break
{
break;
}
if (cell == null)
{
dr[i] = null;
}
else
{
//dr[i] = cell.ToString();
if (cell.CellType == CellType.NUMERIC && DateUtil.IsCellDateFormatted(cell))
{
dr[i] = cell.DateCellValue.ToString("yyyy-MM-dd hh:mm:ss"); //如果内容是时间格式转成这种格式
} else
{
dr[i] = row.GetCell(i).ToString();
}
}
}
dt.Rows.Add(dr);
}
#endregion
}
return dt;
}