首先用表单提交file的value用HttpPost的方法传入后端,用HttpPostedFileBase接收
注意:前端的form中需要 enctype="multipart/form-data"属性
[HttpPost]
public ActionResult Indexpars(HttpPostedFileBase file)
{
var Path = Server.MapPath("//保存的地址" + file.FileName);
file.SaveAs(Path);//将上传的表格保存到地址
var table = ExcelToDataTable(Path);//调用方法把保存的地址传入下面的方法里面
}
public static DataTable ExcelToDataTable(string filePath)
{
IWorkbook Workbook;
DataTable table = new DataTable();
try
{
using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
//XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式
string fileExt = Path.GetExtension(filePath).ToLower();
if (fileExt == ".xls")
{
Workbook = new HSSFWorkbook(fileStream);
}
else if (fileExt == ".xlsx")
{
Workbook = new XSSFWorkbook(fileStream);
}
else
{
Workbook = null;
}
}
}
catch (Exception ex)
{
throw ex;
}
//定位在第一个sheet
ISheet sheet = Workbook.GetSheetAt(0);
//第一行为标题行
IRow headerRow = sheet.GetRow(0);
int cellCount = headerRow.LastCellNum;
int rowCount = sheet.LastRowNum;
//循环添加标题列
for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
table.Columns.Add(column);
}
//数据
for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++)
{
IRow row = sheet.GetRow(i);
DataRow dataRow = table.NewRow();
if (row != null)
{
for (int columnIndex = 0; columnIndex < row.LastCellNum; columnIndex++)
{
ICell cell = row.GetCell(columnIndex);
//如果表格里面的值为空就输出空字符串
if (cell == null)
{
dataRow[columnIndex] = "";
}
else
{
if (cell.CellType == CellType.Numeric && DateUtil.IsCellDateFormatted(cell))
{
if (cell.DateCellValue.Hour > 0 || cell.DateCellValue.Minute > 0 || cell.DateCellValue.Second > 0 || cell.DateCellValue.Millisecond > 0)
{
dataRow[columnIndex] = cell.DateCellValue.ToString();
}
else
{
//转换为时间的形式
dataRow[columnIndex] = cell.DateCellValue.ToString("yyyy-MM-dd");
}
}
else
{
dataRow[columnIndex] = cell.ToString();
}
}
}
//保存
table.Rows.Add(dataRow);
}
}
return table;
}
第一次写博客,还是个实习生,如果有补充的请各位多多指教