JS实现Excel上传
最近做了一个上传Excel的功能,支持.xls .xlsx
1、页面引入JS
<script src="/js/jquery-plugins/fineuploader-3.7.1/jquery.fineuploader-3.7.1.min.js"></script>
2、
<a id="uploader1" class="easyui-linkbutton" icon="icon-upload" plain="true" Onclick="uploadClick();" title="上传">上传</a>
3、 定义uploadClick()方法调用后台代码。。。略
4、后台上传代码
[System.Web.Http.HttpPost]
public dynamic PostFile()
{
try
{
var context = HttpContext.Current;
var request = context.Request;
//保存文件
var postFile = request.Files[0];
string uploadPath = HttpContext.Current.Server.MapPath("~/Upload/");
if (!Directory.Exists(uploadPath))
Directory.CreateDirectory(uploadPath);
string filePath = postFile.FileName.Substring(postFile.FileName.LastIndexOf("\\") + 1);
string fileType = filePath.Substring(filePath.LastIndexOf("."));
filePath = filePath.Substring(0, filePath.LastIndexOf("."));
filePath = uploadPath + filePath + DateTime.Now.ToString("yyyyMMddHHmmss") + DateTime.Now.Millisecond + fileType;
request.Files[0].SaveAs(filePath);
//读取文件
var dt = new DataTable();
var msg = ReadFile(filePath, ref dt);
if (!string.IsNullOrEmpty(msg))
{
throw new Exception(msg);
}
using (var db = Db.Context("Mms"))
{
db.UseTransaction(true);
try
{
foreach (DataRow row in dt.Rows)
{
//忽略首行
if (row == dt.Rows[0])
{
continue;
}
var schedule = new CRM_Schedule();
schedule.ScheduleType = row[0].ToString();
schedule.HospID =int.Parse( row[1].ToString());
schedule.ScheduleDate = DateTime.Parse(row[2].ToString());
schedule.Rate = Double.Parse(row[3].ToString());
var ret = db.Sql("select 1 from CRM_Schedule where ScheduleType = @0 and HospID = @1 and ScheduleDate = @2 and Rate = @3", schedule.ScheduleType,schedule.HospID,schedule.ScheduleDate,schedule.Rate).QuerySingle<int>();
//忽略重复记录
if (ret <= 0)
{
db.Insert<CRM_Schedule>("CRM_Schedule", schedule).AutoMap(x => x.ScheduleID).Execute();
}
}
db.Commit();
}
catch (Exception ex)
{
db.Rollback();
throw ex;
}
}
}
catch (Exception e)
{
return new { error = e.Message, preventRetry = true };
}
//返回前台
return new { success = true, message = "导入成功!" };
}
public dynamic PostFile()
{
try
{
var context = HttpContext.Current;
var request = context.Request;
//保存文件
var postFile = request.Files[0];
string uploadPath = HttpContext.Current.Server.MapPath("~/Upload/");
if (!Directory.Exists(uploadPath))
Directory.CreateDirectory(uploadPath);
string filePath = postFile.FileName.Substring(postFile.FileName.LastIndexOf("\\") + 1);
string fileType = filePath.Substring(filePath.LastIndexOf("."));
filePath = filePath.Substring(0, filePath.LastIndexOf("."));
filePath = uploadPath + filePath + DateTime.Now.ToString("yyyyMMddHHmmss") + DateTime.Now.Millisecond + fileType;
request.Files[0].SaveAs(filePath);
//读取文件
var dt = new DataTable();
var msg = ReadFile(filePath, ref dt);
if (!string.IsNullOrEmpty(msg))
{
throw new Exception(msg);
}
using (var db = Db.Context("Mms"))
{
db.UseTransaction(true);
try
{
foreach (DataRow row in dt.Rows)
{
//忽略首行
if (row == dt.Rows[0])
{
continue;
}
var schedule = new CRM_Schedule();
schedule.ScheduleType = row[0].ToString();
schedule.HospID =int.Parse( row[1].ToString());
schedule.ScheduleDate = DateTime.Parse(row[2].ToString());
schedule.Rate = Double.Parse(row[3].ToString());
var ret = db.Sql("select 1 from CRM_Schedule where ScheduleType = @0 and HospID = @1 and ScheduleDate = @2 and Rate = @3", schedule.ScheduleType,schedule.HospID,schedule.ScheduleDate,schedule.Rate).QuerySingle<int>();
//忽略重复记录
if (ret <= 0)
{
db.Insert<CRM_Schedule>("CRM_Schedule", schedule).AutoMap(x => x.ScheduleID).Execute();
}
}
db.Commit();
}
catch (Exception ex)
{
db.Rollback();
throw ex;
}
}
}
catch (Exception e)
{
return new { error = e.Message, preventRetry = true };
}
//返回前台
return new { success = true, message = "导入成功!" };
}
//读取数据
private string ReadFile(string filePath, ref DataTable dtSource)
{
string strCon = string.Empty;
if (filePath.ToLower().IndexOf(".xlsx") > 0)
{
strCon = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=YES'", filePath);
}
else
{
strCon = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;IMEX=1'", filePath);
}
System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strCon);
try
{
Conn.Open();
var Sheet1 = "Sheet1";
string sSheetName = "";
if (String.IsNullOrEmpty(Sheet1))
{
List<string> lstSheetNames = new List<string>();
DataTable dtSheets = new DataTable();
dtSheets = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
for (int i = 0; i < dtSheets.Rows.Count; i++)
{
if (!dtSheets.Rows[i]["TABLE_NAME"].ToString().Contains("_"))
{
lstSheetNames.Add(dtSheets.Rows[i]["TABLE_NAME"].ToString());
}
}
sSheetName = lstSheetNames[0];
}
else
{
sSheetName = Sheet1 + "$";
}
DataSet ds = new DataSet();
string strCom = String.Format("SELECT * FROM [{0}]", sSheetName);
System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, Conn);
myCommand.Fill(ds, "ExcelTable");
dtSource = ds.Tables[0];
}
catch (Exception e)
{
return "读取文件数据时出错:" + e.Message;
}
finally
{
Conn.Close();
try
{
FileInfo fi = new FileInfo(filePath); //删除临时文件
fi.Delete();
}
catch { }
}
return "";
}
{
string strCon = string.Empty;
if (filePath.ToLower().IndexOf(".xlsx") > 0)
{
strCon = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=YES'", filePath);
}
else
{
strCon = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;IMEX=1'", filePath);
}
System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strCon);
try
{
Conn.Open();
var Sheet1 = "Sheet1";
string sSheetName = "";
if (String.IsNullOrEmpty(Sheet1))
{
List<string> lstSheetNames = new List<string>();
DataTable dtSheets = new DataTable();
dtSheets = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
for (int i = 0; i < dtSheets.Rows.Count; i++)
{
if (!dtSheets.Rows[i]["TABLE_NAME"].ToString().Contains("_"))
{
lstSheetNames.Add(dtSheets.Rows[i]["TABLE_NAME"].ToString());
}
}
sSheetName = lstSheetNames[0];
}
else
{
sSheetName = Sheet1 + "$";
}
DataSet ds = new DataSet();
string strCom = String.Format("SELECT * FROM [{0}]", sSheetName);
System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, Conn);
myCommand.Fill(ds, "ExcelTable");
dtSource = ds.Tables[0];
}
catch (Exception e)
{
return "读取文件数据时出错:" + e.Message;
}
finally
{
Conn.Close();
try
{
FileInfo fi = new FileInfo(filePath); //删除临时文件
fi.Delete();
}
catch { }
}
return "";
}
浙公网安备 33010602011771号