【C#MVC】使用ajaxFileUpload导入Excel,并显示在Grid中
来源:互联网 发布:图书管理数据库er图 编辑:程序博客网 时间:2024/06/17 14:38
学习了如何使用ajaxFileUpload(无刷新上传)导入Excel文件,并在页面中显示出来。C#,asp和MVC操作形似,这里重点说MVC,asp只贴出来代码。
准备:在页面引入js文件。
Step1:(ajaxFileUpload是一个开源项目,有很多版本。原理相似,创建隐藏表单和iframe,使用js提交)写出JS
options参数说明:
1、url 上传处理程序地址。
2,fileElementId 需要上传的文件域的ID,即的ID。
3,secureuri 是否启用安全提交,默认为false。
4,dataType 服务器返回的数据类型。可以为xml,script,json,html。如果不填写,jQuery会自动判断。
5,success 提交成功后自动执行的处理函数,参数data就是服务器返回的数据。
6,error 提交失败自动执行的处理函数。
7,data 自定义参数。这个东西比较有用,当有数据是与上传的图片相关的时候,这个东西就要用到了。
8, type 当要提交自定义参数时,这个参数要设置成post
错误提示:
1,SyntaxError: missing ; before statement错误
如果出现这个错误就需要检查url路径是否可以访问
2,SyntaxError: syntax error错误
如果出现这个错误就需要检查处理提交操作的服务器后台处理程序是否存在语法错误
3,SyntaxError: invalid property id错误
如果出现这个错误就需要检查文本域属性ID是否存在
4,SyntaxError: missing } in XML expression错误
如果出现这个错误就需要检查文件name是否一致或不存在
5,其它自定义错误
大家可使用变量$error直接打印的方法检查各参数是否正确,比起上面这些无效的错误提示还是方便很多。
<script language="javascript" type="text/javascript"> function ajaxFileUpload() { $.ajaxFileUpload({ url: '/TestController/TestImportExcel', //用于文件上传的服务器端请求地址 secureuri: false, //是否需要安全协议,一般设置为false fileElementId: 'fuExcelUpload', //文件上传域的ID dataType: 'json', //返回值类型 一般设置为json success: function (data, status) { LoadGrid(); $("#tbShipmentList").datagrid('loadData', data); }, error: function (data, status, e)//服务器响应失败处理函数 { alert("Error:Please contact administrator."); } }); } function LoadGrid() { $("#tbShipmentList").datagrid({ striped: true, loadMsg: "Loading", rownumbers: true, idField: "SerialNumber", checkOnSelect: false, selectOnCheck: false, singleSelect: true, frozenColumns: [[ { title: 'Shipment No.', field: 'ShipmentNumber', formatter: function (value, row, index) { if (row.Result == 0) { return '<font color="green">' + value + '</font>';; } else { return '<font color="red">' + value + '</font>';; } } } ]], columns: [[ { title: 'Origin', field: 'Origin' }, { title: 'Destination', field: 'Destination' }, { title: 'Pieces', field: 'Pieces' }, { title: 'Weight', field: 'ChargeableWeight(KG)' }, { title: 'ImportResult', field: 'ResutlMsg' } ]] }); } </script>
Step2:在后台接受,并做处理。主要是创建一个Excel文件到服务器端,然后使用Excel的数据库引擎,进行查询,最后返回一个DateTable,然后将DateTable转化为Grid可识别的Json字符串即可。
public string TestImport() { HttpFileCollectionBase files = Request.Files; //接受上传的文件 if (files.Count > 0) { string fileName = "Test" + DateTime.Now.ToString("yyyyMMddhhmmssms") + ".xls"; string filePath = System.Configuration.ConfigurationManager.AppSettings["ExcelUpload"].ToString(); if (files[0].ContentLength == 0) { throw new Exception("No file upload!"); } files[0].SaveAs(filePath + fileName);// 保存上传的文件到服务器端 DataTable dt = OleDBHelper.DoOleSql(filePath + fileName, fileName); // 使用工具类查询出Excel的数据 dt.Columns.Add("ResutlMsg"); dt.Columns.Add("Result"); for (int i = 0; i < dt.Rows.Count; i++) { ExcelDataValidation(dt.Rows[i]); } string res = JsonHelper.ToGridJson(dt, dt.Rows.Count);//转化为Json Session["GridList"] = res; Response.Write(res); } return ""; }
其中重要的工具类:OleDBHelper:
public static class OleDBHelper { public static DataTable DoOleSql(string database, string fileName) { string strConn = null; int Num = fileName.LastIndexOf('.'); string fileExt = ""; if (Num > 0) { fileExt = fileName.Substring(Num).ToLower(); } if (fileExt == ".xlsx") //excel2007的文件 { strConn = "Provider=Microsoft.Ace.OleDb.12.0;;Data Source=\"" + database + "\";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;\""; } if (fileExt == ".xls")//excel2003的文件 { strConn = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=\"" + database + "\";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\""; } OleDbConnection conn; DataSet ds = new DataSet(); conn = new OleDbConnection(strConn); conn.Open(); //返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等 DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //包含excel中表名的字符串数组 string[] strTableNames = new string[dtSheetName.Rows.Count]; string[] strTables = new string[dtSheetName.Rows.Count]; int k; string temp; string[] ids = new string[dtSheetName.Rows.Count]; for (k = 0; k < dtSheetName.Rows.Count; k++) { temp = dtSheetName.Rows[k]["TABLE_NAME"].ToString(); strTables[k] = temp.Trim('$'); strTableNames[k] = temp; } OleDbDataAdapter myCommand = null; DataTable dt = new DataTable(); //从指定的表明查询数据,可先把所有表明列出来供用户选择 string strExcel = "select * from [" + strTableNames[0] + "]"; myCommand = new OleDbDataAdapter(strExcel, strConn); myCommand.Fill(dt); conn.Close(); dt.TableName = strTables[0]; return dt; } }
最后将在Asp中如何使用ajaxFileUpload,贴出来:
Part 1:(页面部分,与MVC中相似,唯一不同的是MVC请求Controller数据,而Asp请求ashx页面。)
<script language="javascript" type="text/javascript"> if(typeof JSON == 'undefined'){$('head').append($("<script type='text/javascript' src='../../JS/easyui1.3.2/json2.js'>"));} function ajaxFileUpload() { $.ajaxFileUpload({ url: 'DataFile/UploadExcel.ashx', //用于文件上传的服务器端请求地址 secureuri: false, //是否需要安全协议,一般设置为false fileElementId: 'fuExcelUpload', //文件上传域的ID dataType: 'json', //返回值类型 一般设置为json success:function(data,status){ LoadGrid(); $("#tbShipmentList").datagrid('loadData',data); }, error: function (data, status, e)//服务器响应失败处理函数 { alert(data.responseText); } }); } function LoadGrid(){ $("#tbShipmentList").datagrid({ striped:true, loadMsg:"Loading", rownumbers:true, idField:"SerialNumber", checkOnSelect: false, selectOnCheck: false, singleSelect:true, frozenColumns:[[ {checkbox:true }, {title:'Shipment No.',field:'ShipmentNumber',formatter: function(value, row, index){ if(row.Result == 0){ return '<font color="green">' + value + '</font>';; }else{ return '<font color="red">' + value + '</font>';; } }} ]], columns:[[ {title:'Consignee Email',field:'ConsigneeEmail'}, {title:'Consignee Name',field:'ConsigneeName'}, {title:'Consignee Address',field:'ConsigneeAddress'}, {title:'Consignee City',field:'ConsigneeCity'}, {title:'Consignee Zip',field:'ConsigneeZip'}, {title:'Consignee Contact',field:'ConsigneeContact'}, {title:'Consignee Tel No.',field:'ConsigneeTel'} ]] }); } </script>
Part 2: 在ashx如同Controller中一样处理Excel,并查询。
public class UploadExcel : IHttpHandler, System.Web.SessionState.IReadOnlySessionState{ public void ProcessRequest (HttpContext context) { try { context.Response.ContentType = "text/plain"; HttpFileCollection files = context.Request.Files; string branchCode = context.Session["BranchCode"].ToString(); if (files.Count > 0) { string fileName = "Shipment" + DateTime.Now.ToString("yyyyMMddhhmmssms") + ".xls"; string filePath = System.Configuration.ConfigurationManager.AppSettings["SendMailTmp"].ToString(); if (Directory.Exists(filePath) == false)//如果不存在就创建file文件夹 { Directory.CreateDirectory(filePath); } if (files[0].ContentLength == 0) { throw new Exception("No file upload!"); } files[0].SaveAs(filePath + fileName); DataTable dt = DoOleSql(filePath + fileName, fileName); string res = JsonHelper.ToGridJson(dt, dt.Rows.Count); context.Session["GridList"] = res; context.Response.Write(res); Directory.Delete(filePath,true); } } catch(Exception ex) { throw ex; } } public System.Data.DataTable DoOleSql(string database, string fileName) { string strConn = null; int Num = fileName.LastIndexOf('.'); string fileExt = ""; if (Num > 0) { fileExt = fileName.Substring(Num).ToLower(); } if (fileExt == ".xlsx") //excel2007的文件 { strConn = "Provider=Microsoft.Ace.OleDb.12.0;;Data Source=\"" + database + "\";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;\""; } if (fileExt == ".xls")//excel2003的文件 { strConn = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=\"" + database + "\";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\""; } OleDbConnection conn; DataSet ds = new DataSet(); conn = new OleDbConnection(strConn); conn.Open(); //返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等 DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //包含excel中表名的字符串数组 string[] strTableNames = new string[dtSheetName.Rows.Count]; string[] strTables = new string[dtSheetName.Rows.Count]; int k; string temp; string[] ids = new string[dtSheetName.Rows.Count]; for (k = 0; k < dtSheetName.Rows.Count; k++) { temp = dtSheetName.Rows[k]["TABLE_NAME"].ToString(); strTables[k] = temp.Trim('$'); strTableNames[k] = temp; } OleDbDataAdapter myCommand = null; DataTable dt = new DataTable(); //从指定的表明查询数据,可先把所有表明列出来供用户选择 string strExcel = "select * from [" + strTableNames[0] + "]"; myCommand = new OleDbDataAdapter(strExcel, strConn); myCommand.Fill(dt); conn.Close(); dt.TableName = strTables[0]; return dt; } public bool IsReusable { get { return false; } }}
- 【C#MVC】使用ajaxFileUpload导入Excel,并显示在Grid中
- Extjs4 Excel导入并在grid显示数据
- 使用ajaxFileUpload实现导入Excel
- 编程之旅-Ext4.X导入excel表格在grid中显示
- .NET(C#) EXCEL导入数据库 并显示在本页面 DEM导入
- 在ASP.NET MVC中使用Grid.mvc
- MVC 实现数据导入Excel,并在客户端下载。
- 将DataGridView中的数据导入Excel中,并显示Excel
- 在ASP.NET中将Excel文件中数据导入数据库并显示进度条
- asp.net 将本地excel表导入网页 并在gridview中显示
- 把Excel中的数据导入到数据库中并显示在页面
- 数据导入到excel 并显示在页面
- java中使用jxl导入导出excel实例及其在spring mvc中的应用
- ExtJS4.0中Excel文件导入grid
- 在AndroidStudio中导入SlidingMenu并使用
- 在struts2中使用jQuery插件ajaxfileupload
- ajaxfileupload.js在SpringMVC中使用笔记
- winform中 将DataGrid中的数据导入Excel中,并显示Excel应用程序
- 五大方案,教你关于微信公众号的内容定位
- Android中如何根据图片url路径来获取网络图片
- 剔除空格,用空格进行分割字符串
- C++中关于数据小数点,取整的方法
- java中dom4j解析xml文件怎么获取节点属性
- 【C#MVC】使用ajaxFileUpload导入Excel,并显示在Grid中
- 5. find操作详解
- VS-安装后出现“未找到与约束contractname”
- mysql 数据导入导出
- C#中的一些小问题
- angularjs学习指南
- Matlab与线性代数 -- 逆矩阵
- Android 封装SharedPreferences类
- 获得 LayoutInflater 实例的三种方式