asp.net 导入excel表格
2015-06-09 11:01
656 查看
1、Excel表格
2、.aspx页面
<input id="fileUp" type="file" runat="server" />
3、处理方法
protected void importExcel()
{
string LocalSaveFilePath = ""; //临时文件路径
try
{
string file = fileUp.Value;
string suffix = file.Substring(this.fileUp.Value.LastIndexOf('.') + 1);
if (!suffix.ToLower().Equals("xls") && !suffix.ToLower().Equals("xlsx"))
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), DateTime.Now.ToString(), "alert('文件格式不正确!请选择正确的excel文件!');", true);
return;
}
if (fileUp.PostedFile.ContentLength > 10485760)//1024*1024*10=10M,文件大小<10M
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), DateTime.Now.ToString(), "alert('文件太大!请选择10M以内的文件!');", true);
return;
}
//保存临时文件
string url = "/userfiles/temp/";
LocalSaveFilePath = Server.MapPath(url);
if (LocalSaveFilePath.Trim().Length > 0 && !Directory.Exists(LocalSaveFilePath))
{
Directory.CreateDirectory(LocalSaveFilePath);
}
string guid = Guid.NewGuid().ToString().Replace("-", "");
if (file.ToLower().EndsWith(".xls"))
{
LocalSaveFilePath = LocalSaveFilePath + guid + ".xls";
}
else if (file.ToLower().EndsWith(".xlsx"))
{
LocalSaveFilePath = LocalSaveFilePath + guid + ".xlsx";
}
fileUp.PostedFile.SaveAs(LocalSaveFilePath);
//连接Excel Str
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + LocalSaveFilePath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
//链接并打开Excel
OleDbConnection cnnxls = new OleDbConnection(strConn);
cnnxls.Open();
//读取Excel里面有 表Sheet1
OleDbDataAdapter oda = new OleDbDataAdapter("select * from [Sheet1$]", cnnxls);
//将Excel里面有表内容装载到内存表中!
DataSet ds = new DataSet();
try
{
oda.Fill(ds);
}
catch (Exception exc)
{
//删除临时文件
if (File.Exists(LocalSaveFilePath))
File.Delete(LocalSaveFilePath);
return;
}
finally
{
cnnxls.Close();
cnnxls = null;
}
//=================================相关校验,插入到数据库===================================
if (ds.Tables.Count > 0)
{
DataTable dt = ds.Tables[0];
//验证excel表格中,是否存在“用户名”列
if (!dt.Columns.Contains("用户名"))
{
//提示:不存在“用户名”列,excel格式不对,删除临时文件
if (File.Exists(LocalSaveFilePath))
File.Delete(LocalSaveFilePath);
return;
}
//验证excel表格中,是否存在“密码”列
if (!dt.Columns.Contains("密码"))
{
////提示:不存在“密码”列,excel格式不对,删除临时文件
if (File.Exists(LocalSaveFilePath))
File.Delete(LocalSaveFilePath);
return;
}
//验证excel表格中,是否存在“年龄”列
if (!dt.Columns.Contains("年龄"))
{
////提示:不存在“年龄”列,excel格式不对,删除临时文件
if (File.Exists(LocalSaveFilePath))
File.Delete(LocalSaveFilePath);
return;
}
if (dt.Rows.Count > 10000)
{
//提示:一次导入不能超过10000行
if (File.Exists(LocalSaveFilePath))
File.Delete(LocalSaveFilePath);
return;
}
for (int i = 0; i < dt.Rows.Count; i++)
{
string uname = dt.Rows[i]["用户名"].ToString().Trim();
string password = dt.Rows[i]["密码"].ToString().Trim();
string age = dt.Rows[i]["年龄"].ToString().Trim();
//添加到数据库
//...
//...
}
}
}
catch (Exception exc)
{
return;
}
//删除临时文件
if (File.Exists(LocalSaveFilePath))
File.Delete(LocalSaveFilePath);
}
程序可能有些问题(当然,只是可能,因为这是之前写的,简化了一下,还没测试。)
用户名 | 密码 | 年龄 |
aaaaaa | 111111 | 18 |
bbbbbb | 111111 | 19 |
<input id="fileUp" type="file" runat="server" />
3、处理方法
protected void importExcel()
{
string LocalSaveFilePath = ""; //临时文件路径
try
{
string file = fileUp.Value;
string suffix = file.Substring(this.fileUp.Value.LastIndexOf('.') + 1);
if (!suffix.ToLower().Equals("xls") && !suffix.ToLower().Equals("xlsx"))
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), DateTime.Now.ToString(), "alert('文件格式不正确!请选择正确的excel文件!');", true);
return;
}
if (fileUp.PostedFile.ContentLength > 10485760)//1024*1024*10=10M,文件大小<10M
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), DateTime.Now.ToString(), "alert('文件太大!请选择10M以内的文件!');", true);
return;
}
//保存临时文件
string url = "/userfiles/temp/";
LocalSaveFilePath = Server.MapPath(url);
if (LocalSaveFilePath.Trim().Length > 0 && !Directory.Exists(LocalSaveFilePath))
{
Directory.CreateDirectory(LocalSaveFilePath);
}
string guid = Guid.NewGuid().ToString().Replace("-", "");
if (file.ToLower().EndsWith(".xls"))
{
LocalSaveFilePath = LocalSaveFilePath + guid + ".xls";
}
else if (file.ToLower().EndsWith(".xlsx"))
{
LocalSaveFilePath = LocalSaveFilePath + guid + ".xlsx";
}
fileUp.PostedFile.SaveAs(LocalSaveFilePath);
//连接Excel Str
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + LocalSaveFilePath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
//链接并打开Excel
OleDbConnection cnnxls = new OleDbConnection(strConn);
cnnxls.Open();
//读取Excel里面有 表Sheet1
OleDbDataAdapter oda = new OleDbDataAdapter("select * from [Sheet1$]", cnnxls);
//将Excel里面有表内容装载到内存表中!
DataSet ds = new DataSet();
try
{
oda.Fill(ds);
}
catch (Exception exc)
{
//删除临时文件
if (File.Exists(LocalSaveFilePath))
File.Delete(LocalSaveFilePath);
return;
}
finally
{
cnnxls.Close();
cnnxls = null;
}
//=================================相关校验,插入到数据库===================================
if (ds.Tables.Count > 0)
{
DataTable dt = ds.Tables[0];
//验证excel表格中,是否存在“用户名”列
if (!dt.Columns.Contains("用户名"))
{
//提示:不存在“用户名”列,excel格式不对,删除临时文件
if (File.Exists(LocalSaveFilePath))
File.Delete(LocalSaveFilePath);
return;
}
//验证excel表格中,是否存在“密码”列
if (!dt.Columns.Contains("密码"))
{
////提示:不存在“密码”列,excel格式不对,删除临时文件
if (File.Exists(LocalSaveFilePath))
File.Delete(LocalSaveFilePath);
return;
}
//验证excel表格中,是否存在“年龄”列
if (!dt.Columns.Contains("年龄"))
{
////提示:不存在“年龄”列,excel格式不对,删除临时文件
if (File.Exists(LocalSaveFilePath))
File.Delete(LocalSaveFilePath);
return;
}
if (dt.Rows.Count > 10000)
{
//提示:一次导入不能超过10000行
if (File.Exists(LocalSaveFilePath))
File.Delete(LocalSaveFilePath);
return;
}
for (int i = 0; i < dt.Rows.Count; i++)
{
string uname = dt.Rows[i]["用户名"].ToString().Trim();
string password = dt.Rows[i]["密码"].ToString().Trim();
string age = dt.Rows[i]["年龄"].ToString().Trim();
//添加到数据库
//...
//...
}
}
}
catch (Exception exc)
{
return;
}
//删除临时文件
if (File.Exists(LocalSaveFilePath))
File.Delete(LocalSaveFilePath);
}
程序可能有些问题(当然,只是可能,因为这是之前写的,简化了一下,还没测试。)
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- Android之获取手机上的图片和视频缩略图thumbnails
- 使用Python生成Excel格式的图片
- 数据库链接字符串查询网站
- c#调用COM组件
- Excel 曝出 Power Query 安全漏洞,1.2 亿用户易受远程 DDE 攻击
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- excel vba 限制工作表的滚动区域代码
- excel vba 高亮显示当前行代码
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 星外ASP.Net的安全设置相关说明
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- C#中抽象方法与虚拟方法的区别