【图解】Web前端实现类似Excel的电子表格

在本文中,我将用图解的方式用Wijmo(JavaScript库)中的SpreadJS来一步一步实现网页上的电子表格产品SpreadSheet(例如可构建Office 365 Excel产品、Google的在线SpreadSheet).

博文简介:

Wijmo控件,是葡萄城提供的HTML\JavaScript库,目前最新版是2014 V2(2014.7.22号发布),支持jQuery UI和jQuery、jQuery Mobile、Angular.js、Bootstrap.js、Knockout.js等。同时,Wijmo提供了很多小部件(UI 控件), 以此非常方便用来构建一个Web应用程序或者网站。

其中,Wijmo的SpreadJS提供了如下特性:

  • 由HTML5显示电子表格,可方便数据输入
  • 可方便的设定颜色、边框、字体
  • 可使用类似Excel公式
  • 可兼容JSON、CSV的数据输入、输出
  • 可进行数据分析:条件格式过滤等
  • Cell图形展示
  • 日期、IME格式
  • 自定义的输入单元格类型
  • 触摸手势支持
  • 图形、图像的应用
本文将涉及1~4点。

谁适合阅读本文?

  • 如果你想了解Web站点和Web应用程序的构建技术
  • 如果你想在短时间内构建一个复杂的SpreadSheet类型的网站
  • 如果您想用纯前端、HTML5方式实现Web站点

必要的环境

用如下环境进行开发

  • Wijmo 2014 V2的Spread JS 3.20142.11
  • jQuery UI 1.11.0
  • jQuery 1.11.1
  • jQuery Mobile 1.4.0
  • Windows 8.1 64位版本
  • IE浏览器11、Chrome 36.0.1985.125 m

SpreadJS版本和Wijmo许可证

SpreadJS的授权包括在Wijmo企业中

 
Wijmo专业


Wijmo企业


Wijmo企业可选包


基本widget


-


SpreadJS


-


-


SpreadJS设计器及Excel的I / O


-


-


技术支持

Wijmo的个人授权基于MIT和GPL Version 2; 对企业用户而言,采用Wijmo企业版是性价比非常高的策略。

其中包含在Wijmo企业版中的SpreadJS设计器和Excel I\O对于加快设计SpreadSheet非常有用,如可方便的查看JSON格式数据。

使用前的准备SpreadJS CDN

为了使用的SpreadJS,请在HTML中的head标签中列出描述。(1)在对语言进行说明,(2) - (5)是读取css和jQuery SpreadJS,jQuery的UI。

<!-- SpreadJS语言设置(1)-->
    <meta name="spreadjs culture" content="zh-cn" />

    <!-- jQuery、jQurey UI (2) -->
    <script src="http://code.jquery.com/jquery-1.11.1.min.js" type="text/javascript"></script>
    <script src="http://code.jquery.com/ui/1.11.0/jquery-ui.min.js" type="text/javascript"></script>

    <!-- Wijmo CSS(3)-->
    <link href="http://cdn.wijmo.com/themes/aristo/jquery-wijmo.css" rel="stylesheet" type="text/css" />

    <!-- SpreadJS(4) -->
    <script src="http://cdn.wijmo.com/spreadjs/jquery.wijmo.wijspread.all.3.20142.11.min.js" type="text/javascript"></script>

    <!-- SpreadJS CSS(5)-->
    <link href="http://cdn.wijmo.com/spreadjs/jquery.wijmo.wijspread.3.20142.11.css" rel="stylesheet" type="text/css" />

首先,让我们来显示电子表格

首先, 让我们试着简单地显示一个电子表格,您可以通过在HTML中,对wijspread元素, 安装如下的方法查看空电子表格,代码如下所示:

<script id="scriptInit" type="text/javascript">
        $(document).ready( $(function () {            // SpreadJS 初始化
            $("#wijspread1").wijspread();
        })
        );    </script>

备注:如果不指定div元素的大小电子表格的会在浏览器显示全屏,故通过对指定大小限制电子表格的显示范围。

SpreadJS div元素的定义

<div id="wijspread1" style="width: 480px; height: 320px; border: 1px solid gray"/>

SpreadJS在网页上显示空电子表格如图所示:

这个简单的电子表格,此时已经神奇的拥有基本功能,可以输入数字或字母,并可以在单元格中输入公式。

通过JavaScript对象中的参数设置到wijspread方法的参数,您可以自定义初始显示。我表2列出了主要参数。

wijspread的主要参数和默认值:


参数名称


参数说明


初始值


sheetCount


Sheet标签页数


1


activeSheetIndex


最初显示表标签页


0


tabEditable


是否可编辑工作表名称


true


allowUserResize


是否更改列的大小


True


allowUserZoom


是否可变焦


True


newTabVisible


是否显示新标签页按钮


true

如我们可设置2个参数,来初始为3个标签页,同时隐藏新建按钮,代码如下:

<script id="scriptInit" type="text/javascript">
        $(document).ready( $(function () {            // SpreadJS 初始化
            $("#wijspread1").wijspread({
                sheetCount: 3, //初始化为3个标签页
                newTabVisible:false //隐藏新建标签页按钮                });
        })
        );    </script>

效果截图:

在JavaScript中操作SpreadJS电子表格

如同用Visual Basic来操作Excel的VBA,实现了Excel电子表格的操作;在这里,你也可以用JavaScript操纵SpreadJS 电子表格。

为了操作电子表格,首先需要拿到wijspread对象,从而可以得到SpreadJS对象对应的表,可以获得表对象、单元格Cell对象等。然后,可以逐个进行每个对象的实际操作。

如下的代码是通过调节单元格大小、设置字体、以及给文本单元格中赋值、autoFitColumn / autoFitRow方法的大小的一个例子。

          // 获得Spread 对象            var spread = $("#wijspread1").wijspread("spread");            // 获得当前激活的标签页            var activeSheet = spread.getActiveSheet();            // 获得第2行2列单元格            var cell = activeSheet.getCell(1, 1);            // 对这个单元格进行赋值
            cell.value("Wijmo SpreadJS");            //单元格设置字体大小
            cell.font("15pt 宋体");            // 当前标签页自动进行行、列适应大小
            activeSheet.autoFitColumn(1);
            activeSheet.autoFitRow(1);

效果截图:

通过利用getCells方法,而不是getCell方法可以操作同时获得在一个范围内的多个单元:

          // 获得第2行2列 ~ 第4行5列,并设置背景色            var cell = activeSheet.getCells(1, 1, 3, 4)
          cell.backColor("#00ff00");

同时,通过产生LineBorder对象的边界设置为小区设置单元,borderBottom borderRight的,borderLeft,每个方法borderTop。

          // 获得LineBorder属性            var lineBorder = new $.wijmo.wijspread.LineBorder("#000000", $.wijmo.wijspread.LineStyle.thin);            // 设置边框            cell.borderTop(lineBorder);
            cell.borderBottom(lineBorder);
            cell.borderLeft(lineBorder);
            cell.borderRight(lineBorder);

您还可以设置边框的类型,通过修改LineStyle第二个参数-使用LineBorder。下表列出主要边框设置


边框名称


备注


thin


细实线


medium


粗实线


thick


粗实线


dashed


虚线


dotted


点线


dashDot


点虚线

在Excel中,有合并单元格的要求;使用SpreadJS,您也可以使用addSpan方法来合并多个单元格在工作表上,结果如同Excel一样:

          // 列結合
            activeSheet.addSpan(0, 0, 2, 4, $.wijmo.wijspread.SheetArea.colHeader);          // 行結合
            activeSheet.addSpan(0, 0, 2, 4, $.wijmo.wijspread.SheetArea.rowHeader);          // 单元格結合
            activeSheet.addSpan(0, 0, 2, 4, $.wijmo.wijspread.SheetArea.viewport);

可以使用类似Excel的公式和函数

您可以在Excel中通过设置公式中的单元格进行计算,如求和,平均值,同样地,SpreadJS也能帮您实现类似工作: Formula Functions

如下的例子中,显示了平均值(AVERAGE函数)和总计(SUM函数)。您可以在单元格中设置公式的方法显示结果。

        activeSheet.getCell(0, 0).value(‘考试成绩‘);            // 各科成绩
              activeSheet.getCell(2, 0).value(‘语文‘);
            activeSheet.getCell(2, 1).value(80);
            activeSheet.getCell(3, 0).value(‘数学‘);
            activeSheet.getCell(3, 1).value(70);
            activeSheet.getCell(4, 0).value(‘英语‘);
            activeSheet.getCell(4, 1).value(90);
            activeSheet.getCell(5, 0).value(‘政治‘);
            activeSheet.getCell(5, 1).value(45);            // 总分和平均分
            activeSheet.getCell(6, 0).value("总分");      // 总分
            activeSheet.getCell(6, 1).formula("SUM(B3:B6)");   
          activeSheet.getCell(7, 0).value(‘平均分‘);        //平均分
            activeSheet.getCell(7, 1).formula("AVERAGE(B3:B6)");

使用CSV或JSON的输入和输出数据

您可以输出您在SpreadJS输入的数据,或者输入来自外部的数据到反向。格式与相应的CSV和JSON。

我会在SpreadJS对象中输入和输出的JSON的toJSON / fromJSON方法,同时也会用到JSON.stringify\parse方法。

//数据输出        function ExportJSON()
        {            // 获得Spread 对象            var spread = $("#wijspread1").wijspread("spread");            var jsonStr = JSON.stringify(spread.toJSON());
            $("#jsonCode").html(jsonStr);
        }        ////数据输入        function ImportJSON()
        {            // 获得Spread 对象            var spread = $("#wijspread1").wijspread("spread");            var jsonObj = JSON.parse($("#jsonCode").html());
            spread.fromJSON(jsonObj);            
        }

效果截图:

另一方面,以CSV的情况下,我将使用getCsv表对象中,该方法setCsv。Excel作为也就是使用CSV将容纳单元的情况下,输入和输出。您也可以指定起始位置和范围,单元格的分隔符。

//导出CSV字符串        function ExportCSV() {            // 获得Spread 对象            var spread = $("#wijspread1").wijspread("spread");            
            var csvString = spread.getActiveSheet().getCsv(                0,                                       // 开始行
                0,                                       // 开始列
                10,                                      // 行数
                5,                                       // 列数
                "\n",                                    // 行分割字符
                ","                                      // 列分割字符            );

            $("#jsonCode").html(csvString);
        }        //导入CSV字符串        function ImportCSV() {            // 获得Spread 对象            var spread = $("#wijspread1").wijspread("spread");            var csvString = $("#jsonCode").html();
            spread.getActiveSheet().setCsv(                0,                                       // 开始行
                0,                                       // 开始列
                csvString,                               // CSV字符串
                "\n",                                    // 行分割字符
                ",",                                     // 列分割字符
                $.wijmo.wijspread.TextFileOpenFlags.None // 导入选项            );
        }

但应注意的是,能在表4中指定的值来setCsv方法的导入标记。默认为无。


TextFileOpenFlags选项


选项的内容


ImportFormula


导入公式


ncludeColumnHeader


包含列标题


IncludeRowHeader


有标题行


None


无(默认)


UnFormatted


格式化的数据

总结

在这篇文章中,通过代码实例和图解的方式,用Wijmo库提供的SpreadJS JavaScript组件来实现电子表格。SpreadJS提供了数据录入和计算,一级数据的显示,如导入和导出为CSV / JSON格式,可用于在Web浏览器上进行浏览。这种方法,对设计Web前端的类似Excel的电子表格非常有用的。

在Wijmo,可选包Wijmo企业可以作为一个选项,以采取更方便SpreadJS优势。通过使用包含在此选项Spread设计器,您可以创建一个独立的应用程序的数据SpreadJS。在Excel中的IO服务允许您与您在SpreadJS创建或导入Excel文件中的数据输出Excel文件。

---------------------------------------------------------------------------

Wijmo中文网站:http://wijmo.gcpowertools.com.cn/

Wijmo使用文档: http://wijmo.com/docs/wijmo/#WijmoUserGuide.html

Wijmo在线Demo:http://wijmo.com/demos/

【图解】Web前端实现类似Excel的电子表格,布布扣,bubuko.com

时间: 2024-10-29 19:12:52

【图解】Web前端实现类似Excel的电子表格的相关文章

web前端导出csv文件

前言 导出文件,使用最多的方式还是服务器端来处理.比如jsp 中使用response 的方式. 但是,有时候可能就想使用web 前端是否也可以把页面上的内容导出来呢? 比如说,导出页面的一个表格. 这个需求肯定是有答案的,只是对于各浏览器处理会稍微不一样.(主要是IE 和其他浏览器的区别). 在IE中使用ActiveXObject 实现,在firefox 和Chrome 中使用  a 标签(或者js)就可以实现了. 这里主要讲一下其他浏览器中的实现. 使用 a 标签实现方式 直接上例子: [ht

web前端到底怎么学?干货资料!

hi,大家好! 我的第一篇文章:[web前端到底是什么?有前途吗?],在我没想到如此 'HOT' 的情况下 得到很多好评和有效传播. 也为我近期新开的 个人前端公众号:前端你别闹(webunao) 直接增加了几百粉(果然,帅的人大家都喜欢.) 被国内著名技术博客 CSDN 推上博客首页,并且经过我授权在其他公众号也转载了不少. 我觉得我这片入门文章可以小火,究其原因 有以下几点 web前端是如此的火热,关注度也逐年升高 由于前端开发的火热 和 一些IT巨头公司 对 web前端开发 人员的需求旺盛

web前端开发教程系列-2 - 前端开发书籍分享(转)

目录: 前言 一. CSS 二. JavaScript 三. jQuery 四. 后记 前言 前端书籍在每个商城或书架上面都是琳琅满目,很多初学者又不能很好的判断书的质量或层次.因为今天给同学们分享一下,看书主要是两个方面,一个是层次性,一个是持续性.阅读是一件快乐的事情,要持续的浇灌,希望之田才会长青不衰. 一. CSS css的书大多是停留在基础普及,就是介绍Css基础概念的居多. 下面列举几个,有的可能已经绝版了,只能看到电子版了. CSS网站布局实录  这本是出现比较早的css书籍,现在

web前端入坑第二篇:web前端到底怎么学?干货资料! 【转】

http://blog.csdn.net/xllily_11/article/details/52145172 版权声明:本文为博主[小北]原创文章,如要转载请评论回复.个人前端公众号:前端你别闹,JS前端实用开发QQ群 :147250970 欢迎加入~! 目录(?)[+] hi,大家好! 我的第一篇文章:[web前端到底是什么?有前途吗?],在我没想到如此 ‘HOT’ 的情况下 得到很多好评和有效传播. 也为我近期新开的 个人前端公众号:前端你别闹(webunao) 直接增加了几百粉(果然,帅

如何打造一个&quot;逼格&quot;的web前端项目

最近利用空余的时间(坐公交车看教程视频),重新了解了前后端分离,前端工程化等概念学习,思考如何打造一个"逼格"的web前端项目. 前端理论篇 前端代码规范:制定前端开发代码规范文档. PS:重中之中,为了下一步实现前端工程化. 编码风格有很多.团队代码规范一定要统一.便于维护web项目.     接口文档规范:制定RESTful架构接口规范文档. PS:果断使用用apiDoc构建API文档.美观好看,易于维护. 还用Word或者Excel写文档,太low了. 前后端分离:简单理解为前端

web前端开发教程系列-2 - 前端开发书籍分享

目录: 前言 一. CSS 二. JavaScript 三. jQuery 四. 后记 前言 前端书籍在每个商城或书架上面都是琳琅满目,很多初学者又不能很好的判断书的质量或层次.因为今天给同学们分享一下,看书主要是两个方面,一个是层次性,一个是持续性.阅读是一件快乐的事情,要持续的浇灌,希望之田才会长青不衰. 一. CSS css的书大多是停留在基础普及,就是介绍Css基础概念的居多. 下面列举几个,有的可能已经绝版了,只能看到电子版了. CSS网站布局实录 这本是出现比较早的css书籍,现在可

web前端开发规范

本文原创,这里首先声明,转载注明本文出处,翻版必究! web前端开发规范的现实意义 1.提高团队的协作能力 2.提高代码的重复利用率 3.可以写出质量更高,效率更好的代码 4.为后期维护提供更好的支持 5.可读性高 一.命名规则 1.html命名规则: a.文件名称命名规则:统一使用小写英文字母.数字.下划线的组合,不得包含汉字空格和特殊字符 2.命名原则:方便理解.方便查找 b.索引文件命名原则:index.html.index.htm.index.asp.index.aspx.index.j

Web 前端知识体系精简

Web前端技术由html.css和javascript三大部分构成,是一个庞大而复杂的技术体系,其复杂程度不低于任何一门后端语言.而我们在学习它的时候往往是先从某一个点切入,然后不断地接触和学习新的知识点,因此对于初学者很难理清楚整个体系的脉络结构.本文将对Web前端知识体系进行简单的梳理,对应的每个知识点点到为止,不作详细介绍.目的是帮助大家审查自己的知识结构是否完善,如有遗漏或不正确的地方,希望共勉. JAVASCRIPT 篇 0.基础语法 Javascript基础语法包括:变量定义.数据类

想做web前端project师应该学习些什么?

偶然间看到这篇文章.感觉博主写的挺不错的,假设你想做web前端project师的话,建议您阅读下面这篇文章,事实上web前端project师所做的工作事实上就是站点设计,有些小公司的美工事实上就是做web前端的. 这篇文章对于想学web前端工作的人有非常大的帮助.假设您是做SEO的.也建议您学习下博主推荐的这些课程,也许对你以后的职业.薪资都有非常大的帮助! 遇到非常多新手.都会问,假设要学习web前端开发,须要学习什么?难不难?多久能入门? 怎么能高速建一个站点?工资能拿到多少?还有些让我推荐