From 32f94a72285d6051df87ce45390cb4e5a4cc49b2 Mon Sep 17 00:00:00 2001
From: wpxp123456 <2677556700@qq.com>
Date: Thu, 23 Jul 2020 17:41:40 +0800
Subject: [PATCH] feat(rightclick menu perfect): add rows and cols  delete rows
 and cols  hide rows and cols

rightclick
---
 src/config.js                     |   2 +-
 src/controllers/constant.js       | 364 ++++++++++++++++++++++++++----
 src/controllers/controlHistory.js |  20 ++
 src/controllers/handler.js        | 324 +++++++++++++++++++++++++-
 src/core.js                       |   1 +
 src/css/luckysheet-core.css       |   4 +-
 src/global/extend.js              |   5 +-
 src/locale/en.js                  |  23 ++
 src/locale/zh.js                  |  25 +-
 9 files changed, 715 insertions(+), 53 deletions(-)

diff --git a/src/config.js b/src/config.js
index 045b13752..48474168c 100644
--- a/src/config.js
+++ b/src/config.js
@@ -22,7 +22,7 @@ export default {
     config: {}, //表格行高、列宽、合并单元格、公式等设置
     fullscreenmode: true, //是否全屏模式,非全屏模式下,标记框不会强制选中。
     devicePixelRatio: window.devicePixelRatio, //设备比例,比例越大表格分标率越高
-    allowEdit: true, //是否允许前台编辑
+    allowEdit: false, //是否允许前台编辑
     loadUrl: "", // 配置loadUrl的地址,luckysheet会通过ajax请求表格数据,默认载入status为1的sheet数据中的所有data,其余的sheet载入除data字段外的所有字段
     loadSheetUrl: "", //配置loadSheetUrl的地址,参数为gridKey(表格主键) 和 index(sheet主键合集,格式为[1,2,3]),返回的数据为sheet的data字段数据集合
     gridKey: "", // 表格唯一标识符
diff --git a/src/controllers/constant.js b/src/controllers/constant.js
index 9737bdcec..eeceea62a 100644
--- a/src/controllers/constant.js
+++ b/src/controllers/constant.js
@@ -164,9 +164,281 @@ const gridHTML =  '<div class="luckysheet">' +
     columeHeader_word = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'],
     columeHeader_word_index = { 'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7, 'I': 8, 'J': 9, 'K': 10, 'L': 11, 'M': 12, 'N': 13, 'O': 14, 'P': 15, 'Q': 16, 'R': 17, 'S': 18, 'T': 19, 'U': 20, 'V': 21, 'W': 22, 'X': 23, 'Y': 24, 'Z': 25 },
     flow = '<div id="luckysheet-cell-flow_${index}" class="luckysheet-cell-flow luckysheetsheetchange" style="width:${width}px;"><div class="luckysheet-cell-flow-clip"><div class="luckysheet-grdblkpush"></div>${flow}</div></div>',
-    colsmenuHTML = '',
-    rightclickHTML = '<div class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-mousedown-cancel" id="luckysheet-rightclick-menu"><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel luckysheet-copy-btn" id="luckysheet-copy-btn" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">复制</div></div><div class="luckysheet-cols-menuitem luckysheet-cols-submenu luckysheet-mousedown-cancel" id="luckysheetcopyfor"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">复制为<span class="luckysheet-submenu-arrow" style="user-select: none;">►</span></div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" id="luckysheet-copy-paste"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">粘贴</div></div>            <div id="luckysheet-cols-rows-add"><div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div>    <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">向<span class="luckysheet-cols-rows-shift-left">左</span>增加<input type="text" class="luckysheet-mousedown-cancel" placeholder="数字" value="1" style="width:40px;height:18px;margin-left:5px;"/><span class="luckysheet-cols-rows-shift-word luckysheet-mousedown-cancel">列</span><button id="luckysheet-add-lefttop" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确认</button></div></div>     <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">向<span class="luckysheet-cols-rows-shift-right">右</span>增加<input type="text" class="luckysheet-mousedown-cancel" placeholder="数字" value="1" style="width:40px;height:18px;margin-left:5px;"/><span class="luckysheet-cols-rows-shift-word luckysheet-mousedown-cancel">列</span><button id="luckysheet-add-rightbottom" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确认</button></div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" id="luckysheet-del-selected"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">删除选中<span class="luckysheet-cols-rows-shift-word luckysheet-mousedown-cancel">列</span></div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"><span class="luckysheet-cols-rows-shift-word luckysheet-mousedown-cancel">列</span><span class="luckysheet-cols-rows-shift-size luckysheet-mousedown-cancel">宽</span><input type="number" class="luckysheet-mousedown-cancel rcsize" min="0" max="255" placeholder="数字" value="" style="width:40px;height:18px;margin-left:5px;">px<button id="luckysheet-rows-cols-changesize" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确认</button></div></div></div>       <div id="luckysheet-cols-rows-shift"> <div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div><div id="luckysheetorderbyasc" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">A-Z顺序排列</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" id="luckysheetorderbydesc"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">Z-A降序排列</div></div></div>                <div id="luckysheet-cols-rows-data"><div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div><div id="luckysheet-delete-text" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">清除内容</div></div><div id="luckysheetmatrix" class="luckysheet-cols-menuitem luckysheet-cols-submenu luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">矩阵操作选区<span class="luckysheet-submenu-arrow" style="user-select: none;">►</span></div></div><div id="luckysheetorderby" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">排序选区</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" id="luckysheetfilter"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">筛选选区</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" id="luckysheetdatavisual"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">图表生成</div></div></div>      </div> <div class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel" id="luckysheetcopyfor_sub"><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">Json<button id="luckysheet-copy-json-head" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">首行为标题</button><button id="luckysheet-copy-json-nohead" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">无标题</button></div></div><div data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel" id="luckysheet-copy-array1"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">一维数组</div></div><div id="luckysheet-copy-array2" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">二维数组</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"><div class="luckysheet-mousedown-cancel">多维数组</div><div><input type="number" min="1" class="luckysheet-mousedown-cancel"placeholder="行" style="width:40px;height:18px;" id="luckysheet-copy-arraymore-row"/>×<input type="number" min="1" class="luckysheet-mousedown-cancel" placeholder="列" style="width:40px;height:18px;" id="luckysheet-copy-arraymore-col"/><button id="luckysheet-copy-arraymore-confirm" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确认</button></div></div></div><div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div><div id="luckysheet-copy-diagonal" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">对角线</div></div><div data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" id="luckysheet-copy-antidiagonal" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">反对角线</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">对角偏移<input type="number" class="luckysheet-mousedown-cancel" placeholder="偏移量" id="luckysheet-copy-diagonaloffset-value" value="1" style="width:40px;height:18px;margin-left:5px;"/>列<button id="luckysheet-copy-diagonaloffset" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确认</button></div></div><div id="luckysheet-copy-boolvalue" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">布尔值</div></div></div><div class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel" id="luckysheetmatrix_sub"><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">翻转<button class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;" id="luckysheet-matrix-turn-up">上下</button><button class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;" id="luckysheet-matrix-turn-left">左右</button></div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">翻转<button class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;" id="luckysheet-matrix-turn-cw">顺时针</button><button class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;" id="luckysheet-matrix-turn-anticw">逆时针</button></div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel" id="luckysheet-matrix-turn-trans">转置</div></div><div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"><div class="luckysheet-mousedown-cancel">矩阵计算</div><div  class="luckysheet-mousedown-cancel"><select class="luckysheet-mousedown-cancel" style="height:24px;" id="luckysheet-matrix-cal-type"><option value="plus">加</option><option value="minus">减</option><option value="multiply">乘</option><option value="divided">除</option><option value="power">次方</option><option value="root">次方根</option><option value="log">log</option></select><input type="number" id="luckysheet-matrix-cal-value" class="luckysheet-mousedown-cancel" placeholder="数值" value="2" style="width:40px;height:18px;margin-left:5px;"/><button id="luckysheet-matrix-cal-confirm" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确定</button></div></div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">删除两端0值<button class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;" id="luckysheet-matrix-delezero-row">按行</button><button class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;" id="luckysheet-matrix-delezero-column">按列</button></div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">删除重复值<button class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;" id="luckysheet-matrix-delerpt-row">按行</button><button class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;" id="luckysheet-matrix-delerpt-column">按列</button></div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">生成新矩阵</div></div></div>',
-    pivottableconfigHTML = '<div class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-mousedown-cancel" id="luckysheet-pivotTable-config-option"> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <div class="luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">排序</span> <select class="luckysheet-mousedown-cancel" style="height:24px;" id="luckysheet-pivotTable-config-option-order"> <option selected="selected" value="default">无排序</option> <option value="asc">升序</option> <option value="desc">降序</option> </select> </div> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <div class="luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">排序依据</span> <select class="luckysheet-mousedown-cancel" style="height:24px;" id="luckysheet-pivotTable-config-option-orderby"> </select> </div> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <div class="luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">显示总计</span> <select class="luckysheet-mousedown-cancel" style="height:24px;" id="luckysheet-pivotTable-config-option-stastic"> <option  value="0">否</option> <option value="1" selected="selected">是</option> </select> </div> </div> </div> </div>',
+    colsmenuHTML = '';
+
+//右键菜单dom
+const rightclickHTML = '<div id="luckysheet-rightclick-menu" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-mousedown-cancel">'
+                        +'<div id="luckysheet-copy-btn" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel luckysheet-copy-btn" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">复制</div>'
+                        +'</div>'
+                        +'<div id="luckysheetcopyfor" class="luckysheet-cols-menuitem luckysheet-cols-submenu luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'复制为<span class="luckysheet-submenu-arrow" style="user-select: none;">►</span>'
+                            +'</div>'
+                        +'</div>'
+                        +'<div id="luckysheet-copy-paste" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">粘贴</div>'
+                        +'</div>'
+                        +'<div id="luckysheet-cols-rows-handleincell">'
+                            +'<div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div>'
+                            +'<div id="luckysheetColsRowsHandleAdd" class="luckysheet-cols-menuitem luckysheet-cols-submenu luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                    +'插入<span class="luckysheet-submenu-arrow" style="user-select: none;">►</span>'
+                                +'</div>'
+                            +'</div>'
+                            +'<div id="luckysheetColsRowsHandleDel" class="luckysheet-cols-menuitem luckysheet-cols-submenu luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                    +'删除<span class="luckysheet-submenu-arrow" style="user-select: none;">►</span>'
+                                +'</div>'
+                            +'</div>'
+                            +'<div id="luckysheetColsRowsHandleHid" class="luckysheet-cols-menuitem luckysheet-cols-submenu luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                    +'隐藏<span class="luckysheet-submenu-arrow" style="user-select: none;">►</span>'
+                                +'</div>'
+                            +'</div>'
+                        +'</div>'
+                        +'<div id="luckysheet-cols-rows-add">'
+                            +'<div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div>'
+                            +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                    +'向'
+                                    +'<span class="luckysheet-cols-rows-shift-left">左</span>'
+                                    +'增加'
+                                    +'<input type="text" class="luckysheet-mousedown-cancel" placeholder="数字" value="1" style="width:40px;height:18px;margin-left:5px;"/>'
+                                    +'<span class="luckysheet-cols-rows-shift-word luckysheet-mousedown-cancel">列</span>'
+                                    +'<button id="luckysheet-add-lefttop" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确认</button>'
+                                +'</div>'
+                            +'</div>'
+                            +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                    +'向'
+                                    +'<span class="luckysheet-cols-rows-shift-right">右</span>'
+                                    +'增加'
+                                    +'<input type="text" class="luckysheet-mousedown-cancel" placeholder="数字" value="1" style="width:40px;height:18px;margin-left:5px;"/>'
+                                    +'<span class="luckysheet-cols-rows-shift-word luckysheet-mousedown-cancel">列</span>'
+                                    +'<button id="luckysheet-add-rightbottom" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确认</button>'
+                                +'</div>'
+                            +'</div>'
+                            +'<div id="luckysheet-del-selected" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                    +'删除选中'
+                                    +'<span class="luckysheet-cols-rows-shift-word luckysheet-mousedown-cancel">列</span>'
+                                +'</div>'
+                            +'</div>'
+                            +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                    +'<span class="luckysheet-cols-rows-shift-word luckysheet-mousedown-cancel">列</span>'
+                                    +'<span class="luckysheet-cols-rows-shift-size luckysheet-mousedown-cancel">宽</span>'
+                                    +'<input type="number" class="luckysheet-mousedown-cancel rcsize" min="0" max="255" placeholder="数字" value="" style="width:40px;height:18px;margin-left:5px;">'
+                                    +'px'
+                                    +'<button id="luckysheet-rows-cols-changesize" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确认</button>'
+                                +'</div>'
+                            +'</div>'
+                        +'</div>'
+                        +'<div id="luckysheet-cols-rows-shift">'
+                            +'<div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div>'
+                            +'<div id="luckysheetorderbyasc" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">A-Z顺序排列</div>'
+                            +'</div>'
+                            +'<div id="luckysheetorderbydesc" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">Z-A降序排列</div>'
+                            +'</div>'
+                        +'</div>'
+                        +'<div id="luckysheet-cols-rows-data">'
+                            +'<div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div>'
+                            +'<div id="luckysheet-delete-text" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">清除内容</div>'
+                            +'</div>'
+                            +'<div id="luckysheetmatrix" class="luckysheet-cols-menuitem luckysheet-cols-submenu luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                    +'矩阵操作选区<span class="luckysheet-submenu-arrow" style="user-select: none;">►</span>'
+                                +'</div>'
+                            +'</div>'
+                            +'<div id="luckysheetorderby" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">排序选区</div>'
+                            +'</div>'
+                            +'<div id="luckysheetfilter" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">筛选选区</div>'
+                            +'</div>'
+                            +'<div id="luckysheetdatavisual" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">图表生成</div>'
+                            +'</div>'
+                        +'</div>'
+                    +'</div>'
+                    //复制为 二级菜单
+                    +'<div id="luckysheetcopyfor_sub" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel">'
+                        +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'Json'
+                                +'<button id="luckysheet-copy-json-head" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">首行为标题</button>'
+                                +'<button id="luckysheet-copy-json-nohead" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">无标题</button>'
+                            +'</div>'
+                        +'</div>'
+                        +'<div id="luckysheet-copy-array1" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">一维数组</div>'
+                        +'</div>'
+                        +'<div id="luckysheet-copy-array2" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">二维数组</div>'
+                        +'</div>'
+                        +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-mousedown-cancel">多维数组</div>'
+                                +'<div>'
+                                    +'<input type="number" id="luckysheet-copy-arraymore-row" min="1" class="luckysheet-mousedown-cancel"placeholder="行" style="width:40px;height:18px;"/>'
+                                    +'×'
+                                    +'<input type="number" id="luckysheet-copy-arraymore-col" min="1" class="luckysheet-mousedown-cancel" placeholder="列" style="width:40px;height:18px;"/>'
+                                    +'<button id="luckysheet-copy-arraymore-confirm" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确认</button>'
+                                +'</div>'
+                            +'</div>'
+                        +'</div>'
+                        +'<div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div>'
+                        +'<div id="luckysheet-copy-diagonal" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">对角线</div>'
+                        +'</div>'
+                        +'<div id="luckysheet-copy-antidiagonal" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">反对角线</div>'
+                        +'</div>'
+                        +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'对角偏移'
+                                +'<input type="number" id="luckysheet-copy-diagonaloffset-value" class="luckysheet-mousedown-cancel" placeholder="偏移量" value="1" style="width:40px;height:18px;margin-left:5px;"/>'
+                                +'列'
+                                +'<button id="luckysheet-copy-diagonaloffset" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确认</button>'
+                            +'</div>'
+                        +'</div>'
+                        +'<div id="luckysheet-copy-boolvalue" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">布尔值</div>'
+                        +'</div>'
+                    +'</div>'
+                    //插入 二级菜单
+                    +'<div id="luckysheetColsRowsHandleAdd_sub" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel">'
+                        +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'向上增加'
+                                +'<input type="text" class="luckysheet-mousedown-cancel" placeholder="数字" value="1" style="width:40px;height:18px;margin-left:5px;"/>'
+                                +'<span class="luckysheet-mousedown-cancel">行</span>'
+                                +'<button id="luckysheet-addTopRows" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确认</button>'
+                            +'</div>'
+                        +'</div>'
+                        +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'向下增加'
+                                +'<input type="text" class="luckysheet-mousedown-cancel" placeholder="数字" value="1" style="width:40px;height:18px;margin-left:5px;"/>'
+                                +'<span class="luckysheet-mousedown-cancel">行</span>'
+                                +'<button id="luckysheet-addBottomRows" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确认</button>'
+                            +'</div>'
+                        +'</div>'
+                        +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'向左增加'
+                                +'<input type="text" class="luckysheet-mousedown-cancel" placeholder="数字" value="1" style="width:40px;height:18px;margin-left:5px;"/>'
+                                +'<span class="luckysheet-mousedown-cancel">列</span>'
+                                +'<button id="luckysheet-addLeftCols" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确认</button>'
+                            +'</div>'
+                        +'</div>'
+                        +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'向右增加'
+                                +'<input type="text" class="luckysheet-mousedown-cancel" placeholder="数字" value="1" style="width:40px;height:18px;margin-left:5px;"/>'
+                                +'<span class="luckysheet-mousedown-cancel">列</span>'
+                                +'<button id="luckysheet-addRightCols" class="btn btn-primary luckysheet-copy-btn luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确认</button>'
+                            +'</div>'
+                        +'</div>'
+                    +'</div>'
+                    //删除 二级菜单 
+                    +'<div id="luckysheetColsRowsHandleDel_sub" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel">'
+                        +'<div id="luckysheet-delRows" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'删除选中行'
+                            +'</div>'
+                        +'</div>'
+                        +'<div id="luckysheet-delCols" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'删除选中列'
+                            +'</div>'
+                        +'</div>'
+                    +'</div>'
+                    //隐藏 二级菜单
+                    +'<div id="luckysheetColsRowsHandleHid_sub" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel">'
+                        +'<div id="luckysheet-hidRows" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'隐藏选中行'
+                            +'</div>'
+                        +'</div>'
+                        +'<div id="luckysheet-showHidRows" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'显示隐藏行'
+                            +'</div>'
+                        +'</div>'
+                        // +'<div id="luckysheet-hidCols" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                        //     +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                        //         +'隐藏选中列'
+                        //     +'</div>'
+                        // +'</div>'
+                        // +'<div id="luckysheet-showHidCols" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                        //     +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                        //         +'显示隐藏列'
+                        //     +'</div>'
+                        // +'</div>'
+                    +'</div>'
+                    //矩阵操作选区 二级菜单 
+                    +'<div id="luckysheetmatrix_sub" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel">'
+                        +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'翻转'
+                                +'<button id="luckysheet-matrix-turn-up" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">上下</button>'
+                                +'<button id="luckysheet-matrix-turn-left" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">左右</button>'
+                            +'</div>'
+                        +'</div>'
+                        +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'翻转'
+                                +'<button id="luckysheet-matrix-turn-cw" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">顺时针</button>'
+                                +'<button id="luckysheet-matrix-turn-anticw" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">逆时针</button>'
+                            +'</div>'
+                        +'</div>'
+                        +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div id="luckysheet-matrix-turn-trans" class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">转置</div>'
+                        +'</div>'
+                        +'<div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div>'
+                        +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'<div class="luckysheet-mousedown-cancel">矩阵计算</div>'
+                                +'<div class="luckysheet-mousedown-cancel">'
+                                    +'<select id="luckysheet-matrix-cal-type" class="luckysheet-mousedown-cancel" style="height:24px;">'
+                                        +'<option value="plus">加</option>'
+                                        +'<option value="minus">减</option>'
+                                        +'<option value="multiply">乘</option>'
+                                        +'<option value="divided">除</option>'
+                                        +'<option value="power">次方</option>'
+                                        +'<option value="root">次方根</option>'
+                                        +'<option value="log">log</option>'
+                                    +'</select>'
+                                    +'<input type="number" id="luckysheet-matrix-cal-value" class="luckysheet-mousedown-cancel" placeholder="数值" value="2" style="width:40px;height:18px;margin-left:5px;"/>'
+                                    +'<button id="luckysheet-matrix-cal-confirm" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">确定</button>'
+                                +'</div>'
+                            +'</div>'
+                        +'</div>'
+                        +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'删除两端0值'
+                                +'<button id="luckysheet-matrix-delezero-row" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">按行</button>'
+                                +'<button id="luckysheet-matrix-delezero-column" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">按列</button>'
+                            +'</div>'
+                        +'</div>'
+                        +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">'
+                                +'删除重复值'
+                                +'<button id="luckysheet-matrix-delerpt-row" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">按行</button>'
+                                +'<button id="luckysheet-matrix-delerpt-column" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">按列</button>'
+                            +'</div>'
+                        +'</div>'
+                        +'<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">'
+                            +'<div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">生成新矩阵</div>'
+                        +'</div>'
+                    +'</div>';
+
+const pivottableconfigHTML = '<div class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-mousedown-cancel" id="luckysheet-pivotTable-config-option"> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <div class="luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">排序</span> <select class="luckysheet-mousedown-cancel" style="height:24px;" id="luckysheet-pivotTable-config-option-order"> <option selected="selected" value="default">无排序</option> <option value="asc">升序</option> <option value="desc">降序</option> </select> </div> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <div class="luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">排序依据</span> <select class="luckysheet-mousedown-cancel" style="height:24px;" id="luckysheet-pivotTable-config-option-orderby"> </select> </div> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <div class="luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">显示总计</span> <select class="luckysheet-mousedown-cancel" style="height:24px;" id="luckysheet-pivotTable-config-option-stastic"> <option  value="0">否</option> <option value="1" selected="selected">是</option> </select> </div> </div> </div> </div>',
     pivottablesumHTML = '<div class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-mousedown-cancel" id="luckysheet-pivotTable-config-option-sumtype"> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="SUM"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">求和</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="COUNT"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">数值计数</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="COUNTA"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">计数</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="COUNTUNIQUE"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">去重计数</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="AVERAGE"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">平均值</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="MAX"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">最大值</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="MIN"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">最小值</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="MEDIAN"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">中位数</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="PRODUCT"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">乘积</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="STDEV"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">标准差</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="STDEVP"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">整体标准差</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="VAR"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">方差</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="VARP"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">整体方差</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> </div>',
     sheetHTML = '<div style="${style}" id="luckysheet-sheets-item${index}" data-index="${index}" class="luckysheet-sheets-item ${active}"><span class="luckysheet-sheets-item-name" spellcheck ="false" contenteditable="false">${name}</span> <span class="luckysheet-sheets-item-menu luckysheet-mousedown-cancel"><i class="fa fa-sort-desc luckysheet-mousedown-cancel"></i></span>${colorset}</div>',
     columnHeaderHTML = '<div class="luckysheet-cols-h-cells luckysheetsheetchange"  id="luckysheet-cols-h-cells_${index}" style="width:${width}px;"> <div class="luckysheet-cols-h-cells-c"> <div class="luckysheet-grdblkpush"></div>${column}</div></div>',
@@ -272,7 +544,7 @@ function menuToolBar (){
                 </div>
             </div>
         </div>
-        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="格式刷"
+        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.paintFormat}"
         id="luckysheet-icon-paintformat" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
@@ -290,7 +562,7 @@ function menuToolBar (){
         style="user-select: none;"> </div> <div class="luckysheet-toolbar-zoom-combobox luckysheet-toolbar-combo-button luckysheet-inline-block" data-tips="缩放" id="luckysheet-icon-zoom" style="user-select: none;"> <div class="luckysheet-toolbar-combo-button-outer-box luckysheet-inline-block" style="user-select: none;"> <div class="luckysheet-toolbar-combo-button-inner-box luckysheet-inline-block" style="user-select: none;"> <div aria-posinset="4" aria-setsize="7" class="luckysheet-inline-block luckysheet-toolbar-combo-button-caption" style="user-select: none;"> <input aria-label="缩放比例" class="luckysheet-toolbar-combo-button-input luckysheet-toolbar-textinput luckysheet-mousedown-cancel" role="combobox" style="user-select: none;" tabindex="-1" type="text" value="100%"/> </div> <div class="luckysheet-toolbar-combo-button-dropdown luckysheet-inline-block " style="user-select: none;"> </div> </div> </div> </div> -->
         <div class="luckysheet-toolbar-separator luckysheet-inline-block" style="user-select: none;">
         </div>
-        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="货币格式"
+        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.currencyFormat}"
         id="luckysheet-icon-currency" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
@@ -300,7 +572,7 @@ function menuToolBar (){
                 </div>
             </div>
         </div>
-        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="百分比格式"
+        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.percentageFormat}"
         id="luckysheet-icon-percent" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
@@ -310,7 +582,7 @@ function menuToolBar (){
                 </div>
             </div>
         </div>
-        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="减少小数位数"
+        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.numberDecrease}"
         id="luckysheet-icon-fmt-decimal-decrease" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
@@ -325,7 +597,7 @@ function menuToolBar (){
                 </div>
             </div>
         </div>
-        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="增加小数位数"
+        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.numberIncrease}"
         id="luckysheet-icon-fmt-decimal-increase" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
@@ -340,7 +612,7 @@ function menuToolBar (){
                 </div>
             </div>
         </div>
-        <div class="luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="更多格式"
+        <div class="luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="${toolbar.moreFormats}"
         id="luckysheet-icon-fmt-other" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
@@ -359,7 +631,7 @@ function menuToolBar (){
         <div class="luckysheet-toolbar-separator luckysheet-inline-block" style="user-select: none;">
         </div>
         <div class="luckysheet-toolbar-select luckysheet-toolbar-menu-button luckysheet-inline-block"
-        data-tooltip="字体样式" id="luckysheet-icon-font-family" role="button" style="user-select: none;">
+        data-tooltip="${toolbar.font}" id="luckysheet-icon-font-family" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
@@ -377,14 +649,14 @@ function menuToolBar (){
         <div class="luckysheet-toolbar-separator luckysheet-inline-block" style="user-select: none;">
         </div>
         <div class="luckysheet-toolbar-zoom-combobox luckysheet-toolbar-combo-button luckysheet-inline-block"
-        data-tips="字号大小" id="luckysheet-icon-font-size" style="user-select: none;">
+        data-tips="${toolbar.fontSize}" id="luckysheet-icon-font-size" style="user-select: none;">
             <div class="luckysheet-toolbar-combo-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-combo-button-inner-box luckysheet-inline-block"
                 style="user-select: none;">
                     <div aria-posinset="4" aria-setsize="7" class="luckysheet-inline-block luckysheet-toolbar-combo-button-caption"
                     style="user-select: none;">
-                        <input aria-label="字号大小" class="luckysheet-toolbar-combo-button-input luckysheet-toolbar-textinput luckysheet-mousedown-cancel"
+                        <input aria-label="${toolbar.fontSize}" class="luckysheet-toolbar-combo-button-input luckysheet-toolbar-textinput luckysheet-mousedown-cancel"
                         role="combobox" style="user-select: none;" tabindex="-1" type="text" value="10"
                         />
                     </div>
@@ -396,7 +668,7 @@ function menuToolBar (){
         </div>
         <div class="luckysheet-toolbar-separator luckysheet-inline-block" style="user-select: none;">
         </div>
-        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="粗体 (Ctrl+B)"
+        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.bold}"
         id="luckysheet-icon-bold" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
@@ -410,7 +682,7 @@ function menuToolBar (){
                 </div>
             </div>
         </div>
-        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="斜体 (Ctrl+I)"
+        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.italic}"
         id="luckysheet-icon-italic" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
@@ -424,7 +696,7 @@ function menuToolBar (){
                 </div>
             </div>
         </div>
-        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="删除线 (Alt+Shift+5)"
+        <div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.strikethrough}"
         id="luckysheet-icon-strikethrough" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
@@ -439,7 +711,7 @@ function menuToolBar (){
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
-        data-tips="文本颜色" id="luckysheet-icon-text-color" role="button" style="user-select: none;">
+        data-tips="${toolbar.textColor}" id="luckysheet-icon-text-color" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
@@ -458,7 +730,7 @@ function menuToolBar (){
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
-        data-tips="颜色选择..." id="luckysheet-icon-text-color-menu" role="button"
+        data-tips="${toolbar.chooseColor}..." id="luckysheet-icon-text-color-menu" role="button"
         style="user-select: none;">
             <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
@@ -473,7 +745,7 @@ function menuToolBar (){
         <div class="luckysheet-toolbar-separator luckysheet-inline-block" style="user-select: none;">
         </div>
         <div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
-        data-tips="单元格颜色" id="luckysheet-icon-cell-color" role="button" style="user-select: none;">
+        data-tips="${toolbar.fillColor}" id="luckysheet-icon-cell-color" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
@@ -492,7 +764,7 @@ function menuToolBar (){
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
-        data-tips="颜色选择..." id="luckysheet-icon-cell-color-menu" role="button"
+        data-tips="${toolbar.chooseColor}..." id="luckysheet-icon-cell-color-menu" role="button"
         style="user-select: none;">
             <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
@@ -505,7 +777,7 @@ function menuToolBar (){
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
-        data-tips="边框" id="luckysheet-icon-border-all" role="button" style="user-select: none;">
+        data-tips="${toolbar.border}" id="luckysheet-icon-border-all" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
@@ -519,7 +791,7 @@ function menuToolBar (){
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
-        data-tips="边框类型..." id="luckysheet-icon-border-menu" role="button" style="user-select: none;">
+        data-tips="${toolbar.borderStyle}..." id="luckysheet-icon-border-menu" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
@@ -531,7 +803,7 @@ function menuToolBar (){
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
-        data-tips="合并单元格" id="luckysheet-icon-merge-button" role="button" style="user-select: none;">
+        data-tips="${toolbar.mergeCell}" id="luckysheet-icon-merge-button" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
@@ -545,7 +817,7 @@ function menuToolBar (){
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
-        data-tips="选择合并类型..." id="luckysheet-icon-merge-menu" role="button" style="user-select: none;">
+        data-tips="${toolbar.chooseMergeType}..." id="luckysheet-icon-merge-menu" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
@@ -559,7 +831,7 @@ function menuToolBar (){
         <div class="luckysheet-toolbar-separator luckysheet-inline-block" style="user-select: none;">
         </div>
         <div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
-        data-tips="水平对齐" id="luckysheet-icon-align" role="button" style="user-select: none;">
+        data-tips="${toolbar.horizontalAlign}" id="luckysheet-icon-align" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
@@ -576,7 +848,7 @@ function menuToolBar (){
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
-        data-tips="对齐方式..." id="luckysheet-icon-align-menu" role="button" style="user-select: none;">
+        data-tips="${toolbar.alignment}..." id="luckysheet-icon-align-menu" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
@@ -588,7 +860,7 @@ function menuToolBar (){
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
-        data-tips="垂直对齐" id="luckysheet-icon-valign" role="button" style="user-select: none;">
+        data-tips="${toolbar.verticalAlign}" id="luckysheet-icon-valign" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
@@ -605,7 +877,7 @@ function menuToolBar (){
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
-        data-tips="对齐方式..." id="luckysheet-icon-valign-menu" role="button" style="user-select: none;">
+        data-tips="${toolbar.alignment}..." id="luckysheet-icon-valign-menu" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
@@ -617,7 +889,7 @@ function menuToolBar (){
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
-        data-tips="文本换行" id="luckysheet-icon-textwrap" role="button" style="user-select: none;">
+        data-tips="${toolbar.textWrap}" id="luckysheet-icon-textwrap" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
@@ -634,7 +906,7 @@ function menuToolBar (){
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
-        data-tips="换行方式..." id="luckysheet-icon-textwrap-menu" role="button" style="user-select: none;">
+        data-tips="${toolbar.textWrapMode}..." id="luckysheet-icon-textwrap-menu" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
@@ -646,7 +918,7 @@ function menuToolBar (){
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
-        data-tips="文本旋转" id="luckysheet-icon-rotation" role="button" style="user-select: none;">
+        data-tips="${toolbar.textRotate}" id="luckysheet-icon-rotation" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
@@ -663,7 +935,7 @@ function menuToolBar (){
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
-        data-tips="旋转方式..." id="luckysheet-icon-rotation-menu" role="button" style="user-select: none;">
+        data-tips="${toolbar.textRotateMode}..." id="luckysheet-icon-rotation-menu" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
@@ -677,7 +949,7 @@ function menuToolBar (){
         <div class="luckysheet-toolbar-separator luckysheet-inline-block" style="user-select: none;">
         </div>
         <div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
-        data-tips="冻结首行" id="luckysheet-freezen-btn-horizontal" role="button" style="user-select: none;">
+        data-tips="${toolbar.freezeTopRow}" id="luckysheet-freezen-btn-horizontal" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
@@ -686,7 +958,7 @@ function menuToolBar (){
                     style="user-select: none;">
                         <i class="fa fa-list-alt">
                         </i>
-                        冻结首行
+                        ${toolbar.freezeTopRow}
                     </div>
                 </div>
             </div>
@@ -705,7 +977,7 @@ function menuToolBar (){
         </div>
         <div class="luckysheet-toolbar-separator luckysheet-inline-block" style="user-select: none;">
         </div>
-        <div class="luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="排序和筛选"
+        <div class="luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="${toolbar.sortAndFilter}"
         id="luckysheet-icon-autofilter" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
@@ -722,7 +994,7 @@ function menuToolBar (){
                 </div>
             </div>
         </div>
-        <div class="luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="查找替换"
+        <div class="luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="${toolbar.findAndReplace}"
         id="luckysheet-icon-seachmore" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
@@ -740,7 +1012,7 @@ function menuToolBar (){
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
-        data-tips="自动求和" id="luckysheet-icon-function" role="button" style="user-select: none;">
+        data-tips="${toolbar.autoSum}" id="luckysheet-icon-function" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
@@ -752,13 +1024,13 @@ function menuToolBar (){
                     </div>
                     <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                     style="user-select: none;">
-                        求和
+                        ${toolbar.sum}
                     </div>
                 </div>
             </div>
         </div>
         <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
-        data-tips="更多函数..." id="luckysheet-icon-function-menu" role="button" style="user-select: none;">
+        data-tips="${toolbar.moreFunction}..." id="luckysheet-icon-function-menu" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
                 <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
@@ -769,7 +1041,7 @@ function menuToolBar (){
                 </div>
             </div>
         </div>
-        <div class="luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="条件格式"
+        <div class="luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="${toolbar.conditionalFormat}"
         id="luckysheet-icon-conditionformat" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
@@ -777,7 +1049,7 @@ function menuToolBar (){
                 style="user-select: none;">
                     <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                     style="user-select: none;">
-                        条件格式
+                        ${toolbar.conditionalFormat}
                     </div>
                     <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block "
                     style="user-select: none;">
@@ -785,7 +1057,7 @@ function menuToolBar (){
                 </div>
             </div>
         </div>
-        <div class="luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="批注"
+        <div class="luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="${toolbar.postil}"
         id="luckysheet-icon-postil" role="button" style="user-select: none;">
             <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
             style="user-select: none;">
@@ -793,7 +1065,7 @@ function menuToolBar (){
                 style="user-select: none;">
                     <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                     style="user-select: none;">
-                        批注
+                        ${toolbar.postil}
                     </div>
                     <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block "
                     style="user-select: none;">
@@ -804,22 +1076,22 @@ function menuToolBar (){
         <div class="luckysheetfulltoolbar" id="luckysheet-pivot-btn-title">
             <i aria-hidden="true" class="fa fa-cube">
             </i>
-            数据透视表
+            ${toolbar.pivotTable}
         </div>
         <div class="luckysheetfulltoolbar" id="luckysheet-chart-btn-title">
             <i class="fa fa-pie-chart">
             </i>
-            图表
+            ${toolbar.chart}
         </div>
         <div class="luckysheetfulltoolbar" id="luckysheet-chart-btn-screenshot">
             <i class="fa fa-object-group">
             </i>
-            截图
+            ${toolbar.screenshot}
         </div>
         <div class="luckysheetfulltoolbar" id="luckysheet-splitColumn-btn-title">
             <i class="fa fa-gg">
             </i>
-            分列
+            ${toolbar.splitColumn}
         </div>`;
 } 
 const luckysheetlodingHTML = '<div id="luckysheetloadingdata" style="width:100%;text-align:center;position:absolute;top:0px;height:100%;font-size: 16px;z-index:1000000000;background:#fff;"><div style="position:relative;top:45%;width:100%;"> <div class="luckysheetLoaderGif"></div>  <span>渲染中...</span></div></div>';
diff --git a/src/controllers/controlHistory.js b/src/controllers/controlHistory.js
index 1693e9258..7e96c57b0 100644
--- a/src/controllers/controlHistory.js
+++ b/src/controllers/controlHistory.js
@@ -139,6 +139,16 @@ const controlHistory = {
 
             jfrefreshgrid_adRC(ctr.data, ctr.config, "addRC", ctrlValue, ctr.calc, ctr.filterObj, ctr.cf, ctr.af, ctr.freezen);
         }
+        else if (ctr.type == "showHidRows") { // 隐藏、显示行 撤销操作
+            //config
+            Store.config = ctr.config;
+            Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = ctr.config;
+        
+            server.saveParam("cg", ctr.sheetIndex, ctr.config["rowhidden"], { "k": "rowhidden" });
+        
+            //行高、列宽 刷新  
+            jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length);
+        }
         else if (ctr.type == "datachangeAll") {
             formula.execFunctionGroup();
             jfrefreshgridall(ctr.data[0].length, ctr.data.length, ctr.data, null, ctr.range, "datachangeAll", ctr.ctrlValue);
@@ -371,6 +381,16 @@ const controlHistory = {
         else if (ctr.type == "delRC") { //删除行列重做操作
             jfrefreshgrid_adRC(ctr.curData, ctr.curConfig, "delRC", ctr.ctrlValue, ctr.curCalc, ctr.curFilterObj, ctr.curCf, ctr.curAf, ctr.curFreezen);
         }
+        else if (ctr.type == "showHidRows") { // 隐藏、显示行 重做操作
+            //config
+            Store.config = ctr.curconfig;
+            Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = ctr.curconfig;
+        
+            server.saveParam("cg", ctr.sheetIndex, ctr.curconfig["rowhidden"], { "k": "rowhidden" });
+        
+            //行高、列宽 刷新  
+            jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length);
+        }
         else if (ctr.type == "datachangeAll") {
             formula.execFunctionGroup();
             jfrefreshgridall(ctr.curdata[0].length, ctr.curdata.length, ctr.curdata, null, ctr.currange, "datachangeAll", ctr.ctrlValue);
diff --git a/src/controllers/handler.js b/src/controllers/handler.js
index 7a8e17faa..fc4f62731 100644
--- a/src/controllers/handler.js
+++ b/src/controllers/handler.js
@@ -185,6 +185,11 @@ export default function luckysheetHandler() {
         }            
     });
 
+    // //禁止前台编辑
+    // if(!Store.allowEdit){
+    //     return;
+    // }
+
     //选区拖动替换
     $("#luckysheet-cell-main div.luckysheet-cs-draghandle").mousedown(function (event) {
         if(isEditMode()){//此模式下禁用选区拖动
@@ -1077,6 +1082,7 @@ export default function luckysheetHandler() {
             let obj_s = Store.luckysheet_select_save[0];
 
             $("#luckysheet-cols-rows-data").show();
+            $("#luckysheet-cols-rows-handleincell").show();
             $("#luckysheet-cols-rows-add, #luckysheet-cols-rows-shift").hide();
 
             if (obj_s["row"] != null && obj_s["row"][0] == 0 && obj_s["row"][1] == Store.flowdata.length - 1) {
@@ -1090,6 +1096,7 @@ export default function luckysheetHandler() {
                 $("#luckysheet-cols-rows-add").show();
                 $("#luckysheet-cols-rows-data").show();
                 $("#luckysheet-cols-rows-shift").hide();
+                $("#luckysheet-cols-rows-handleincell").hide();
                 
                 Store.luckysheet_cols_menu_status = true;
 
@@ -1134,6 +1141,7 @@ export default function luckysheetHandler() {
                 $("#luckysheet-cols-rows-add").show();
                 $("#luckysheet-cols-rows-data").show();
                 $("#luckysheet-cols-rows-shift").hide();
+                $("#luckysheet-cols-rows-handleincell").hide();
 
                 Store.luckysheet_cols_menu_status = true;
 
@@ -4469,6 +4477,7 @@ export default function luckysheetHandler() {
             $("#luckysheet-cols-rows-add").show();
             $("#luckysheet-cols-rows-data").show();
             $("#luckysheet-cols-rows-shift").hide();
+            $("#luckysheet-cols-rows-handleincell").hide();
 
             showrightclickmenu($("#luckysheet-rightclick-menu"), $(this).offset().left + 46, event.pageY);
             Store.luckysheet_cols_menu_status = true;
@@ -4856,6 +4865,7 @@ export default function luckysheetHandler() {
             $("#luckysheet-cols-rows-add").show();
             $("#luckysheet-cols-rows-data").show();
             $("#luckysheet-cols-rows-shift").hide();
+            $("#luckysheet-cols-rows-handleincell").hide();
 
             showrightclickmenu($("#luckysheet-rightclick-menu"), event.pageX, $(this).offset().top + 18);
             Store.luckysheet_cols_menu_status = true;
@@ -5122,6 +5132,7 @@ export default function luckysheetHandler() {
         $("#luckysheet-cols-rows-add").show();
         $("#luckysheet-cols-rows-data").hide();
         $("#luckysheet-cols-rows-shift").show();
+        $("#luckysheet-cols-rows-handleincell").hide();
 
         showrightclickmenu($menu, offset.left, offset.top + 18);
         Store.luckysheet_cols_menu_status = true;
@@ -6843,6 +6854,90 @@ export default function luckysheetHandler() {
         let st_index = Store.luckysheet_select_save[0][Store.luckysheetRightHeadClickIs][0];
         luckysheetextendtable(Store.luckysheetRightHeadClickIs, st_index, value, "lefttop");
     });
+    $("#luckysheet-addTopRows").click(function (event) {
+        $("#luckysheet-rightclick-menu").hide();
+        $("#" + Store.container).attr("tabindex", 0).focus();
+        
+        if(Store.luckysheet_select_save.length > 1){
+            if(isEditMode()){
+                alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试");
+            }
+            else{
+                tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", "");
+            }
+
+            return;
+        }
+
+        let $t = $(this), value = $t.parent().find("input").val();
+        if (!isRealNum(value)) {
+            if(isEditMode()){
+                alert("增加错误, 请输入数字");
+            }
+            else{
+                tooltip.info("增加错误, 请输入数字", "");
+            }
+
+            return;
+        }
+
+        value = parseInt(value);
+
+        if (value < 1 || value > 100) {
+            if(isEditMode()){
+                alert("增加错误, 增加范围限制在1-100");
+            }
+            else{
+                tooltip.info("增加错误, 增加范围限制在1-100", ""); 
+            }
+            return;
+        }
+
+        let st_index = Store.luckysheet_select_save[0].row[0];
+        luckysheetextendtable('row', st_index, value, "lefttop");
+    })
+    $("#luckysheet-addLeftCols").click(function (event) {
+        $("#luckysheet-rightclick-menu").hide();
+        $("#" + Store.container).attr("tabindex", 0).focus();
+        
+        if(Store.luckysheet_select_save.length > 1){
+            if(isEditMode()){
+                alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试");
+            }
+            else{
+                tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", "");
+            }
+
+            return;
+        }
+
+        let $t = $(this), value = $t.parent().find("input").val();
+        if (!isRealNum(value)) {
+            if(isEditMode()){
+                alert("增加错误, 请输入数字");
+            }
+            else{
+                tooltip.info("增加错误, 请输入数字", "");
+            }
+
+            return;
+        }
+
+        value = parseInt(value);
+
+        if (value < 1 || value > 100) {
+            if(isEditMode()){
+                alert("增加错误, 增加范围限制在1-100");
+            }
+            else{
+                tooltip.info("增加错误, 增加范围限制在1-100", ""); 
+            }
+            return;
+        }
+
+        let st_index = Store.luckysheet_select_save[0].column[0];
+        luckysheetextendtable('column', st_index, value, "lefttop");
+    })
 
     //向右增加列,向下增加行
     $("#luckysheet-add-rightbottom, #luckysheet-add-rightbottom_t").click(function (event) {
@@ -6888,6 +6983,92 @@ export default function luckysheetHandler() {
         let st_index = Store.luckysheet_select_save[0][Store.luckysheetRightHeadClickIs][1];
         luckysheetextendtable(Store.luckysheetRightHeadClickIs, st_index, value, "rightbottom");
     });
+    $("#luckysheet-addBottomRows").click(function (event) {
+        $("#luckysheet-rightclick-menu").hide();
+        $("#" + Store.container).attr("tabindex", 0).focus();
+
+        if(Store.luckysheet_select_save.length > 1){
+            if(isEditMode()){
+                alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试");
+            }
+            else{
+                tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", "");
+            }
+
+            return;
+        }
+
+        let $t = $(this), value = $t.parent().find("input").val();
+        if (!isRealNum(value)) {
+            if(isEditMode()){
+                alert("增加错误, 请输入数字");
+            }
+            else{
+                tooltip.info("增加错误, 请输入数字", ""); 
+            }
+
+            return;
+        }
+
+        value = parseInt(value);
+
+        if (value < 1 || value > 100) {
+            if(isEditMode()){
+                alert("增加错误, 增加范围限制在1-100");
+            }
+            else{
+                tooltip.info("增加错误, 增加范围限制在1-100", "");
+            }
+
+            return;
+        }
+
+        let st_index = Store.luckysheet_select_save[0].row[1];
+        luckysheetextendtable('row', st_index, value, "rightbottom");
+    });
+    $("#luckysheet-addRightCols").click(function (event) {
+        $("#luckysheet-rightclick-menu").hide();
+        $("#" + Store.container).attr("tabindex", 0).focus();
+
+        if(Store.luckysheet_select_save.length > 1){
+            if(isEditMode()){
+                alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试");
+            }
+            else{
+                tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", "");
+            }
+
+            return;
+        }
+
+        let $t = $(this), value = $t.parent().find("input").val();
+        if (!isRealNum(value)) {
+            if(isEditMode()){
+                alert("增加错误, 请输入数字");
+            }
+            else{
+                tooltip.info("增加错误, 请输入数字", ""); 
+            }
+
+            return;
+        }
+
+        value = parseInt(value);
+
+        if (value < 1 || value > 100) {
+            if(isEditMode()){
+                alert("增加错误, 增加范围限制在1-100");
+            }
+            else{
+                tooltip.info("增加错误, 增加范围限制在1-100", "");
+            }
+
+            return;
+        }
+
+        let st_index = Store.luckysheet_select_save[0].column[1];
+        luckysheetextendtable('column', st_index, value, "rightbottom");
+    });
     
     //删除选中行列
     $("#luckysheet-del-selected, #luckysheet-del-selected_t").click(function (event) {
@@ -6914,9 +7095,150 @@ export default function luckysheetHandler() {
             return;
         }
 
-        let st_index = Store.luckysheet_select_save[0][Store.luckysheetRightHeadClickIs][0], ed_index = Store.luckysheet_select_save[0][Store.luckysheetRightHeadClickIs][1];
+        let st_index = Store.luckysheet_select_save[0][Store.luckysheetRightHeadClickIs][0], 
+            ed_index = Store.luckysheet_select_save[0][Store.luckysheetRightHeadClickIs][1];
         luckysheetdeletetable(Store.luckysheetRightHeadClickIs, st_index, ed_index);
     });
+    $("#luckysheet-delRows").click(function (event) {
+        $("#luckysheet-rightclick-menu").hide();
+        $("#" + Store.container).attr("tabindex", 0).focus();
+
+        if(Store.luckysheet_select_save.length > 1){
+            if(Store.luckysheetRightHeadClickIs == "row"){
+                if(isEditMode()){
+                    alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试");
+                }
+                else{
+                    tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", "");
+                }
+            }
+            else if(Store.luckysheetRightHeadClickIs == "column"){
+                if(isEditMode()){
+                    alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试");
+                }
+                else{
+                    tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", ""); 
+                }
+            }
+            return;
+        }
+
+        let st_index = Store.luckysheet_select_save[0].row[0], 
+            ed_index = Store.luckysheet_select_save[0].row[1];
+        luckysheetdeletetable('row', st_index, ed_index);
+    })
+    $("#luckysheet-delCols").click(function (event) {
+        $("#luckysheet-rightclick-menu").hide();
+        $("#" + Store.container).attr("tabindex", 0).focus();
+
+        if(Store.luckysheet_select_save.length > 1){
+            if(Store.luckysheetRightHeadClickIs == "row"){
+                if(isEditMode()){
+                    alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试");
+                }
+                else{
+                    tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", "");
+                }
+            }
+            else if(Store.luckysheetRightHeadClickIs == "column"){
+                if(isEditMode()){
+                    alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试");
+                }
+                else{
+                    tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", ""); 
+                }
+            }
+            return;
+        }
+
+        let st_index = Store.luckysheet_select_save[0].column[0], 
+            ed_index = Store.luckysheet_select_save[0].column[1];
+        luckysheetdeletetable('column', st_index, ed_index);
+    })
+
+    //隐藏、显示行
+    $("#luckysheet-hidRows").click(function (event) {
+        $("#luckysheet-rightclick-menu").hide();
+        $("#" + Store.container).attr("tabindex", 0).focus();
+
+        let cfg = $.extend(true, {}, Store.config);
+        if(cfg["rowhidden"] == null){
+            cfg["rowhidden"] = {};
+        }
+
+        for(let s = 0; s < Store.luckysheet_select_save.length; s++){
+            let r1 = Store.luckysheet_select_save[s].row[0],
+                r2 = Store.luckysheet_select_save[s].row[1],
+                c1 = Store.luckysheet_select_save[s].column[0],
+                c2 = Store.luckysheet_select_save[s].column[1];
+
+            for(let r = r1; r <= r2; r++){
+                cfg["rowhidden"][r] = 0;
+            }
+        }
+    
+        //保存撤销
+        if(Store.clearjfundo){
+            let redo = {};
+            redo["type"] = "showHidRows";
+            redo["sheetIndex"] = Store.currentSheetIndex;
+            redo["config"] = $.extend(true, {}, Store.config);
+            redo["curconfig"] = cfg;
+    
+            Store.jfundo = [];
+            Store.jfredo.push(redo);
+        }
+    
+        //config
+        Store.config = cfg;
+        Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config;
+    
+        server.saveParam("cg", Store.currentSheetIndex, cfg["rowhidden"], { "k": "rowhidden" });
+    
+        //行高、列宽 刷新  
+        jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length);
+    })
+    $("#luckysheet-showHidRows").click(function (event) {
+        $("#luckysheet-rightclick-menu").hide();
+        $("#" + Store.container).attr("tabindex", 0).focus();
+
+        let cfg = $.extend(true, {}, Store.config);
+        if(cfg["rowhidden"] == null){
+            return;
+        }
+
+        for(let s = 0; s < Store.luckysheet_select_save.length; s++){
+            let r1 = Store.luckysheet_select_save[s].row[0],
+                r2 = Store.luckysheet_select_save[s].row[1],
+                c1 = Store.luckysheet_select_save[s].column[0],
+                c2 = Store.luckysheet_select_save[s].column[1];
+
+            for(let r = r1; r <= r2; r++){
+                delete cfg["rowhidden"][r];
+            }
+        }
+    
+        //保存撤销
+        if(Store.clearjfundo){
+            let redo = {};
+            redo["type"] = "showHidRows";
+            redo["sheetIndex"] = Store.currentSheetIndex;
+            redo["config"] = $.extend(true, {}, Store.config);
+            redo["curconfig"] = cfg;
+    
+            Store.jfundo = [];
+            Store.jfredo.push(redo);
+        }
+    
+        //config
+        Store.config = cfg;
+        Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config;
+    
+        server.saveParam("cg", Store.currentSheetIndex, cfg["rowhidden"], { "k": "rowhidden" });
+    
+        //行高、列宽 刷新  
+        jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length);
+    })
 
     //清除单元格内容
     $("#luckysheet-delete-text").click(function(){
diff --git a/src/core.js b/src/core.js
index 563a5d247..db3bacdf1 100644
--- a/src/core.js
+++ b/src/core.js
@@ -25,6 +25,7 @@ luckysheet.create = function (setting) {
     Store.defaultrowNum = extendsetting.row;
     Store.fullscreenmode = extendsetting.fullscreenmode;
     Store.lang = extendsetting.lang; //language
+    Store.allowEdit = extendsetting.allowEdit;
 
     server.gridKey = extendsetting.gridKey;
     server.loadUrl = extendsetting.loadUrl;
diff --git a/src/css/luckysheet-core.css b/src/css/luckysheet-core.css
index e02d0c351..42dcc60e5 100644
--- a/src/css/luckysheet-core.css
+++ b/src/css/luckysheet-core.css
@@ -2452,10 +2452,10 @@ body:not(.ewa-ipad) .luckysheet-cols-h-cell-nosel:hover, body:not(.ewa-ipad) .lu
     padding-left: 999999px;
 }
 
-#luckysheet-copy-btn {
+/* #luckysheet-copy-btn {
     position: absolute;
     visibility: hidden;
-}
+} */
 
 
 .btn {
diff --git a/src/global/extend.js b/src/global/extend.js
index 621896a4c..34fcd5653 100644
--- a/src/global/extend.js
+++ b/src/global/extend.js
@@ -459,8 +459,9 @@ function luckysheetextendtable(type, index, value, direction) {
         newFreezen.freezenverticaldata = luckysheetFreezen.freezenverticaldata;
     }
 
+    let type1;
     if (type == "row") {
-        let type1 = "r";
+        type1 = "r";
 
         //行高配置变动
         if(cfg["rowlen"] != null){
@@ -586,7 +587,7 @@ function luckysheetextendtable(type, index, value, direction) {
         }
     }
     else {
-        let type1 = "c";
+        type1 = "c";
 
         //行高配置变动
         if(cfg["columlen"] != null){
diff --git a/src/locale/en.js b/src/locale/en.js
index 9a446c2c4..402a8dd45 100644
--- a/src/locale/en.js
+++ b/src/locale/en.js
@@ -22,6 +22,29 @@ export default {
         cancelColor: 'Cancel',
         collapse: 'Collapse',
         fillColor: 'Fill color',
+        border: 'Border',
+        borderStyle: 'Border style',
+        mergeCell: 'Merge cells',
+        chooseMergeType: 'Choose merge type',
+        horizontalAlign: 'Horizontal align',
+        verticalAlign: 'Vertical align',
+        alignment: 'Alignment',
+        textWrap: 'Text wrap',
+        textWrapMode: 'Text wrap mode',
+        textRotate: 'Text rotate',
+        textRotateMode: 'Text rotate mode',
+        freezeTopRow: 'Freeze top row',
+        sortAndFilter: 'Sort and filter',
+        findAndReplace: 'Find and replace',
+        sum: 'SUM',
+        autoSum: 'Auto SUM',
+        moreFunction: 'More function',
+        conditionalFormat: 'Conditional format',
+        postil: 'Postil',
+        pivotTable: 'PivotTable',
+        chart: 'Chart',
+        screenshot: 'Screenshot',
+        splitColumn: 'Split column',
     },
     alternatingColors:{
         applyRange: 'Apply to range',
diff --git a/src/locale/zh.js b/src/locale/zh.js
index 7c161e7b1..392e5243d 100644
--- a/src/locale/zh.js
+++ b/src/locale/zh.js
@@ -11,7 +11,7 @@ export default {
         font: '字体',
         fontSize: '字号大小',
         bold: '粗体 (Ctrl+B)',
-        Italic: '斜体 (Ctrl+I)',
+        italic: '斜体 (Ctrl+I)',
         strikethrough: '删除线 (Alt+Shift+5)',
         textColor: '文本颜色',
         chooseColor: '颜色选择',
@@ -21,6 +21,29 @@ export default {
         confirmColor: '确定颜色',
         collapse: '收起',
         fillColor: '单元格颜色',
+        border: '边框',
+        borderStyle: '边框类型',
+        mergeCell: '合并单元格',
+        chooseMergeType: '选择合并类型',
+        horizontalAlign: '水平对齐',
+        verticalAlign: '垂直对齐',
+        alignment: '对齐方式',
+        textWrap: '文本换行',
+        textWrapMode: '换行方式',
+        textRotate: '文本旋转',
+        textRotateMode: '旋转方式',
+        freezeTopRow: '冻结首行',
+        sortAndFilter: '排序和筛选',
+        findAndReplace: '查找替换',
+        sum: '求和',
+        autoSum: '自动求和',
+        moreFunction: '更多函数',
+        conditionalFormat: '条件格式',
+        postil: '批注',
+        pivotTable: '数据透视表', 
+        chart: '图表',
+        screenshot: '截图',
+        splitColumn: '分列',
     },
     alternatingColors:{
         applyRange: '应用范围',