• 通过 NPOI 第三方插件 实现 Excel 的导入,并显示到easyui 的DataGrid控件上


    1,先 引用第三方 导入控件:

      <script src="../../ProductFlow/jquery-easyui-1.4.3/ajaxfileupload.js"></script>

    2,在页面初始化加载时,声明该 导入的控件:

      <input type="file" id="file1" name="file" style=" 202px; height: 31px" />

      <input type="button" value="上传" />

    $(function () {

    $(":button").click(function () {
    ajaxFileUpload();

    });
    });

    //上传控件
    function ajaxFileUpload() {
       $.ajaxFileUpload
       (
      {
         url: "../Handler/ImportHandler.ashx", //用于文件上传的服务器端请求地址
        secureuri: false, //是否需要安全协议,一般设置为false
        fileElementId: 'file1', //文件上传域的ID
       dataType: 'json', //返回值类型 一般设置为json
       success: function (data, status) //服务器成功响应处理函数
      {
       if (data.status == "error") {
       $.messager.alert("提示", data.msg);
       return;
    }
       $("#container").show();
       InitGrid(data);
      $.messager.alert("提示", "文件已上传,数据加载完毕!");
    },
    error: function (data, status, e)//服务器响应失败处理函数
    {
      $.messager.alert("提示", "上传失败!");
    }
    }
    )
      return false;
    }

    2,读取 从页面上传的Excel 里面的数据:

       ImportHandler.ashx:

    <%@ WebHandler Language="C#" Class="ImportHandler" %>

    using System;
    using System.Web;
    using System.IO;
    using NPOI.SS.UserModel;
    using System.Data;
    using System.Collections.Generic;
    using System.Data.OleDb;
    using OThinker.H3.Portal;
    public class ImportHandler : OThinker.H3.Portal.HttpHandlerBase
    {
    /// <summary>
    ///校验上传文件格式(服务器响应处理函数)
    /// </summary>
    /// <param name="msg"></param>
    /// <param name="status"></param>
    /// <param name="newFileName"></param>
    public void showMsg(string msg, string status, string newFileName)
    {
    string res = "";
    res = "{ status:'" + status + "', msg:'" + msg + "',fileName:'" + newFileName + "'}";
    this.Response.Write(res);
    this.Response.End();
    }
    public override void DoAction(HttpContext context)
    {

    System.Web.HttpFileCollection files = this.Request.Files;
    if (files == null || files.Count == 0) return;
    string attachmentId = Guid.NewGuid().ToString();
    DataTable data = new DataTable();

    for (int i = 0; i < files.Count; i++)
    {
    HttpPostedFile file = files[i] as System.Web.HttpPostedFile;
    if (file.ContentLength == 0) continue;
    string fileName = file.FileName;
    string extenstion = fileName.Substring(fileName.LastIndexOf(".") + 1);//后缀名
    if (extenstion.Equals("xls") || extenstion.Equals("xlsx"))
    {
    string sheetName = "sheet1";
    bool isFirstRowColumn = true;
    IWorkbook workbook = null;
    ISheet sheet = null;
    int startRow = 0;

    try
    {
    workbook = WorkbookFactory.Create(file.InputStream);

    if (sheetName != null)
    {
    sheet = workbook.GetSheet(sheetName);
    }
    else
    {
    sheet = workbook.GetSheetAt(0);
    }
    if (sheet != null)
    {
    IRow firstRow = sheet.GetRow(0);
    int cellCount = firstRow.LastCellNum; //一行最后一个cell的编号 即总的列数

    if (isFirstRowColumn)
    {
    for (int j = firstRow.FirstCellNum; j < cellCount; ++j)
    {
    DataColumn column = new DataColumn(firstRow.GetCell(j).StringCellValue);
    data.Columns.Add(column);
    }
    startRow = sheet.FirstRowNum + 1;
    }
    else
    {
    startRow = sheet.FirstRowNum;
    }

    //最后一列的标号
    int rowCount = sheet.LastRowNum;
    for (int j = startRow; j <= rowCount; ++j)
    {
    IRow row = sheet.GetRow(j);
    if (row == null) continue; //没有数据的行默认是null       

    DataRow dataRow = data.NewRow();
    for (int k = row.FirstCellNum; k < cellCount; ++k)
    {
    if (row.GetCell(k) != null) //同理,没有数据的单元格都默认是null
    dataRow[k] = row.GetCell(k).ToString();
    }
    data.Rows.Add(dataRow);
    }
    }
    }
    catch
    {
    }
    finally
    {
    // stream.Close();
    }
    }
    else
    {
    string msg = "导入文件的格式不正确,请先下载模板!";
    showMsg(msg, "error", null);
    break;
    }

    }
    string ResJsonStr = "{ "rows": ";
    if (data.Rows.Count > 0)
    {
    data.Rows.RemoveAt(0);//删除第一行
    int rowCount = data.Rows.Count;
    for (int i = 0; i < rowCount; i++)
    {
    string str = data.Rows[i][0].ToString();
    //筛选出空行,和隐藏行
    if (str == "index")
    {
    data.Rows.RemoveAt(i);
    break;
    }
    }
    Newtonsoft.Json.Converters.IsoDateTimeConverter timeConverter = new Newtonsoft.Json.Converters.IsoDateTimeConverter();
    timeConverter.DateTimeFormat = "yyyy'-'MM'-'dd hh:mm";
    ResJsonStr = ResJsonStr + Newtonsoft.Json.JsonConvert.SerializeObject(data, Newtonsoft.Json.Formatting.Indented, timeConverter)
    + ", "total": " + data.Rows.Count + " }";
    this.Response.Write(ResJsonStr.ToString());
    this.Response.End();
    }
    else
    {
    string msg = "请先选择正确的Excel文件,再上传!";
    showMsg(msg, "error", null);
    }

    }
    }

     3, ImportHandler的 父类: OThinker.H3.Portal.HttpHandlerBase

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Script.Serialization;
    using System.Web.SessionState;

    namespace OThinker.H3.Portal
    {
    /// <summary>
    /// H3 Portal 批处理程序基类,封装了Engine,UserValidator,JavaScriptSerializer,Request,Response,Session
    /// </summary>
    public abstract class HttpHandlerBase : PortalPage, IHttpHandler, IRequiresSessionState
    {
    #region 上下文相关
    protected HttpContext Context;
    protected HttpRequest Request;
    protected HttpResponse Response;
    protected HttpSessionState Session;
    #endregion

    #region Js序列化对象
    private JavaScriptSerializer _JsSerializer = null;
    /// <summary>
    /// 获取JS序列化对象
    /// </summary>
    protected JavaScriptSerializer JSSerializer
    {
    get
    {
    if (_JsSerializer == null)
    {
    _JsSerializer = new JavaScriptSerializer();
    }
    return _JsSerializer;
    }
    }
    #endregion

    public void ProcessRequest(HttpContext context)
    {
    this.Context = context;
    this.Request = context.Request;
    this.Response = context.Response;
    this.Session = context.Session;

    if (this.UserValidator == null)
    {

    if (this.Request.Headers["x-requested-with"] != null && this.Request.Headers["x-requested-with"].Equals("XMLHttpRequest", StringComparison.InvariantCultureIgnoreCase))

    {

    this.Response.Write("PortalSessionOut");

    this.Response.End();

    }

    }
    else
    {
       this.DoAction(context);
    }
    }

    /// <summary>
    /// 事件执行
    /// </summary>
    public abstract void DoAction(HttpContext context);

    public bool IsReusable
    {

    get

    {

    return false;

    }

    }

    }

    }

    如何将 从Excel 中读取出来的数据 显示到 easyui的dataGrid中:

     $('#datagrid').datagrid('loadData', data);//data 就是后台传入的json 数据

     

      

      

  • 相关阅读:
    java.lang.OutOfMemoryError: Java heap space解决办法
    android网络图片加载缓存,避免重复加载。
    Android控制软键盘拉起
    mysql create database 指定utf-8编码
    仿黑客帝国文字雨效果
    C++循环去掉文件的后缀名
    使用python读取多重文件夹下的word(doc、docx)文件,并处理存储到excel(xls、xlsx)文件
    Python操作文件夹
    (转载)Python:列表作为参数
    595. Big Countries (Easy)
  • 原文地址:https://www.cnblogs.com/dlf-myDream/p/5254383.html
Copyright © 2020-2023  润新知