Ajax上传Excel文件,后台处理(.net MVC)


展示:

Excel示例数据:

页面显示数据(这里是因为需求没有显示标题):

Js里数据显示 (这里是使用0,1,2这些数字当 key) :

 

 

 

前台页面:

  <input type="file" onchange="DRfile()" id="DRExcel" name="DRExcel" />

前台Js:

  <script>

    function DRfile() {

      var formData = new FormData(); //创建一个formData对象实例

      formData.append("excelFile", $('#DRExcel')[0].files[0]); //通过append方法添加数据
      //ajax请求后台地址
      $.ajax({
        url: "这里写后台得链接地址",
        dataType: 'json',
        type: 'POST',
        async: false,
        data: formData,
        processData: false, // 使数据不做处理
        contentType: false, // 不要设置Content-Type请求头
        success: function (data) {

          var str = '<table style="border:0.1px dashed #000000;">';
          for (var temp in data) {
            str = str + '<tr>';
            for (var tem in data[temp]) {
              str = str + '<td style="width:120px;height:10px;text-align:center;border:0.1px dashed #000000;">';
              str = str + data[temp][tem];
              str = str + '</td>';
            }
          str = str + '</tr>';
          }
          str = str + '</table>';

          $('#importDialog').dialog({   //这里使用EasyUI
            title: '导入文件',
            width: 1200,
            height: 500,
            closed: false,
            cache: false,
            content: str,
            modal: true,
            buttons: [{
              text: '导入',
                handler: function () {
                   //这里做显示数据页面得操作
                  }
              }, {
              text: '关闭',
                handler: function () {
                     //这里做关闭操作
              }
            }]
          });

        }
      });
    }
  </script>

 

后台方法:

public string ExcelToolFormFile()
{
  System.Web.HttpFileCollection _file = System.Web.HttpContext.Current.Request.Files;
  Stream stream = _file[0].InputStream;//获取文件流
  IWorkbook workbook = null;
  if (_file[0].FileName.Split('.')[1] == "xls")
  {
    workbook = new HSSFWorkbook(stream);//从流内容创建Workbook对象
  }
  else
  {
    workbook = new XSSFWorkbook(stream);
  }
  ISheet sheet = workbook.GetSheetAt(0);//获取第一个工作表
  JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
  javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
  ArrayList arrayList = new ArrayList();
  for (int j = 0; j < sheet.LastRowNum + 1; j++)
  {
    Dictionary<string, object> dictionary = new Dictionary<string, object>();
    //得到当前的行
    IRow row = sheet.GetRow(j);
    if (row != null)
    {
      //遍历每行所有的单元格
      //注意这里不用加1,这里得到的最后一个单元格的索引默认是从1开始的
      for (int k = 0; k < row.LastCellNum; k++)
      {

        //得到当前单元格
        dictionary.Add(k.ToString(), row.GetCell(k) == null ? "" : row.GetCell(k).ToString());
      }
      if (!(dictionary["0"].ToString() == "" && dictionary["1"].ToString() == ""))
      {
        arrayList.Add(dictionary);
      }
    }
  }
  return javaScriptSerializer.Serialize(arrayList);
}

 

这个操作里需要注意得几个地方:

1,

HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls

XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx

2,在请求成功或者是失败得时候,都要把input里得值置空,否者当没有刷新页面再次点击input得时候,是不会调取onchange方法得

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM