一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

ASP.NET实现上传Excel功能

时间:2022-06-25 02:56:32 编辑:袖梨 来源:一聚教程网

这几天正好用到上传Excel,并根据Excel中的数据做相应的处理,故整理以备用。

用到的资源:

(1)NOPI 2.2.0.0 可自己官网下载,也可点击:http://pan.**b*aidu.com/s/1b1EMdg

(2)用到一些常见处理文件的公共方法类,可以添加到项目中:http://pan.**b*aidu.com/s/1bJpHuQ

如过上述连接因故无法使用,可在评论留下邮箱,我打包发送过去,如有更好的建议,欢迎指导。

后台的提示方法ShowMsgHelper,根据自己的改写即可。

前台代码:

代码如下 复制代码

导入EXCEL,生成DataTable

$(document).ready(function () {

$("#Import").click(function () {

var filename = $("#FileUpload1").val();

if (filename == '') {

alert('请选择上传的EXCEL文件');

return false;

}

else {

var exec = (/[.]/.exec(filename)) ? /[^.]+$/.exec(filename.toLowerCase()) : '';

if (!(exec == "xlsx" || exec == "xls")) {

alert("文件格式不对,请上传Excel文件!");

return false;

}

}

return true;

});

});

后台代码;

代码如下 复制代码

protectedvoidImpClick(objectsender, EventArgs e)

{

try

{

#region 校验

var fileName =this.FileUpload1.FileName;

if(string.IsNullOrWhiteSpace(fileName))

{

//提示信息

ShowMsgHelper.Alert("请选择上传Excel文件");

return;

}

//获取上传文件扩展名称

if(!(fileName.IndexOf(".xlsx") > 0 || fileName.IndexOf(".xls") > 0))

{

ShowMsgHelper.Alert("上传文件格式不正确,请核对!");

return;

}

#endregion

#region 将Excel文件上传到服务器上临时文件夹中

//临时文件夹,根目录下/Upload/tmp/,根据自己配置选择

stringpath = Server.MapPath("~/") +"Upload\tmp\";

stringretStr=UploadHelper.FileUpload(path,this.FileUpload1);

if(!retStr.Equals("上传成功")) {

ShowMsgHelper.Alert(retStr);

return;

}

#endregion

#region 读取Excel文件第一个表获取内容并转换成DataTable,删除临时文件,也可以自己加时间戳,维护处理

DataTable dt =this.ExcelToDataTable(path +this.FileUpload1.FileName,true);

if(dt ==null) {

ShowMsgHelper.Alert_Error("获取失败");

return;

}

//示例:获取dt中的值

stringtest = dt.Rows[0]["name"].ToString();

stringtest2 = dt.Rows[1]["class"].ToString();

//删除临时文件

DirFileHelper.DeleteFile("Upload\tmp\"+ fileName);

#endregion

}

catch(Exception ex) {

throwex;

}

}

///

/// 将excel导入到datatable

///

/// excel路径

/// 第一行是否是列名

/// 返回datatable

publicDataTable ExcelToDataTable(stringfilePath,boolisColumnName)

{

DataTable dataTable =null;

FileStream fs =null;

DataColumn column =null;

DataRow dataRow =null;

IWorkbook workbook =null;

ISheet sheet =null;

IRow row =null;

ICell cell =null;

intstartRow = 0;

try

{

using(fs = File.OpenRead(filePath))

{

// 2007版本

if(filePath.IndexOf(".xlsx") > 0)

workbook =newXSSFWorkbook(fs);

// 2003版本

elseif(filePath.IndexOf(".xls") > 0)

workbook =newHSSFWorkbook(fs);

if(workbook !=null)

{

sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet

dataTable =newDataTable();

if(sheet !=null)

{

introwCount = sheet.LastRowNum;//总行数

if(rowCount > 0)

{

IRow firstRow = sheet.GetRow(0);//第一行

intcellCount = firstRow.LastCellNum;//列数

//构建datatable的列

if(isColumnName)

{

startRow = 1;//如果第一行是列名,则从第二行开始读取

for(inti = firstRow.FirstCellNum; i

{

cell = firstRow.GetCell(i);

if(cell !=null)

{

if(cell.StringCellValue !=null)

{

column =newDataColumn(cell.StringCellValue);

dataTable.Columns.Add(column);

}

}

}

}

else

{

for(inti = firstRow.FirstCellNum; i

{

column =newDataColumn("column"+ (i + 1));

dataTable.Columns.Add(column);

}

}

//填充行

for(inti = startRow; i

{

row = sheet.GetRow(i);

if(row ==null)continue;

dataRow = dataTable.NewRow();

for(intj = row.FirstCellNum; j

{

cell = row.GetCell(j);

if(cell ==null)

{

dataRow[j] ="";

}

else

{

//CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)

switch(cell.CellType)

{

caseCellType.Blank:

dataRow[j] ="";

break;

caseCellType.Numeric:

shortformat = cell.CellStyle.DataFormat;

//对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理

if(format == 14 || format == 31 || format == 57 || format == 58)

dataRow[j] = cell.DateCellValue;

else dataRow[j] = cell.NumericCellValue;

break;

caseCellType.String:

dataRow[j] = cell.StringCellValue;

break;

}

}

}

dataTable.Rows.Add(dataRow);

}

}

}

}

}

returndataTable;

}

catch(Exception)

{

if(fs !=null)

{

fs.Close();

}

returnnull;

}

}


热门栏目