欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在web中js實現(xiàn)類似excel的表格控件

 更新時間:2016年09月01日 11:24:20   作者:JackWang-CUMT  
這篇文章主要介紹了如何在web中實現(xiàn)類似excel的表格控件,具有一定的參考價值,感興趣的小伙伴們可以參考一下

Execl功能非常強(qiáng)大,內(nèi)置的很多函數(shù)或公式可以大大提高對數(shù)據(jù)的加工處理能力。那么在web中有沒有類似的控件呢?經(jīng)過一番搜尋,發(fā)現(xiàn)handsontable具備了基本的excel功能支持公式,同時能對數(shù)據(jù)進(jìn)行實時編輯。另外支持拖動復(fù)制、Ctrl+C 、Ctrl+V 等等。在瀏覽器支持方面,它支持以下的瀏覽器: IE7+, FF, Chrome, Safari, Opera。

首先引入相關(guān)庫文件,公式支持不包含在handsontable.full.js中,需要單獨引入: 

<script src="http://handsontable.github.io/handsontable-ruleJS/lib/jquery/jquery-1.10.2.js"></script>
<script src="http://handsontable.github.io/handsontable-ruleJS/lib/handsontable/handsontable.full.js"></script>
<link rel="stylesheet" media="screen" >
<script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/lodash/lodash.js"></script>
<script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/underscore.string/underscore.string.js"></script>
<script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/moment/moment.js"></script>
<script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/numeral/numeral.js"></script>
<script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/numericjs/numeric.js"></script>
<script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/js-md5/md5.js"></script>
<script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/jstat/jstat.js"></script>
<script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/formulajs/formula.js"></script>
<script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/js/parser.js"></script>
<script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/js/ruleJS.js"></script>
<script src="http://handsontable.github.io/handsontable-ruleJS/lib/handsontable/handsontable.formula.js"></script>

在HTML中放置一個Div容器來存放handsontable控件:

 <body>
  <div id="handsontable-code"></div>
 </body>

在javascript代碼中,首先獲取div容器,然后創(chuàng)建表格控件: 

<script type="text/javascript">
   $(document).ready(function () {

 var data1 = [
  ['=$B$2', "Maserati", "Mazda", "return 1+2;", 'return DataAccess.getScalar("select top 1 name from Cloud_Users where cellPhone=15895211486");', "=A$1"],
  [2009, 0, 2941, 4303, 354, 5814],
  [2010, 5, 2905, 2867, '=SUM(A4,2,3)', '=$B1'],
  [2011, 4, 2517, 4822, 552, 6127],
  [2012, '=SUM(A2:A5)', '=SUM(B5,E3)', '=A2/B2', 12, 4151]
 ];


      function negativeValueRenderer(instance, td, row, col, prop, value, cellProperties) {
        Handsontable.renderers.TextRenderer.apply(this, arguments);

        var escaped = Handsontable.helper.stringify(value),
        newvalue;

        if (escaped.indexOf('return') === 0) {
          //計算列為只讀
          //cellProperties.readOnly = true;
          td.style.background = '#EEE';
          newvalue = document.createElement('span');
          $.ajax({
            //提交數(shù)據(jù)的類型 POST GET
            type: "POST",
            //提交的網(wǎng)址
            url: "/services/CSEngine.ashx",
            //提交的數(shù)據(jù)
            data: { code: value, code2: escaped },
            //返回數(shù)據(jù)的格式
            datatype: "html",//"xml", "html", "script", "json", "jsonp", "text".
            //在請求之前調(diào)用的函數(shù)
            //beforeSend: function () { $("#msg").html("logining"); },
            //成功返回之后調(diào)用的函數(shù)       
            success: function (data) {
              // $("#msg").html(decodeURI(data));
              newvalue.innerHTML = decodeURI(data);
            },
            //調(diào)用執(zhí)行后調(diào)用的函數(shù)
            complete: function (XMLHttpRequest, textStatus) {
              //alert(XMLHttpRequest.responseText);
              // alert(textStatus);
              //HideLoading();
            },
            //調(diào)用出錯執(zhí)行的函數(shù)
            error: function () {
              //請求出錯處理
              // alert('error')
            }
          });
         

          Handsontable.Dom.addEvent(newvalue, 'mousedown', function (e) {
            e.preventDefault(); // prevent selection quirk
          });

          Handsontable.Dom.empty(td);
          td.appendChild(newvalue);
        }
        // if row contains negative number
        if (parseInt(value, 10) < 0) {
          // add class "negative"
          td.className = 'negative';
        }

       
      }



 //類似excel進(jìn)行拖放,公式會變
 var container1 = $('#handsontable-code');
 Handsontable.renderers.registerRenderer('negativeValueRenderer', negativeValueRenderer);
 container1.handsontable({
  data: data1,
  minSpareRows: 1,
  colHeaders: true,
  rowHeaders: true,
  contextMenu: true,
  manualColumnResize: true,
  formulas: true,
   cells: function (row, col, prop) {
          var cellProperties = {};
          var escaped = Handsontable.helper.stringify(this.instance.getData()[row][col]);
          if (escaped.indexOf('return')===0) {
            cellProperties.renderer = "negativeValueRenderer"; 
          }
  

          return cellProperties;
        }
 });
 
});
   
  </script>

其中 =SUM(B5,E3)的公式是RuleJs提供的,return 1+2是自己實現(xiàn)的C#代碼腳本,需要單擊解析:

public class CSEngine : IHttpHandler {
  private static int count = 0;
  public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "text/plain";

    try
    {
      count++;
      string ret = "";
      string code = context.Request["code"].ToString();
      if (string.IsNullOrEmpty(code))
      {
        ret = "參數(shù)錯誤";
      }
      else
      {
        ScriptOptions options = ScriptOptions.Default
         .AddReferences(
           Assembly.GetAssembly(typeof(DBServices.DataAccess))
          )
         //.AddImports("System.Data")
         //.AddImports("System.Data.SqlClient")
         .AddImports("DBServices");
        var state = CSharpScript.RunAsync(code, options).Result.ReturnValue;
        ret = state.ToString();

        state = null;
        options = null;
      }
      Console.WriteLine(count);
      context.Response.Write(ret);
    }
    catch(Exception ex)
    {
      //error
      Console.WriteLine(count);
    }
  }

  public bool IsReusable {
    get {
      return false;
    }
  }

}

運行代碼,如下:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 微信小程序利用Canvas繪制圖片和豎排文字詳解

    微信小程序利用Canvas繪制圖片和豎排文字詳解

    這篇文章主要介紹了微信小程序利用Canvas繪制圖片和豎排文字詳解,合成圖片應(yīng)該按照 Canvas 的文檔來做都沒什么問題,主要是有個豎排文字的需求,這里和大家分享一下,需要的朋友可以參考下
    2019-06-06
  • Json解析的方法小結(jié)

    Json解析的方法小結(jié)

    本文給大家?guī)砹薺son解析方法小結(jié)的知識,非常不錯,具有參考借鑒價值,感興趣的朋友一起學(xué)習(xí)吧
    2016-06-06
  • js 調(diào)用父窗口的具體實現(xiàn)代碼

    js 調(diào)用父窗口的具體實現(xiàn)代碼

    想要實現(xiàn)如題所示:父窗體需要頂一個show()方法,具體實現(xiàn)代碼如下,感興趣的朋友可以參考下哈,希望對大家有所幫助
    2013-07-07
  • JavaScript中常用的3種彈出提示框(alert、confirm、prompt)

    JavaScript中常用的3種彈出提示框(alert、confirm、prompt)

    這篇文章主要給大家介紹了關(guān)于JavaScript中常用的3種彈出提示框(alert、confirm、prompt)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 利用svg實現(xiàn)帶加載進(jìn)度的loading

    利用svg實現(xiàn)帶加載進(jìn)度的loading

    svg是基于XML,由World?Wide?Web?Consortium?(W3C)聯(lián)盟開發(fā)的一種開放標(biāo)準(zhǔn)的矢量圖形語言,可讓你設(shè)計激動人心的、高分辨率的Web圖形頁面。本文將使用svg實現(xiàn)一個帶加載進(jìn)度的loading,需要的可以參考一下
    2022-11-11
  • javascript 彈出的窗口返回值給父窗口具體實現(xiàn)

    javascript 彈出的窗口返回值給父窗口具體實現(xiàn)

    這篇文章主要介紹了javascript 彈出的窗口返回值給父窗口具體實現(xiàn),有需要的朋友可以參考一下
    2013-11-11
  • JavaScript實用代碼小技巧

    JavaScript實用代碼小技巧

    在這篇文章中給大家分享了關(guān)于JavaScript實用代碼小技巧的相關(guān)內(nèi)容,有興趣的朋友們可以參考學(xué)習(xí)下。
    2018-08-08
  • 理解Javascript的call、apply

    理解Javascript的call、apply

    這篇文章主要介紹了Javascript的call、apply,其作用基本相同,但也有略微的區(qū)別,需要的朋友可以參考下
    2015-12-12
  • 淺談Webpack4 Tree Shaking 終極優(yōu)化指南

    淺談Webpack4 Tree Shaking 終極優(yōu)化指南

    這篇文章主要介紹了淺談Webpack4 Tree Shaking 終極優(yōu)化指南,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • js實現(xiàn)網(wǎng)頁圖片延時加載 提升網(wǎng)頁打開速度

    js實現(xiàn)網(wǎng)頁圖片延時加載 提升網(wǎng)頁打開速度

    這篇文章主要為大家介紹了js實現(xiàn)網(wǎng)頁圖片延時加載,提升網(wǎng)頁打開速度,感興趣的小伙伴們可以參考一下
    2016-01-01

最新評論