From 11b0f3c7418ce711881c4a803f2388b6629f7348 Mon Sep 17 00:00:00 2001
From: danny <692763892@qq.com>
Date: Fri, 9 Oct 2020 19:43:16 +0800
Subject: [PATCH 1/7] update operate_1
---
docs/guide/operate.md | 283 ++++++++++++++++++++++++++++++++++++++++--
1 file changed, 275 insertions(+), 8 deletions(-)
diff --git a/docs/guide/operate.md b/docs/guide/operate.md
index 6b63fbc..c349bf7 100644
--- a/docs/guide/operate.md
+++ b/docs/guide/operate.md
@@ -1,16 +1,28 @@
# Table Operation
+`luckysheet` stores all operations in the history to `undo` and `redo`. If `allowupdate` is set to true and `updateURL` is available in initial, operations will be updated on the backend in real-time via webSocket. And every one can edit same sheet on the same time.
-## Cell refresh
+>Source code [`src/controllers/server.js`] (https://github.com/mengshukeji/Luckysheet/blob/master/src/controllers/server.js) The module shows us the function of background saving.
+
+In general, shared editing(or collaborative editing) is controled by the account system created by developers to control permissions.
+
+The following are all types of operations that support transferring to the background. In this case, I use mongodb as a storage example to explain how front-end and back-end interacts with eachother.
+Pay attention, `i` in the object is the `index` of the sheet rather than `order`.
+## Cell refresh
+### single cell refresh
- **Format**:
```json
{
"t": "v",
- "i": 3,
- "v": "asdf",
- "r": 5,
- "c": 7
+ "i": "Sheet_0554kKiKl4M7_1597974810804",
+ "v": {
+ "v": 233,
+ "ct": { "fa": "General", "t": "n" },
+ "m": "233"
+ },
+ "r": 0,
+ "c": 1
}
```
@@ -20,7 +32,7 @@
| ------------ | ------------ |
|t|Operation type symbol|
|i|The index value of the current sheet|
- |v|Cell value|
+ |v|Cell value, refer to [单元格属性表](/zh/guide/cell.html#基本单元格)|
|r|Row number of cell|
|c|The column number of the cell|
@@ -515,6 +527,43 @@
Delete the sheet whose index is the value corresponding to `deleIndex`.
+### restore from a deleted sheet
+
+- **format**:
+
+ ```json
+ {
+ "t": "shre",
+ "i": null,
+ "v": {
+ "reIndex": "0"
+ }
+ }
+ ```
+
+- **Explanation**:
+
+
+
+ | Parameter |
+ Explanation |
+
+
+ | t |
+ Operation type symbol |
+
+
+ | v |
+ deleIndex |
+ 需要恢复的sheet索引 |
+
+
+
+
+- **Backend update**:
+
+ restore the sheet whose index is the number of `reIndex`.
+
### Position
- **Format**:
@@ -522,8 +571,17 @@
```json
{
"t": "shr",
+ "i": null,
"v": {
- "index": "positon"
+ "0": 1,
+ "1": 0,
+ "2": 2,
+ "3": 3,
+ "4": 4,
+ "5": 5,
+ "6": 6,
+ "7": 7,
+ "Sheet_6az6nei65t1i_1596209937084": 8
}
}
```
@@ -543,6 +601,31 @@
`luckysheetfile[key2].order = value2`
`luckysheetfile[key3].order = value3`
+### switch to the specified sheet
+
+- **format**:
+
+ ```json
+ {
+ "t": "shs",
+ "i": null,
+ "v": 1
+ }
+ ```
+
+- **Explanation**:
+
+ |Parameter|Explanation|
+ | ------------ | ------------ |
+ |t|Operation type symbol|
+ |v|index of the specified sheet|
+
+- **Backend update**:
+
+ setting the `status` = `1`, when the `index` of a sheet is eaqul to `v`:
+
+ `luckysheetfile[v].status = 1`
+
## Sheet attributes (hide or show)
- **Format**:
@@ -618,4 +701,188 @@
- **Backend update**:
- According to gridkey, update the thumbnail field of the table in mysql to the img value, and update the status field of the sheet whose index is the curindex value to 1, and set the status value of other sheets to 0.
\ No newline at end of file
+ According to gridkey, update the thumbnail field of the table in mysql to the img value, and update the status field of the sheet whose index is the curindex value to 1, and set the status value of other sheets to 0.
+
+## Chart(TODO)
+
+There are four types of chart operations: add new chart -"add", move chart position-"xy", zoom chart-"wh", and update chart configuration-"update".
+
+### new chart
+
+- **format**:
+
+ ```json
+ {
+ "t": "c",
+ "i": 0,
+ "op":"add",
+ "v": {
+ "chart_id": "chart_p145W6i73otw_1596209943446",
+ "width": 400,
+ "height": 250,
+ "left": 20,
+ "top": 120,
+ "sheetIndex": "Sheet_6az6nei65t1i_1596209937084",
+ "needRangeShow": true,
+ "chartOptions": {
+ "chart_id": "chart_p145W6i73otw_1596209943446",
+ "chartAllType": "echarts|line|default",
+ "rangeArray": [ { "row": [ 0, 4 ], "column": [ 0, 7 ] } ],
+ "rangeColCheck": { "exits": true, "range": [ 0, 0 ] },
+ "rangeRowCheck": { "exits": true, "range": [ 0, 0 ] },
+ "rangeConfigCheck": false,
+ "defaultOption": {
+ "title": {
+ "show": true,
+ "text": "default title"
+ }
+ }
+ },
+ "isShow": true
+ }
+ }
+ ```
+
+- **Explanation**:
+
+ |Parameter|Explanation|
+ | ------------ | ------------ |
+ |t|Operation type symbol|
+ |i|The index value of the current sheet|
+ |op|Operation options include hide and show|
+ |v|configuration information of charts|
+
+- **Backend update**:
+
+ update the chart settings in the current sheet,if`luckysheetfile[i].chart` is null,the array should be `[]` on initial.
+
+ ```json
+ luckysheetfile[0].chart.push(v)
+ ```
+
+### move chart position
+
+- **format**:
+
+ ```json
+ {
+ "t": "c",
+ "i": 0,
+ "op":"xy",
+ "v": {
+ "chart_id": "chart_p145W6i73otw_1596209943446",
+ "left": 20,
+ "top": 120
+ }
+ }
+ ```
+
+- **Explanation**:
+
+ |Parameter|Explanation|
+ | ------------ | ------------ |
+ |t|Operation type symbol|
+ |i|The index value of the current sheet|
+ |op|Operation options include hide and show|
+ |v|configuration information of charts|
+
+- **Backend update**:
+
+ update the chart settings in the current sheet
+
+ ```js
+ luckysheetfile[0].chart[v.chart_id].left = v.left;
+ luckysheetfile[0].chart[v.chart_id].top = v.top;
+ ```
+
+### zoom chart
+
+- **format**:
+
+ ```json
+ {
+ "t": "c",
+ "i": 0,
+ "op":"wh",
+ "v": {
+ "chart_id": "chart_p145W6i73otw_1596209943446",
+ "width": 400,
+ "height": 250,
+ "left": 20,
+ "top": 120
+ }
+ }
+ ```
+
+- **Explanation**:
+
+ |Parameter|Explanation|
+ | ------------ | ------------ |
+ |t|Operation type symbol|
+ |i|The index value of the current sheet|
+ |op|Operation options include hide and show|
+ |v|configuration information of charts|
+
+- **Backend update**:
+
+ update the chart settings in the current sheet
+
+ ```js
+ luckysheetfile[0].chart[v.chart_id].left = v.left;
+ luckysheetfile[0].chart[v.chart_id].top = v.top;
+ luckysheetfile[0].chart[v.chart_id].width = v.width;
+ luckysheetfile[0].chart[v.chart_id].height = v.height;
+ ```
+
+### change the configuration of charts
+
+- **format**:
+
+ ```json
+ {
+ "t": "c",
+ "i": 0,
+ "op":"update",
+ "v": {
+ "chart_id": "chart_p145W6i73otw_1596209943446",
+ "width": 400,
+ "height": 250,
+ "left": 20,
+ "top": 120,
+ "sheetIndex": "Sheet_6az6nei65t1i_1596209937084",
+ "needRangeShow": true,
+ "chartOptions": {
+ "chart_id": "chart_p145W6i73otw_1596209943446",
+ "chartAllType": "echarts|line|default",
+ "rangeArray": [ { "row": [ 0, 4 ], "column": [ 0, 7 ] } ],
+ "rangeColCheck": { "exits": true, "range": [ 0, 0 ] },
+ "rangeRowCheck": { "exits": true, "range": [ 0, 0 ] },
+ "rangeConfigCheck": false,
+ "defaultOption": {
+ "title": {
+ "show": true,
+ "text": "default title"
+ }
+ }
+ },
+ "isShow": true
+ }
+ }
+ ```
+
+- **Explanation**:
+
+ |Parameter|Explanation|
+ | ------------ | ------------ |
+ |t|Operation type symbol|
+ |i|The index value of the current sheet|
+ |op|Operation options include hide and show|
+ |v|configuration information of charts|
+
+- **Backend update**:
+
+ update the chart settings in the current sheet
+
+ ```js
+ luckysheetfile[0].chart[v.chart_id] = v;
+ ```
From 05c49a2fad21706ee7e232fe75d213fed3724109 Mon Sep 17 00:00:00 2001
From: wpxp123456 <2677556700@qq.com>
Date: Sat, 10 Oct 2020 16:27:26 +0800
Subject: [PATCH 2/7] fix(image): resize and change row or column size
---
src/controllers/handler.js | 160 +++++++++++++++++++++++---
src/controllers/rowColumnOperation.js | 15 ++-
src/global/extend.js | 107 +++++++++++++++--
3 files changed, 252 insertions(+), 30 deletions(-)
diff --git a/src/controllers/handler.js b/src/controllers/handler.js
index e72c057..b770cd2 100644
--- a/src/controllers/handler.js
+++ b/src/controllers/handler.js
@@ -2356,17 +2356,24 @@ export default function luckysheetHandler() {
width = resizeXY[4] - resizeXY[6] + resizeXY[2] - left;
- top = resizeXY[5] - resizeXY[7] + topchange;
+ height = Math.round(width * (resizeXY[3] / resizeXY[2]));
+ top = resizeXY[5] - resizeXY[7] + resizeXY[3] - height;
if(top < minTop){
top = minTop;
+ height = resizeXY[5] - resizeXY[7] + resizeXY[3] - top;
+
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
+ left = resizeXY[4] - resizeXY[6] + resizeXY[2] - width;
}
if(top > resizeXY[5] - resizeXY[7] + resizeXY[3] - 1){
top = resizeXY[5] - resizeXY[7] + resizeXY[3] - 1;
- }
+ height = resizeXY[5] - resizeXY[7] + resizeXY[3] - top;
- height = resizeXY[5] - resizeXY[7] + resizeXY[3] - top;
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
+ left = resizeXY[4] - resizeXY[6] + resizeXY[2] - width;
+ }
}
else if(resize == 'lm'){//左中
left = resizeXY[4] - resizeXY[6] + leftchange;
@@ -2397,16 +2404,22 @@ export default function luckysheetHandler() {
width = resizeXY[4] - resizeXY[6] + resizeXY[2] - left;
- top = resizeXY[5] - resizeXY[7];
+ height = Math.round(width * (resizeXY[3] / resizeXY[2]));
- height = resizeXY[3] + topchange;
+ top = resizeXY[5] - resizeXY[7];
if(height < 1){
height = 1;
+
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
+ left = resizeXY[4] - resizeXY[6] + resizeXY[2] - width;
}
if(height > minTop + Store.cellmainHeight - Store.cellMainSrollBarSize - top){
height = minTop + Store.cellmainHeight - Store.cellMainSrollBarSize - top;
+
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
+ left = resizeXY[4] - resizeXY[6] + resizeXY[2] - width;
}
}
else if(resize == 'rt'){//右上
@@ -2422,17 +2435,22 @@ export default function luckysheetHandler() {
width = minLeft + Store.cellmainWidth - Store.cellMainSrollBarSize - left;
}
- top = resizeXY[5] - resizeXY[7] + topchange;
+ height = Math.round(width * (resizeXY[3] / resizeXY[2]));
+ top = resizeXY[5] - resizeXY[7] + resizeXY[3] - height;
if(top < minTop){
top = minTop;
+ height = resizeXY[5] - resizeXY[7] + resizeXY[3] - top;
+
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
}
if(top > resizeXY[5] - resizeXY[7] + resizeXY[3] - 1){
top = resizeXY[5] - resizeXY[7] + resizeXY[3] - 1;
- }
+ height = resizeXY[5] - resizeXY[7] + resizeXY[3] - top;
- height = resizeXY[5] - resizeXY[7] + resizeXY[3] - top;
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
+ }
}
else if(resize == 'rm'){//右中
left = resizeXY[4] - resizeXY[6];
@@ -2463,16 +2481,19 @@ export default function luckysheetHandler() {
width = minLeft + Store.cellmainWidth - Store.cellMainSrollBarSize - left;
}
+ height = Math.round(width * (resizeXY[3] / resizeXY[2]));
top = resizeXY[5] - resizeXY[7];
- height = resizeXY[3] + topchange;
-
if(height < 1){
height = 1;
+
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
}
if(height > minTop + Store.cellmainHeight - Store.cellMainSrollBarSize - top){
height = minTop + Store.cellmainHeight - Store.cellMainSrollBarSize - top;
+
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
}
}
else if(resize == 'mt'){//中上
@@ -2509,21 +2530,105 @@ export default function luckysheetHandler() {
}
}
else{
- if (resize == "lm" || resize == "lt" || resize == "lb") {
+ if(resize == 'lt'){//左上
+ left = x;
+ width = resizeXY[2] - leftchange;
+
+ if (left > resizeXY[2] + resizeXY[4] - 1) {
+ left = resizeXY[2] + resizeXY[4] - 1;
+ width = resizeXY[2] + resizeXY[0] - (resizeXY[2] + resizeXY[4] - 1);
+ }
+ else if (left <= 0) {
+ left = 0;
+ width = resizeXY[2] + resizeXY[0];
+ }
+
+ height = Math.round(width * (resizeXY[3] / resizeXY[2]));
+ top = resizeXY[3] + resizeXY[1] - height;
+
+ if (top > resizeXY[3] + resizeXY[5] - 1) {
+ top = resizeXY[3] + resizeXY[5] - 1;
+ height = resizeXY[3] + resizeXY[1] - (resizeXY[3] + resizeXY[5] - 1);
+
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
+ left = resizeXY[2] + resizeXY[0] - width;
+ }
+ else if (top <= 0) {
+ top = 0;
+ height = resizeXY[3] + resizeXY[1];
+
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
+ left = resizeXY[2] + resizeXY[0] - width;
+ }
+ }
+ else if(resize == 'lm'){//左中
+ left = x;
+ width = resizeXY[2] - leftchange;
+
+ if (left > resizeXY[2] + resizeXY[4] - 1) {
+ left = resizeXY[2] + resizeXY[4] - 1;
+ width = resizeXY[2] + resizeXY[0] - (resizeXY[2] + resizeXY[4] - 1);
+ }
+ else if (left <= 0) {
+ left = 0;
+ width = resizeXY[2] + resizeXY[0];
+ }
+ }
+ else if(resize == 'lb'){//左下
left = x;
width = resizeXY[2] - leftchange;
if (left > resizeXY[2] + resizeXY[4] - 1) {
left = resizeXY[2] + resizeXY[4] - 1;
- width = resizeXY[2] - (resizeXY[2] + resizeXY[4] - 1 - resizeXY[0]);
+ width = resizeXY[2] + resizeXY[0] - (resizeXY[2] + resizeXY[4] - 1);
}
else if (left <= 0) {
left = 0;
width = resizeXY[2] + resizeXY[0];
}
+
+ height = Math.round(width * (resizeXY[3] / resizeXY[2]));
+
+ if (height < 1) {
+ height = 1;
+
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
+ left = resizeXY[2] + resizeXY[0] - width;
+ }
+ else if (height >= imageCtrl.currentWinH - resizeXY[5] - 42 - 6) {
+ height = imageCtrl.currentWinH - resizeXY[5] - 42 - 6;
+
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
+ left = resizeXY[2] + resizeXY[0] - width;
+ }
}
+ else if(resize == 'rt'){//右上
+ width = resizeXY[2] + leftchange;
- if (resize == "rm" || resize == "rt" || resize == "rb") {
+ if (width < 1) {
+ width = 1;
+ }
+ else if (width >= imageCtrl.currentWinW - resizeXY[4] - 22 - 36) {
+ width = imageCtrl.currentWinW - resizeXY[4] - 22 - 36;
+ }
+
+ height = Math.round(width * (resizeXY[3] / resizeXY[2]));
+ top = resizeXY[3] + resizeXY[1] - height;
+
+ if (top > resizeXY[3] + resizeXY[5] - 1) {
+ top = resizeXY[3] + resizeXY[5] - 1;
+ height = resizeXY[3] + resizeXY[1] - (resizeXY[3] + resizeXY[5] - 1);
+
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
+ }
+ else if (top <= 0) {
+ top = 0;
+ height = resizeXY[3] + resizeXY[1];
+
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
+ }
+ }
+ else if(resize == 'rm'){//右中
width = resizeXY[2] + leftchange;
if (width < 1) {
@@ -2533,22 +2638,43 @@ export default function luckysheetHandler() {
width = imageCtrl.currentWinW - resizeXY[4] - 22 - 36;
}
}
+ else if(resize == 'rb'){//右下
+ width = resizeXY[2] + leftchange;
+
+ if (width < 1) {
+ width = 1;
+ }
+ else if (width >= imageCtrl.currentWinW - resizeXY[4] - 22 - 36) {
+ width = imageCtrl.currentWinW - resizeXY[4] - 22 - 36;
+ }
+
+ height = Math.round(width * (resizeXY[3] / resizeXY[2]));
- if (resize == "mt" || resize == "lt" || resize == "rt") {
+ if (height < 1) {
+ height = 1;
+
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
+ }
+ else if (height >= imageCtrl.currentWinH - resizeXY[5] - 42 - 6) {
+ height = imageCtrl.currentWinH - resizeXY[5] - 42 - 6;
+
+ width = Math.round(height * (resizeXY[2] / resizeXY[3]));
+ }
+ }
+ else if(resize == 'mt'){//中上
top = y;
height = resizeXY[3] - topchange;
if (top > resizeXY[3] + resizeXY[5] - 1) {
top = resizeXY[3] + resizeXY[5] - 1;
- height = resizeXY[3] - (resizeXY[3] + resizeXY[5] - 1 - resizeXY[1]);
+ height = resizeXY[3] + resizeXY[1] - (resizeXY[3] + resizeXY[5] - 1);
}
else if (top <= 0) {
top = 0;
height = resizeXY[3] + resizeXY[1];
}
}
-
- if (resize == "mb" || resize == "lb" || resize == "rb") {
+ else if(resize == 'mb'){//中下
height = resizeXY[3] + topchange;
if (height < 1) {
diff --git a/src/controllers/rowColumnOperation.js b/src/controllers/rowColumnOperation.js
index b096e03..1c0be6d 100644
--- a/src/controllers/rowColumnOperation.js
+++ b/src/controllers/rowColumnOperation.js
@@ -1696,6 +1696,7 @@ export function rowColumnOperationInitial(){
let cfg = $.extend(true, {}, Store.config);
let type;
+ let images = null;
if(Store.luckysheetRightHeadClickIs == "row"){
if(!checkProtectionAuthorityNormal(Store.currentSheetIndex, "formatRows")){
@@ -1724,6 +1725,8 @@ export function rowColumnOperationInitial(){
for(let r = r1; r <= r2; r++){
cfg["rowlen"][r] = size;
+
+ images = imageCtrl.moveChangeSize("row", r, size);
}
}
}
@@ -1754,6 +1757,8 @@ export function rowColumnOperationInitial(){
for(let c = c1; c <= c2; c++){
cfg["columnlen"][c] = size;
+
+ images = imageCtrl.moveChangeSize("column", c, size);
}
}
}
@@ -1763,9 +1768,11 @@ export function rowColumnOperationInitial(){
Store.jfredo.push({
"type": "resize",
"ctrlType": type,
+ "sheetIndex": Store.currentSheetIndex,
"config": $.extend(true, {}, Store.config),
"curconfig": $.extend(true, {}, cfg),
- "sheetIndex": Store.currentSheetIndex
+ "images": $.extend(true, {}, imageCtrl.images),
+ "curImages": $.extend(true, {}, images)
});
}
@@ -1773,6 +1780,12 @@ export function rowColumnOperationInitial(){
Store.config = cfg;
Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config;
+ //images
+ Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].images = images;
+ server.saveParam("all", Store.currentSheetIndex, images, { "k": "images" });
+ imageCtrl.images = images;
+ imageCtrl.allImagesShow();
+
if(Store.luckysheetRightHeadClickIs == "row"){
server.saveParam("cg", Store.currentSheetIndex, cfg["rowlen"], { "k": "rowlen" });
jfrefreshgrid_rhcw(Store.flowdata.length, null);
diff --git a/src/global/extend.js b/src/global/extend.js
index 5af0a94..23b2eca 100644
--- a/src/global/extend.js
+++ b/src/global/extend.js
@@ -265,7 +265,9 @@ function luckysheetextendtable(type, index, value, direction, sheetIndex) {
}
if(newFilterObj != null && newFilterObj.filter != null){
- cfg["rowhidden"] = {};
+ if(cfg["rowhidden"] == null){
+ cfg["rowhidden"] = {};
+ }
for(let k in newFilterObj.filter){
let f_rowhidden = newFilterObj.filter[k].rowhidden;
@@ -275,9 +277,6 @@ function luckysheetextendtable(type, index, value, direction, sheetIndex) {
}
}
}
- else{
- delete cfg["rowhidden"];
- }
//条件格式配置变动
let CFarr = file.luckysheet_conditionformat_save;
@@ -541,6 +540,32 @@ function luckysheetextendtable(type, index, value, direction, sheetIndex) {
cfg["rowlen"] = rowlen_new;
}
+ //隐藏行配置变动
+ if(cfg["rowhidden"] != null){
+ let rowhidden_new = {};
+
+ for(let r in cfg["rowhidden"]){
+ r = parseFloat(r);
+
+ if(r < index){
+ rowhidden_new[r] = cfg["rowhidden"][r];
+ }
+ else if(r == index){
+ if(direction == "lefttop"){
+ rowhidden_new[(r + value)] = cfg["rowhidden"][r];
+ }
+ else if(direction == "rightbottom"){
+ rowhidden_new[r] = cfg["rowhidden"][r];
+ }
+ }
+ else{
+ rowhidden_new[(r + value)] = cfg["rowhidden"][r];
+ }
+ }
+
+ cfg["rowhidden"] = rowhidden_new;
+ }
+
//空行模板
let row = [];
for(let c = 0; c < d[0].length; c++){
@@ -667,6 +692,32 @@ function luckysheetextendtable(type, index, value, direction, sheetIndex) {
cfg["columnlen"] = columnlen_new;
}
+ //隐藏列配置变动
+ if(cfg["colhidden"] != null){
+ let colhidden_new = {};
+
+ for(let c in cfg["colhidden"]){
+ c = parseFloat(c);
+
+ if(c < index){
+ colhidden_new[c] = cfg["colhidden"][c];
+ }
+ else if(c == index){
+ if(direction == "lefttop"){
+ colhidden_new[(c + value)] = cfg["colhidden"][c];
+ }
+ else if(direction == "rightbottom"){
+ colhidden_new[c] = cfg["colhidden"][c];
+ }
+ }
+ else{
+ colhidden_new[(c + value)] = cfg["colhidden"][c];
+ }
+ }
+
+ cfg["colhidden"] = colhidden_new;
+ }
+
//空列模板
let col = [];
for(let r = 0; r < d.length; r++){
@@ -1114,7 +1165,9 @@ function luckysheetdeletetable(type, st, ed, sheetIndex) {
}
if(newFilterObj != null && newFilterObj.filter != null){
- cfg["rowhidden"] = {};
+ if(cfg["rowhidden"] == null){
+ cfg["rowhidden"] = {};
+ }
for(let k in newFilterObj.filter){
let f_rowhidden = newFilterObj.filter[k].rowhidden;
@@ -1124,9 +1177,6 @@ function luckysheetdeletetable(type, st, ed, sheetIndex) {
}
}
}
- else{
- delete cfg["rowhidden"];
- }
//条件格式配置变动
let CFarr = file.luckysheet_conditionformat_save;
@@ -1406,6 +1456,23 @@ function luckysheetdeletetable(type, st, ed, sheetIndex) {
cfg["rowlen"] = rowlen_new;
+ //隐藏行配置变动
+ if(cfg["rowhidden"] == null){
+ cfg["rowhidden"] = {};
+ }
+
+ let rowhidden_new = {};
+ for(let r in cfg["rowhidden"]){
+ if(r < st){
+ rowhidden_new[r] = cfg["rowhidden"][r];
+ }
+ else if(r > ed){
+ rowhidden_new[r - slen] = cfg["rowhidden"][r];
+ }
+ }
+
+ cfg["rowhidden"] = rowhidden_new;
+
//边框配置变动
if(cfg["borderInfo"] && cfg["borderInfo"].length > 0){
let borderInfo = [];
@@ -1499,6 +1566,23 @@ function luckysheetdeletetable(type, st, ed, sheetIndex) {
cfg["columnlen"] = columnlen_new;
+ //隐藏列配置变动
+ if(cfg["colhidden"] == null){
+ cfg["colhidden"] = {};
+ }
+
+ let colhidden_new = {};
+ for(let c in cfg["colhidden"]){
+ if(c < st){
+ colhidden_new[c] = cfg["colhidden"][c];
+ }
+ else if(c > ed){
+ colhidden_new[c - slen] = cfg["colhidden"][c];
+ }
+ }
+
+ cfg["colhidden"] = colhidden_new;
+
//边框配置变动
if(cfg["borderInfo"] && cfg["borderInfo"].length > 0){
let borderInfo = [];
@@ -1918,7 +2002,9 @@ function luckysheetDeleteCell(type, str, edr, stc, edc, sheetIndex) {
}
if(newFilterObj != null && newFilterObj.filter != null){
- cfg["rowhidden"] = {};
+ if(cfg["rowhidden"] == null){
+ cfg["rowhidden"] = {};
+ }
for(let k in newFilterObj.filter){
let f_rowhidden = newFilterObj.filter[k].rowhidden;
@@ -1928,9 +2014,6 @@ function luckysheetDeleteCell(type, str, edr, stc, edc, sheetIndex) {
}
}
}
- else{
- delete cfg["rowhidden"];
- }
//条件格式配置变动
let CFarr = file.luckysheet_conditionformat_save;
From 9538972f910ed77e02ccb55c0b96386fcf87297b Mon Sep 17 00:00:00 2001
From: wbfsa
Date: Sun, 11 Oct 2020 12:38:29 +0800
Subject: [PATCH 3/7] fix(text wrap postion bug): wrap and rotation postion
wrong
---
src/controllers/constant.js | 18 ++++++++
src/controllers/menuButton.js | 47 ++++++++++++++++++++
src/controllers/resize.js | 4 +-
src/global/getRowlen.js | 43 +++++++++---------
src/index.html | 82 +++++++++++++++++------------------
src/locale/en.js | 6 +++
src/locale/zh.js | 6 +++
7 files changed, 143 insertions(+), 63 deletions(-)
diff --git a/src/controllers/constant.js b/src/controllers/constant.js
index 77dac77..fcbb23b 100644
--- a/src/controllers/constant.js
+++ b/src/controllers/constant.js
@@ -1423,6 +1423,24 @@ function menuToolBar (){
+
`;
}
diff --git a/src/controllers/menuButton.js b/src/controllers/menuButton.js
index b9d2ba9..f47f701 100644
--- a/src/controllers/menuButton.js
+++ b/src/controllers/menuButton.js
@@ -2801,6 +2801,53 @@ const menuButton = {
openProtectionModal(sheetFile);
});
+ //print
+ $("#luckysheet-icon-print").click(function(){
+ let menuButtonId = $(this).attr("id") + "-menuButton";
+ let $menuButton = $("#" + menuButtonId);
+ const _locale = locale();
+ const locale_print = _locale.print;
+ if($menuButton.length == 0){
+ let itemdata = [
+ {"text": locale_print.menuItemPrint, "value": "print", "example": ''},
+ {"text": "", "value": "split", "example": ""},
+ {"text": locale_print.menuItemAreas, "value": "areas", "example": ''},
+ {"text": locale_print.menuItemRows, "value": "rows", "example": ''},
+ {"text": locale_print.menuItemColumns, "value": "columns", "example": ''},
+ ];
+
+ let itemset = _this.createButtonMenu(itemdata);
+
+ let menu = replaceHtml(_this.menu, { "id": "print", "item": itemset, "subclass": "", "sub": "" });
+
+ $("body").append(menu);
+ $menuButton = $("#" + menuButtonId).width(180);
+
+ $menuButton.find(".luckysheet-cols-menuitem").click(function(){
+ $menuButton.hide();
+ luckysheetContainerFocus();
+
+ let $t = $(this), itemvalue = $t.attr("itemvalue");
+
+ if(itemvalue == "print"){ //Print config
+ alert("print");
+ }
+ else if(itemvalue == "areas" || itemvalue == "rows" || itemvalue == "columns"){ //range
+ alert("areas");
+ }
+ });
+ }
+
+ let userlen = $(this).outerWidth();
+ let tlen = $menuButton.outerWidth();
+
+ let menuleft = $(this).offset().left;
+ if(tlen > userlen && (tlen + menuleft) > $("#" + Store.container).width()){
+ menuleft = menuleft - tlen + userlen;
+ }
+ mouseclickposition($menuButton, menuleft, $(this).offset().top + 25, "lefttop");
+ });
+
$("body").on("mouseover mouseleave",".luckysheet-menuButton .luckysheet-cols-submenu", function(e){
let $t = $(this), attrid = $t.attr("itemvalue"),
$attr = $("#luckysheet-icon-" + attrid + "-menuButton");
diff --git a/src/controllers/resize.js b/src/controllers/resize.js
index d390ac5..5ca3935 100644
--- a/src/controllers/resize.js
+++ b/src/controllers/resize.js
@@ -330,7 +330,8 @@ export function menuToolBarWidth() {
$('#luckysheet-chart-btn-screenshot').offset().left,
$('#luckysheet-icon-seachmore').offset().left,
$('#luckysheet-icon-protection').offset().left,
- $('#luckysheet-icon-protection').offset().left + $('#luckysheet-icon-protection').outerWidth() + 5,
+ $('#luckysheet-icon-print').offset().left,
+ $('#luckysheet-icon-print').offset().left + $('#luckysheet-icon-protection').outerWidth() + 5,
];
toobarObject.toobarElements = [
'#luckysheet-icon-undo',
@@ -367,5 +368,6 @@ export function menuToolBarWidth() {
'#luckysheet-chart-btn-screenshot',
'#luckysheet-icon-seachmore',
'#luckysheet-icon-protection',
+ '#luckysheet-icon-print',
]
}
\ No newline at end of file
diff --git a/src/global/getRowlen.js b/src/global/getRowlen.js
index 44d60d0..ca73882 100644
--- a/src/global/getRowlen.js
+++ b/src/global/getRowlen.js
@@ -1061,7 +1061,7 @@ function getCellTextInfo(cell , ctx, option){
if(verticalAlign == "0"){//mid
left = x + cellWidth/2 - (textW_all/2) + lastLineSpaceHeight*Math.cos(rtPI)/2;
- top = y + cellHeight/2 - textH_all/2 - lastLineSpaceHeight*Math.sin(rtPI)/2;
+ top = y + cellHeight/2 - textH_all/2 - lastLineSpaceHeight*Math.cos(rtPI)/2;
}
else if(verticalAlign == "1"){//top
left = x + cellWidth/2 - textW_all/2;
@@ -1069,13 +1069,13 @@ function getCellTextInfo(cell , ctx, option){
}
else if(verticalAlign == "2"){//bottom
left = x + cellWidth/2 - (textW_all/2)+lastLineSpaceHeight*Math.cos(rtPI);
- top = y + cellHeight - rh/2 - textH_all/2 - lastLineSpaceHeight*Math.sin(rtPI);
+ top = y + cellHeight - rh/2 - textH_all/2 - lastLineSpaceHeight*Math.cos(rtPI);
}
}
else if(horizonAlign == "1"){//left
if(verticalAlign == "0"){//mid
left = x - rh*Math.sin(rtPI)/2 + lastLineSpaceHeight*Math.cos(rtPI)/2;
- top = y + cellHeight/2 + rh*Math.cos(rtPI)/2 - lastLineSpaceHeight*Math.sin(rtPI)/2;
+ top = y + cellHeight/2 + rh*Math.cos(rtPI)/2 - lastLineSpaceHeight*Math.cos(rtPI)/2;
}
else if(verticalAlign == "1"){//top
left = x - rh*Math.sin(rtPI);
@@ -1083,13 +1083,13 @@ function getCellTextInfo(cell , ctx, option){
}
else if(verticalAlign == "2"){//bottom
left = x + lastLineSpaceHeight*Math.cos(rtPI);
- top = y + cellHeight - lastLineSpaceHeight*Math.sin(rtPI);
+ top = y + cellHeight - lastLineSpaceHeight*Math.cos(rtPI);
}
}
else if(horizonAlign == "2"){//right
if(verticalAlign == "0"){//mid
left = x + cellWidth - rw/2 - (textW_all_inner/2+(textH_all/2)/Math.tan(rtPI))+ lastLineSpaceHeight*Math.cos(rtPI)/2;
- top = y + cellHeight/2 - textH_all/2 - lastLineSpaceHeight*Math.sin(rtPI)/2;
+ top = y + cellHeight/2 - textH_all/2 - lastLineSpaceHeight*Math.cos(rtPI)/2;
}
else if(verticalAlign == "1"){//top fixOneLineLeft
left = x + cellWidth - textW_all + fixOneLineLeft;
@@ -1097,7 +1097,7 @@ function getCellTextInfo(cell , ctx, option){
}
else if(verticalAlign == "2"){//bottom
left = x + cellWidth - rw*Math.cos(rtPI) + lastLineSpaceHeight*Math.cos(rtPI);
- top = y + cellHeight - rw*Math.sin(rtPI) - lastLineSpaceHeight*Math.sin(rtPI);
+ top = y + cellHeight - rw*Math.sin(rtPI) - lastLineSpaceHeight*Math.cos(rtPI);
}
}
@@ -1152,21 +1152,21 @@ function getCellTextInfo(cell , ctx, option){
if(verticalAlign == "0"){//mid
left = x + cellWidth/2 - (textW_all/2) - lastLineSpaceHeight*Math.cos(rtPI)/2;
- top = y + cellHeight/2 - textH_all/2 + lastLineSpaceHeight*Math.sin(rtPI)/2;
+ top = y + cellHeight/2 - textH_all/2 + lastLineSpaceHeight*Math.cos(rtPI)/2;
}
else if(verticalAlign == "1"){//top
left = x + cellWidth/2 - textW_all/2 - lastLineSpaceHeight*Math.cos(rtPI)/2;
- top = y - (textH_all/2 - rh/2)+lastLineSpaceHeight*Math.sin(rtPI)/2;
+ top = y - (textH_all/2 - rh/2)+lastLineSpaceHeight*Math.cos(rtPI)/2;
}
else if(verticalAlign == "2"){//bottom
left = x + cellWidth/2 - (textW_all/2)-lastLineSpaceHeight*Math.cos(rtPI);
- top = y + cellHeight - rh/2 - textH_all/2 - lastLineSpaceHeight*Math.sin(rtPI);
+ top = y + cellHeight - rh/2 - textH_all/2 - lastLineSpaceHeight*Math.cos(rtPI);
}
}
else if(horizonAlign == "1"){//left
if(verticalAlign == "0"){//mid
left = x - rh*Math.sin(rtPI)/2 - lastLineSpaceHeight*Math.cos(rtPI)/2;
- top = y - textH_all + cellHeight/2 - rh*Math.cos(rtPI)/2 - lastLineSpaceHeight*Math.sin(rtPI)/2;
+ top = y - textH_all + cellHeight/2 - rh*Math.cos(rtPI)/2 - lastLineSpaceHeight*Math.cos(rtPI)/2;
}
else if(verticalAlign == "1"){//top
left = x;
@@ -1174,13 +1174,13 @@ function getCellTextInfo(cell , ctx, option){
}
else if(verticalAlign == "2"){//bottom
left = x - rh*Math.sin(rtPI) - lastLineSpaceHeight*Math.cos(rtPI);
- top = y - textH_all + cellHeight - rh*Math.cos(rtPI) - lastLineSpaceHeight*Math.sin(rtPI);
+ top = y - textH_all + cellHeight - rh*Math.cos(rtPI) - lastLineSpaceHeight*Math.cos(rtPI);
}
}
else if(horizonAlign == "2"){//right
if(verticalAlign == "0"){//mid
left = x + cellWidth - rw/2 - textW_all/2 - lastLineSpaceHeight*Math.cos(rtPI)/2;
- top = y + cellHeight/2 - textH_all/2 - lastLineSpaceHeight*Math.sin(rtPI)/2;
+ top = y + cellHeight/2 - textH_all/2 - lastLineSpaceHeight*Math.cos(rtPI)/2;
}
else if(verticalAlign == "1"){//top fixOneLineLeft
left = x + cellWidth - rw*Math.cos(rtPI);
@@ -1188,7 +1188,7 @@ function getCellTextInfo(cell , ctx, option){
}
else if(verticalAlign == "2"){//bottom
left = x + cellWidth - textW_all - lastLineSpaceHeight*Math.cos(rtPI) + fixOneLineLeft;
- top = y + cellHeight - lastLineSpaceHeight*Math.sin(rtPI);
+ top = y + cellHeight - lastLineSpaceHeight*Math.cos(rtPI);
}
}
@@ -1324,10 +1324,11 @@ function getCellTextInfo(cell , ctx, option){
textContent.rotate = rt;
rt = Math.abs(rt);
+ let rtPI = rt*Math.PI/180;
- let textWidthAll = textWidth * Math.cos(rt*Math.PI/180) + textHeight * Math.sin(rt*Math.PI/180);//consider text box wdith and line height
+ let textWidthAll = textWidth * Math.cos(rtPI) + textHeight * Math.sin(rtPI);//consider text box wdith and line height
- let textHeightAll = textWidth * Math.sin(rt*Math.PI/180) + textHeight * Math.cos(rt*Math.PI/180);//consider text box wdith and line height
+ let textHeightAll = textWidth * Math.sin(rtPI) + textHeight * Math.cos(rtPI);//consider text box wdith and line height
if(rt!=0){
textContent.textHeightAll = textHeightAll;
@@ -1345,20 +1346,20 @@ function getCellTextInfo(cell , ctx, option){
let width = textWidthAll, height = textHeightAll;
- let left = space_width + textHeight * Math.sin(rt*Math.PI/180)*isRotateUp; //默认为1,左对齐
+ let left = space_width + textHeight * Math.sin(rtPI)*isRotateUp; //默认为1,左对齐
if(horizonAlign == "0"){ //居中对齐
- left = cellWidth / 2 - (width / 2) + textHeight * Math.sin(rt*Math.PI/180)*isRotateUp;
+ left = cellWidth / 2 - (width / 2) + textHeight * Math.sin(rtPI)*isRotateUp;
}
else if(horizonAlign == "2"){ //右对齐
- left = (cellWidth - space_width) - width + textHeight * Math.sin(rt*Math.PI/180)*isRotateUp;
+ left = (cellWidth - space_width) - width + textHeight * Math.sin(rtPI)*isRotateUp;
}
- let top = (cellHeight - space_height) - height + measureText.actualBoundingBoxAscent + textWidth * Math.sin(rt*Math.PI/180)*isRotateUp; //默认为2,下对齐
+ let top = (cellHeight - space_height) - height + measureText.actualBoundingBoxAscent * Math.cos(rtPI) + textWidth * Math.sin(rtPI)*isRotateUp; //默认为2,下对齐
if(verticalAlign == "0"){ //居中对齐
- top = cellHeight / 2 - (height / 2) + measureText.actualBoundingBoxAscent + textWidth * Math.sin(rt*Math.PI/180)*isRotateUp;
+ top = cellHeight / 2 - (height / 2) + measureText.actualBoundingBoxAscent* Math.cos(rtPI) + textWidth * Math.sin(rtPI)*isRotateUp;
}
else if(verticalAlign == "1"){ //上对齐
- top = space_height + measureText.actualBoundingBoxAscent + textWidth * Math.sin(rt*Math.PI/180)*isRotateUp;
+ top = space_height + measureText.actualBoundingBoxAscent* Math.cos(rtPI) + textWidth * Math.sin(rtPI)*isRotateUp;
}
textContent.type = "plain";
diff --git a/src/index.html b/src/index.html
index 8f1ea47..899faf6 100644
--- a/src/index.html
+++ b/src/index.html
@@ -37,7 +37,7 @@
container: 'luckysheet',
lang: 'en',
allowEdit:true,
- forceCalculation:true,
+ forceCalculation:false,
plugins: ['chart'],
fontList:[
{
@@ -55,46 +55,46 @@
],
data:
[sheetCell,sheetFormula,sheetConditionFormat,sheetSparkline,sheetTable,sheetComment,sheetPivotTableData,sheetPivotTable,sheetChart,sheetPicture,sheetDataVerification]
- // [{"name":"Sheet1","config":{"columnlen":{"0":241},"rowlen":{"0":81}},"index":"1","status":"1","order":"0","luckysheet_select_save":[{"row":[0,0],"column":[4,4],"sheetIndex":1}],"zoomRatio":1,"showGridLines":"1","defaultColWidth":72,"defaultRowHeight":18,"celldata":[
- // {"r":0,"c":0,
- // "v":{
- // "ct":{
- // "fa":"General",
- // "t":"inlineStr",
- // "s":[
- // {
- // "ff":"Arial", //font family
- // "fc":"#fff000",//font color
- // "fs":12,//font size
- // "cl":0,//strike
- // "un":0,//underline
- // "bl":0,//blod
- // "it":0,//italic
- // v:"我在马路\r\n边捡到\r\n\r\n一分钱"
- // },
- // {
- // "ff":"Arial", //font family
- // "fc":"#ff0000",//font color
- // "fs":14,//font size
- // "cl":"1",//strike
- // "un":"1",//underline
- // "bl":"1",//blod
- // "it":"0",//italic
- // "ss":0,//0 none 1sup 2sub
- // v:"交给警\r\n察叔叔\r\n"
- // },
- // ]
- // },
- // "fs":11,
- // "ff":"等线",
- // "vt":0,
- // "tb":2,
- // "v":"",
- // "qp":1,
- // }
- // },
- // {"r":17,"c":2,"v":{"v":"Luckysheet","ct":{"fa":"General","t":"g"},"bg":null,"bl":0,"it":0,"ff":0,"fs":"11","fc":"rgb(51, 51, 51)","ht":1,"vt":1,"m":"Luckysheet"}}
- // ],"calcChain":[]}]
+ /*[{"name":"Sheet1","config":{"columnlen":{"0":241},"rowlen":{"0":81}},"index":"1","status":"1","order":"0","luckysheet_select_save":[{"row":[0,0],"column":[4,4],"sheetIndex":1}],"zoomRatio":1,"showGridLines":"1","defaultColWidth":72,"defaultRowHeight":18,"celldata":[
+ {"r":0,"c":0,
+ "v":{
+ "ct":{
+ "fa":"General",
+ "t":"inlineStr",
+ "s":[
+ {
+ "ff":"Arial", //font family
+ "fc":"#fff000",//font color
+ "fs":12,//font size
+ "cl":0,//strike
+ "un":0,//underline
+ "bl":0,//blod
+ "it":0,//italic
+ v:"我在马路\r\n边捡到\r\n\r\n一分钱"
+ },
+ {
+ "ff":"Arial", //font family
+ "fc":"#ff0000",//font color
+ "fs":14,//font size
+ "cl":"1",//strike
+ "un":"1",//underline
+ "bl":"1",//blod
+ "it":"0",//italic
+ "ss":0,//0 none 1sup 2sub
+ v:"交给警\r\n察叔叔\r\n"
+ },
+ ]
+ },
+ "fs":11,
+ "ff":"等线",
+ "vt":0,
+ "tb":2,
+ "v":"",
+ "qp":1,
+ }
+ },
+ {"r":17,"c":2,"v":{"v":"Luckysheet","ct":{"fa":"General","t":"g"},"bg":null,"bl":0,"it":0,"ff":0,"fs":"11","fc":"rgb(51, 51, 51)","ht":1,"vt":1,"m":"Luckysheet"}}
+ ],"calcChain":[]}]*/
/*
[{
diff --git a/src/locale/en.js b/src/locale/en.js
index 6fef624..765dd57 100644
--- a/src/locale/en.js
+++ b/src/locale/en.js
@@ -59,6 +59,7 @@ export default {
moreOptions:"More Options",
cellFormat:"Cell format config",
+ print:"Print",
},
alternatingColors:{
applyRange: 'Apply to range',
@@ -1160,6 +1161,11 @@ export default {
normalBtn:"Normal",
layoutBtn:"Page Layout",
pageBtn:"Page break preview",
+
+ menuItemPrint:"Print(Ctrl+P)",
+ menuItemAreas:"Print areas",
+ menuItemRows:"Print title rows",
+ menuItemColumns:"Print title columns",
}
};
\ No newline at end of file
diff --git a/src/locale/zh.js b/src/locale/zh.js
index 3d1ca22..d49810e 100644
--- a/src/locale/zh.js
+++ b/src/locale/zh.js
@@ -59,6 +59,7 @@ export default {
moreOptions:"更多选项",
cellFormat:"设置单元格格式",
+ print:"打印",
},
alternatingColors:{
applyRange: '应用范围',
@@ -1175,6 +1176,11 @@ export default {
normalBtn:"常规视图",
layoutBtn:"页面布局",
pageBtn:"分页预览",
+
+ menuItemPrint:"打印(Ctrl+P)",
+ menuItemAreas:"打印区域",
+ menuItemRows:"打印标题行",
+ menuItemColumns:"打印标题列",
}
};
From 1bf436a6e75e47eaa744579120323bede8941f3e Mon Sep 17 00:00:00 2001
From: wbfsa
Date: Mon, 12 Oct 2020 01:16:53 +0800
Subject: [PATCH 4/7] refactor(print develop): develop
---
src/controllers/constant.js | 6 +--
src/controllers/print.js | 83 ++++++++++++++++++++++++++++++++++++-
src/controllers/zoom.js | 19 ++++++++-
src/core.js | 3 ++
src/index.html | 12 ++++--
5 files changed, 114 insertions(+), 9 deletions(-)
diff --git a/src/controllers/constant.js b/src/controllers/constant.js
index fcbb23b..baf0077 100644
--- a/src/controllers/constant.js
+++ b/src/controllers/constant.js
@@ -230,9 +230,9 @@ const gridHTML = function(){
100%
diff --git a/src/controllers/print.js b/src/controllers/print.js
index e07d72e..e659280 100644
--- a/src/controllers/print.js
+++ b/src/controllers/print.js
@@ -1,4 +1,9 @@
-import { jsPDF } from "jspdf";
+import luckysheetConfigsetting from './luckysheetConfigsetting';
+import {zoomChange} from './zoom';
+import sheetmanage from './sheetmanage';
+import server from './server';
+import Store from '../store';
+// import { jsPDF } from "jspdf";
let ExcelPlaceholder = {
"[tabName]":"&A",
@@ -20,4 +25,78 @@ function getOneMmsPx (){
document.querySelector("body").appendChild(div);
let mm1 = document.getElementById("mm").getBoundingClientRect();
return mm1.width;
-}
\ No newline at end of file
+}
+
+export function viewChange(curType, preType){
+ let currentSheet = sheetmanage.getSheetByIndex();
+
+ if(currentSheet.config==null){
+ currentSheet.config = {};
+ }
+
+ if(currentSheet.config.sheetViewZoom==null){
+ currentSheet.config.sheetViewZoom = {};
+ }
+
+ let defaultZoom = 1, type="zoomScaleNormal";
+
+ if(curType=="viewNormal"){
+ type = "viewNormalZoomScale";
+ }
+ else if(curType=="viewLayout"){
+ type = "viewLayoutZoomScale";
+ }
+ else if(curType=="viewPage"){
+ type = "viewPageZoomScale";
+ defaultZoom = 0.6;
+ }
+
+ let curZoom = currentSheet.config.sheetViewZoom[type];
+ if(curZoom==null){
+ curZoom = defaultZoom;
+ }
+
+ currentSheet.config.curentsheetView = curType;
+
+ if (Store.clearjfundo) {
+ Store.jfredo.push({
+ "type": "viewChange",
+ "curType": curType,
+ "preType": preType,
+ "sheetIndex": Store.currentSheetIndex,
+ });
+ }
+
+ // Store.zoomRatio = curZoom;
+ // server.saveParam("all", Store.currentSheetIndex, curZoom, { "k": "zoomRatio" });
+ server.saveParam("cg", Store.currentSheetIndex, curType, { "k": "curentsheetView" });
+
+ zoomChange(curZoom);
+}
+
+function switchViewBtn($t){
+ let $viewList = $t.parent(), preType=$viewList.find("luckysheet-print-viewBtn-active").attr("type");
+ if($t.attr("type") == preType){
+ return;
+ }
+
+ let curType = $t.attr("type");
+ if(curType!=null){
+ viewChange(curType, preType);
+ }
+ else{
+ return;
+ }
+
+ $t.parent().find(".luckysheet-print-viewBtn").removeClass("luckysheet-print-viewBtn-active");
+ $t.addClass("luckysheet-print-viewBtn-active");
+}
+
+export function printInitial(){
+ let container = luckysheetConfigsetting.container;
+ let _this = this;
+ $("#"+container).find(".luckysheet-print-viewBtn").click(function(){
+ switchViewBtn($(this));
+ });
+
+}
\ No newline at end of file
diff --git a/src/controllers/zoom.js b/src/controllers/zoom.js
index a06df15..df50d37 100644
--- a/src/controllers/zoom.js
+++ b/src/controllers/zoom.js
@@ -1,6 +1,7 @@
import Store from '../store';
import locale from '../locale/locale';
import { replaceHtml } from '../utils/util';
+import sheetmanage from './sheetmanage';
import {changeSheetContainerSize} from './resize';
import { jfrefreshgrid_rhcw } from '../global/refresh';
import server from './server';
@@ -26,9 +27,25 @@ export function zoomChange(ratio){
}
Store.zoomRatio = ratio;
+
+ let currentSheet = sheetmanage.getSheetByIndex();
+ if(currentSheet.config==null){
+ currentSheet.config = {};
+ }
+
+ if(currentSheet.config.sheetViewZoom==null){
+ currentSheet.config.sheetViewZoom = {};
+ }
+
+ let type = currentSheet.config.curentsheetView;
+ if(type==null){
+ type = "viewNormal";
+ }
+ currentSheet.config.sheetViewZoom[type+"ZoomScale"] = ratio;
server.saveParam("all", Store.currentSheetIndex, Store.zoomRatio, { "k": "zoomRatio" });
-
+ server.saveParam("cg", Store.currentSheetIndex, currentSheet.config["sheetViewZoom"], { "k": "sheetViewZoom" });
+
zoomRefreshView();
}, 100);
diff --git a/src/core.js b/src/core.js
index ccbc140..3f9f945 100644
--- a/src/core.js
+++ b/src/core.js
@@ -30,6 +30,7 @@ import { getcellvalue, getdatabyselection } from './global/getdata';
import { setcellvalue } from './global/setdata';
import { selectHightlightShow } from './controllers/select';
import {zoomInitial} from './controllers/zoom';
+import {printInitial} from './controllers/print';
import method from './global/method';
import * as api from './global/api';
@@ -109,6 +110,7 @@ luckysheet.create = function (setting) {
luckysheetConfigsetting.defaultRowHeight = extendsetting.defaultRowHeight;
luckysheetConfigsetting.title = extendsetting.title;
+ luckysheetConfigsetting.container = extendsetting.container;
// Register plugins
initPlugins(extendsetting.plugins , extendsetting.data);
@@ -158,6 +160,7 @@ function initialWorkBook(){
keyboardInitial();//Keyboard operate initialization
orderByInitial();//menu bar orderby function initialization
zoomInitial();//zoom method initialization
+ printInitial();//print initialization
}
//获取所有表格数据
diff --git a/src/index.html b/src/index.html
index 899faf6..8d39c19 100644
--- a/src/index.html
+++ b/src/index.html
@@ -54,7 +54,7 @@
}
],
data:
- [sheetCell,sheetFormula,sheetConditionFormat,sheetSparkline,sheetTable,sheetComment,sheetPivotTableData,sheetPivotTable,sheetChart,sheetPicture,sheetDataVerification]
+ // [sheetCell,sheetFormula,sheetConditionFormat,sheetSparkline,sheetTable,sheetComment,sheetPivotTableData,sheetPivotTable,sheetChart,sheetPicture,sheetDataVerification]
/*[{"name":"Sheet1","config":{"columnlen":{"0":241},"rowlen":{"0":81}},"index":"1","status":"1","order":"0","luckysheet_select_save":[{"row":[0,0],"column":[4,4],"sheetIndex":1}],"zoomRatio":1,"showGridLines":"1","defaultColWidth":72,"defaultRowHeight":18,"celldata":[
{"r":0,"c":0,
"v":{
@@ -96,10 +96,16 @@
{"r":17,"c":2,"v":{"v":"Luckysheet","ct":{"fa":"General","t":"g"},"bg":null,"bl":0,"it":0,"ff":0,"fs":"11","fc":"rgb(51, 51, 51)","ht":1,"vt":1,"m":"Luckysheet"}}
],"calcChain":[]}]*/
- /*
+
[{
"name": "Cell",
"config": {
+ "curentsheetView":"viewNormal",//viewNormal, viewLayout, viewPage
+ "sheetViewZoom":{
+ "viewNormalZoomScale": 1 ,
+ "viewLayoutZoomScale":1 ,
+ "viewPageZoomScale":0.6,
+ },
"printoptions":{
unit:"mm",//mm(default), in, pt, cm, m,
PrintArea:"$A$1:$S$31",//print range
@@ -1776,7 +1782,7 @@
],
"scrollLeft": 0,
"scrollTop": 0
- }]*/
+ }]
})
})
From c43339ce9e6d27919b48ac9d1eaf446f250af8b9 Mon Sep 17 00:00:00 2001
From: joebordes
Date: Sun, 11 Oct 2020 23:55:42 +0200
Subject: [PATCH 5/7] i18n(EN) syntax changes for consistency, some errors and
grammarly suggestions
---
src/locale/en.js | 78 ++++++++++++++++++++++++------------------------
1 file changed, 39 insertions(+), 39 deletions(-)
diff --git a/src/locale/en.js b/src/locale/en.js
index 765dd57..c8e1d28 100644
--- a/src/locale/en.js
+++ b/src/locale/en.js
@@ -38,16 +38,16 @@ export default {
findAndReplace: 'Find and replace',
sum: 'SUM',
autoSum: 'Auto SUM',
- moreFunction: 'More function',
+ moreFunction: 'More functions',
conditionalFormat: 'Conditional format',
postil: 'Comment',
- pivotTable: 'PivotTable',
+ pivotTable: 'Pivot Table',
chart: 'Chart',
screenshot: 'Screenshot',
splitColumn: 'Split text',
insertImage: 'Insert image',
dataVerification: 'Data verification',
- protection:"Protection the sheet",
+ protection:"Protect the sheet",
clearText:"Clear color",
noColorSelectedText:"No color is selected",
@@ -56,7 +56,7 @@ export default {
toolLess:"Less",
toolClose:"Close",
toolMoreTip:"More features",
- moreOptions:"More Options",
+ moreOptions:"More options",
cellFormat:"Cell format config",
print:"Print",
@@ -94,7 +94,7 @@ export default {
end: 'ESC',
tipSelectRange:"Please select the range to be copied",
- tipNotMulti:"Cannot perform this operation on multiple selection range",
+ tipNotMulti:"Cannot perform this operation on multiple selection ranges",
},
format:{
moreCurrency: 'More currency formats',
@@ -379,7 +379,7 @@ export default {
merge:{
mergeAll:"Merge all",
mergeV:"Vertically",
- mergeH:"Horizentally",
+ mergeH:"Horizontally",
mergeCancel:"Unmerge",
overlappingError:"Cannot merge overlapping areas",
partiallyError:"Cannot perform this operation on partially merged cells",
@@ -401,15 +401,15 @@ export default {
rotation:{
"none":"None",
"angleup":"Tilt Up",
- "angledown":"Tilt down",
+ "angledown":"Tilt Down",
"vertical":"Stack Vertically",
"rotationUp":"Rotate Up",
- "rotationDown":"Rotate down"
+ "rotationDown":"Rotate Down"
},
freezen:{
default:"Freeze",
freezenRow:"First Row",
- freezenColumn:"First column",
+ freezenColumn:"First Column",
freezenRC:"Both",
freezenRowRange:"Freezen row range",
freezenColumnRange:"Freezen column range",
@@ -423,7 +423,7 @@ export default {
"desc":"Descending ",
"custom":"Custom sort",
- "hasTitle":"Data has header row",
+ "hasTitle":"Data has a header row",
"sortBy":"Sort by",
"addOthers":"Add another sort column",
"close":"close",
@@ -507,7 +507,7 @@ export default {
deleteSelected: 'Delete selected ',
hide: 'Hide',
hideSelected: 'Hide selected ',
- showHide: 'Show hide ',
+ showHide: 'Show hidden ',
to: 'Towards',
left: 'Left',
right: 'Right',
@@ -577,9 +577,9 @@ export default {
downLoadClose:"Close",
downLoadCopy:"Copy to clipboard",
- downLoadBtn:"DownLoad",
+ downLoadBtn:"Download",
browserNotTip:"not supported by IE browser!",
- rightclickTip:"Please right click \"copy\" on the picture",
+ rightclickTip:"Please right-click \"copy\" on the picture",
successTip:"Successfully (if pasting fails, please right-click on the image to \"copy image\")",
},
splitText:{
@@ -621,7 +621,7 @@ export default {
findAndReplace:{
find:"Find",
replace:"Replace",
- goto:"Goto",
+ goto:"Go to",
location:"Location",
formula:"Formula",
date:"Date",
@@ -664,7 +664,7 @@ export default {
locationConstant:"Constant",
locationFormula:"Formula",
locationDate:"Date",
- locationDigital:"number",
+ locationDigital:"Number",
locationString:"String",
locationBool:"Logical",
locationError:"Error",
@@ -673,7 +673,7 @@ export default {
locationRowSpan:"Row span",
locationColumnSpan:"Column span",
- locationTiplessTwoRow:"Please select at least two Row",
+ locationTiplessTwoRow:"Please select at least two rows",
locationTiplessTwoColumn:"Please select at least two columns",
locationTipNotFindCell:"Cell not found"
@@ -767,9 +767,9 @@ export default {
close: 'Close',
clearColorSelect: 'Clear color select',
sheet: 'Sheet',
- currentSheet: 'CurrentSheet',
- dataBar: 'dataBar',
- dataBarColor: 'dataBar color',
+ currentSheet: 'Current Sheet',
+ dataBar: 'data bar',
+ dataBarColor: 'data bar color',
gradientDataBar_1: 'Blue-white gradient data bar',
gradientDataBar_2: 'Green-white gradient data bar',
gradientDataBar_3: 'Red-white gradient data bar',
@@ -782,7 +782,7 @@ export default {
solidColorDataBar_4: 'Orange data bar',
solidColorDataBar_5: 'Light blue data bar',
solidColorDataBar_6: 'Purple data bar',
- colorGradation: 'colorGradation',
+ colorGradation: 'color gradation',
colorGradation_1: 'Green-yellow-red color gradation',
colorGradation_2: 'Red-yellow-green color gradation',
colorGradation_3: 'Green-white-red color gradation',
@@ -811,11 +811,11 @@ export default {
duplicateValue: 'Duplicate value',
uniqueValue: 'Unique value',
top: 'Top',
- top10: 'Top10',
- top10_percent: 'Top10%',
+ top10: 'Top 10',
+ top10_percent: 'Top 10%',
last: 'Last',
- last10: 'Last10',
- last10_percent: 'Last10%',
+ last10: 'Last 10',
+ last10_percent: 'Last 10%',
oneself: '',
above: 'Above',
aboveAverage: 'Above average',
@@ -878,7 +878,7 @@ export default {
},
dataVerification: {
cellRange: 'Cell range',
- selectCellRange: 'Click to select cell range',
+ selectCellRange: 'Click to select a cell range',
selectCellRange2: 'Please select a range of cells',
verificationCondition: 'Verification condition',
dropdown: 'drop-down list',
@@ -915,7 +915,7 @@ export default {
phoneNumber: 'Phone number',
remote: 'Automatic remote acquisition option',
prohibitInput: 'Prohibit input when input data is invalid',
- hintShow: 'Show prompt when cell is selected',
+ hintShow: 'Show prompt when the cell is selected',
deleteVerification: 'Delete verification',
tooltipInfo1: 'The drop-down list option cannot be empty',
tooltipInfo2: 'Checkbox content cannot be empty',
@@ -983,7 +983,7 @@ export default {
"Parser":"Parser",
"Statistical":"Statistical",
"Text":"Text",
- "dataMining":"DataMining",
+ "dataMining":"Data Mining",
"selectFunctionTitle":"Select a function",
"calculationResult":"Result",
@@ -997,7 +997,7 @@ export default {
"helpAbstract":"Abstract",
"execfunctionError":'Error in the formula',
- "execfunctionSelfError":'Formula cannot refer to its own cell',
+ "execfunctionSelfError":'The formula cannot refer to its own cell',
"execfunctionSelfErrorResult":'The formula cannot refer to its own cell, which will lead to inaccurate calculation results',
"allowRepeatText":"Repeat",
@@ -1021,7 +1021,7 @@ export default {
pasteMustKeybordAlertHTML:"Ctrl + C 进行复制
Ctrl + V 进行粘贴
Ctrl + X 进行剪切",
},
pivotTable:{
- title:"PivotTable",
+ title:"Pivot Table",
closePannel:"Close",
editRange:"Range",
tipPivotFieldSelected:"Select the fields",
@@ -1041,8 +1041,8 @@ export default {
valueStatisticsSUM:"Sum",
valueStatisticsCOUNT:"Count",
- valueStatisticsCOUNTA:"CountA",
- valueStatisticsCOUNTUNIQUE:"CountUnique",
+ valueStatisticsCOUNTA:"Count A",
+ valueStatisticsCOUNTUNIQUE:"Count Unique",
valueStatisticsAVERAGE:"Average",
valueStatisticsMAX:"Max",
valueStatisticsMIN:"Min",
@@ -1082,7 +1082,7 @@ export default {
onlyFormat:"Only format",
noFormat:"Not format",
day:"Day",
- workDay:"WorkDay",
+ workDay:"Work Day",
month:"Month",
year:"Year",
chineseNumber:"Chinese numbers",
@@ -1093,8 +1093,8 @@ export default {
},
protection:{
protectiontTitle:"Protection",
- enterPassword:"Enter a password(optional)",
- enterHintTitle:"Prompt when editing is prohibited(optional)",
+ enterPassword:"Enter a password (optional)",
+ enterHintTitle:"Prompt when editing is prohibited (optional)",
enterHint:"The cell or chart you are trying to change is in a protected worksheet. If you want to change it, please unprotect the worksheet. You may need to enter a password",
swichProtectionTip:"Protect the sheet and contents of locked cells",
authorityTitle:"Allow users of this sheet to:",
@@ -1110,7 +1110,7 @@ export default {
deleteRows:"Delete rows",
sort:"Sort",
filter:"Filter",
- usePivotTablereports:"Use PivotTable reports",
+ usePivotTablereports:"Use Pivot Table reports",
editObjects:"Edit objects",
editScenarios:"Edit scenarios",
@@ -1119,11 +1119,11 @@ export default {
allowRangeAddTitle:"Title",
allowRangeAddSqrf:"Reference",
- selectCellRange: 'Click to select cell range',
+ selectCellRange: 'Click to select a cell range',
selectCellRangeHolder:"Cell range",
allowRangeAddTitlePassword:"Password",
allowRangeAddTitleHint:"Prompt",
- allowRangeAddTitleHintTitle:"Prompt when password is set(optional)",
+ allowRangeAddTitleHintTitle:"Prompt when a password is set (optional)",
allowRangeAddtitleDefault:"Input range name",
rangeItemDblclick:"Double click to edit",
@@ -1149,7 +1149,7 @@ export default {
protection:"Protection",
locked:"Locked",
hidden:"Hidden",
- protectionTips:"To lock cells or hide formulas, protect the wordsheet. On the toolbar, Click Protect Sheet Button",
+ protectionTips:"To lock cells or hide formulas, protect the worksheet. On the toolbar, Click Protect Sheet Button",
tipsPart:"Partial checked",
tipsAll:"All checked",
@@ -1162,7 +1162,7 @@ export default {
layoutBtn:"Page Layout",
pageBtn:"Page break preview",
- menuItemPrint:"Print(Ctrl+P)",
+ menuItemPrint:"Print (Ctrl+P)",
menuItemAreas:"Print areas",
menuItemRows:"Print title rows",
menuItemColumns:"Print title columns",
From 2b3872ed17a71f462ed280d6934fd4f38e779e15 Mon Sep 17 00:00:00 2001
From: joebordes
Date: Sun, 11 Oct 2020 23:56:49 +0200
Subject: [PATCH 6/7] i18n(EN) eliminate duplicate key
---
src/locale/en.js | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/locale/en.js b/src/locale/en.js
index c8e1d28..e873d4b 100644
--- a/src/locale/en.js
+++ b/src/locale/en.js
@@ -443,8 +443,7 @@ export default {
},
filter:{
- "filter":"create filter",
- "clearFilter":"Cancel filter",
+ filter:"create filter",
sortByAsc:"Sort A-Z",
sortByDesc:"Sort Z-A",
From 01be435ac5674782551a6c76bb4569569f53a6e7 Mon Sep 17 00:00:00 2001
From: joebordes
Date: Mon, 12 Oct 2020 00:00:28 +0200
Subject: [PATCH 7/7] i18n(ES) first version
---
src/locale/es.js | 1168 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 1168 insertions(+)
create mode 100644 src/locale/es.js
diff --git a/src/locale/es.js b/src/locale/es.js
new file mode 100644
index 0000000..ae34a99
--- /dev/null
+++ b/src/locale/es.js
@@ -0,0 +1,1168 @@
+export default {
+ toolbar: {
+ undo: 'Deshacer',
+ redo: 'Rehacer',
+ paintFormat: 'Clonar formato',
+ currencyFormat: 'Formato de moneda',
+ percentageFormat: 'Formato de porcentaje',
+ numberDecrease: 'Menos decimales',
+ numberIncrease: 'Más decimales',
+ moreFormats:'Más formatos',
+ font: 'Fuente',
+ fontSize: 'Tamaño Fuente',
+ bold: 'Negrita (Ctrl+B)',
+ italic : 'Itálica (Ctrl+I)',
+ strikethrough: 'Tachar (Alt+Shift+5)',
+ textColor: 'Color texto',
+ chooseColor: 'elegir color',
+ resetColor: 'Reinicializar',
+ customColor: 'PERSONALIZADO',
+ alternatingColors: 'Colores alternos',
+ confirmColor: 'Vale',
+ cancelColor: 'Cancelar',
+ collapse: 'Recoger',
+ fillColor: 'Color de relleno',
+ border: 'Borde',
+ borderStyle: 'Estilo Borde',
+ mergeCell: 'Juntar celdas',
+ chooseMergeType: 'Elegir tipo de unión',
+ horizontalAlign: 'Alineación Horizontal',
+ verticalAlign: 'Alineación Vertical',
+ alignment: 'Alineación',
+ textWrap: 'Ajuste de texto',
+ textWrapMode: 'Modo de ajuste de texto',
+ textRotate: 'Rotar texto',
+ textRotateMode: 'Modo de rotar texto',
+ freezeTopRow: 'Fijar fila superior',
+ sortAndFilter: 'Ordenar y filtrar',
+ findAndReplace: 'Buscar y reemplazar',
+ sum: 'SUMA',
+ autoSum: 'SUMA automática',
+ moreFunction: 'Más funciones',
+ conditionalFormat: 'Formato condicional',
+ postil: 'Comentario',
+ pivotTable: 'Tabla Dinámica',
+ chart: 'Gráfica',
+ screenshot: 'Captura de pantalla',
+ splitColumn: 'Separar texto',
+ insertImage: 'Insertar imagen',
+ dataVerification: 'Verificación de datos',
+ protection:"Proteger la hoja",
+
+ clearText:"Limpiar color",
+ noColorSelectedText:"Ningún color seleccionado",
+
+ toolMore:"Más",
+ toolLess:"Menos",
+ toolClose:"Cerrar",
+ toolMoreTip:"Más funcionalidades",
+ moreOptions:"Más opciones",
+
+ cellFormat:"Configuración formato de celda",
+ print:"Imprimir",
+ },
+ alternatingColors:{
+ applyRange: 'Aplicar a rango',
+ selectRange: 'Seleccionar un rango de datos',
+ header: 'Cabecera',
+ footer: 'Pie',
+
+ errorInfo:"No se puede realizar esta operación en varias áreas de selección, selecciona una sola área y vuelve a intentarlo",
+ textTitle:"Estilo Formato",
+ custom:"PERSONALIZADO",
+ close:"cerrar",
+ selectionTextColor:"Haz clic para seleccionar el color del texto",
+ selectionCellColor:"Haz clic para seleccionar el color de la celda",
+ removeColor:"Eliminar colores alternos",
+ colorShow:"color",
+ currentColor:"Actual",
+
+ tipSelectRange:"Selecciona la gama de colores alternos",
+ errorNoRange:"No hay ningún rango seleccionado",
+ errorExistColors:"Los colores alternos ya existen y no se pueden editar",
+ },
+ button: {
+ confirm: 'Vale',
+ cancel: 'Cancelar',
+ close:"Cerrar",
+ update:"Actualizar",
+ delete:"Eliminar",
+ insert:"Insertar",
+ },
+ paint:{
+ start: 'Inicio clonar formato',
+ end: 'ESC',
+
+ tipSelectRange:"Selecciona el rango que quieres copiar",
+ tipNotMulti:"No se puede realizar esta operación en un rango de selección múltiple",
+ },
+ format:{
+ moreCurrency: 'Más formatos de moneda',
+ moreDateTime: 'Más formatos de fecha y hora',
+ moreNumber: 'Más formatos de número',
+
+ titleCurrency: 'Formatos de moneda',
+ decimalPlaces: 'Decimales',
+ titleDateTime: 'Formatos de fecha y hora',
+ titleNumber: 'Formatos de números'
+ },
+ info:{
+ detailUpdate: 'Nuevo abierto',
+ detailSave: 'Cache local restaurado',
+ row: '',
+ column: '',
+ loading:"Cargando",
+
+ copy:"Copiar",
+ return:"Salir",
+ rename:"Renombrar",
+ tips:"Renombrar Libro",
+ noName:"Hoja sin título",
+ wait:"esperando actualización",
+
+ add:"Añadir",
+ addLast:"más filas al final",
+ backTop:"Volver arriba",
+ pageInfo:'Total ${total},página ${totalPage},actual ${currentPage}',
+ nextPage:"Siguiente",
+
+ tipInputNumber:"Introduce el número",
+ tipInputNumberLimit:"El rango de aumento está limitado a 1-100",
+
+ tipRowHeightLimit:"La altura de la fila debe estar entre 0 ~ 545",
+ tipColumnWidthLimit:"El ancho de la columna debe estar entre 0 ~ 2038",
+ pageInfoFull:'Total ${total},página ${totalPage},Se muestran todos los datos',
+ },
+ currencyDetail:{
+ RMB:'RMB',
+ USdollar:'Dólar US',
+ EUR:'EUR',
+ GBP:'GBP',
+ HK:'HK',
+ JPY:'JPY',
+ AlbanianLek:'Albanian Lek',
+ AlgerianDinar:'Algerian Dinar',
+ Afghani:'Afghani',
+ ArgentinePeso:'Argentine Peso',
+ UnitedArabEmiratesDirham:'United Arab Emirates Dirham',
+ ArubanFlorin:'Aruban Florin',
+ OmaniRial:'Omani Rial',
+ Azerbaijanimanat:'Azerbaijani manat',
+ EgyptianPound:'Egyptian Pound',
+ EthiopianBirr:'Ethiopian Birr',
+ AngolaKwanza:'Angola Kwanza',
+ AustralianDollar:'Australian Dollar',
+ Patacas:'Patacas',
+ BarbadosDollar:'Barbados Dollar',
+ PapuaNewGuineaKina:'Papua New Guinea Kina',
+ BahamianDollar:'Bahamian Dollar',
+ PakistanRupee:'Pakistan Rupee',
+ ParaguayanGuarani:'Paraguayan Guarani',
+ BahrainiDinar:'Bahraini Dinar',
+ PanamanianBalboa:'Panamanian Balboa',
+ Brazilianreal:'Brazilian real',
+ Belarusianruble:'Belarusian ruble',
+ BermudianDollar:'Bermudian Dollar',
+ BulgarianLev:'Bulgarian Lev',
+ IcelandKrona:'Iceland Krona',
+ BosniaHerzegovinaConvertibleMark:'Bosnia-Herzegovina Convertible Mark',
+ PolishZloty:'Polish Zloty',
+ Boliviano:'Boliviano',
+ BelizeDollar:'Belize Dollar',
+ BotswanaPula:'Botswana Pula',
+ NotDannuzhamu:'Not Dannuzhamu',
+ BurundiFranc:'Burundi Franc',
+ NorthKoreanWon:'North Korean Won',
+ DanishKrone:'Danish Krone',
+ EastCaribbeanDollar:'East Caribbean Dollar',
+ DominicaPeso:'Dominica Peso',
+ RussianRuble:'Russian Ruble',
+ EritreanNakfa:'Eritrean Nakfa',
+ CFAfranc:'CFA franc',
+ PhilippinePeso:'Philippine Peso',
+ FijiDollar:'Fiji Dollar',
+ CapeVerdeEscudo:'Cape Verde Escudo',
+ FalklandIslandsPound:'Falkland Islands Pound',
+ GambianDalasi:'Gambian Dalasi',
+ Congolesefranc:'Congolese franc',
+ ColombianPeso:'Colombian Peso',
+ CostaRicanColon:'Costa Rican Colon',
+ CubanPeso:'Cuban Peso',
+ Cubanconvertiblepeso:'Cuban convertible peso',
+ GuyanaDollar:'Guyana Dollar',
+ KazakhstanTenge:'Kazakhstan Tenge',
+ Haitiangourde:'Haitian gourde',
+ won:'won',
+ NetherlandsAntillesGuilder:'Netherlands Antilles Guilder',
+ Honduraslempiras:'Honduras lempiras',
+ DjiboutiFranc:'Djibouti Franc',
+ KyrgyzstanSom:'Kyrgyzstan Som',
+ GuineaFranc:'Guinea Franc',
+ CanadianDollar:'Canadian Dollar',
+ GhanaianCedi:'Ghanaian Cedi',
+ Cambodianriel:'Cambodian riel',
+ CzechKoruna:'Czech Koruna',
+ ZimbabweDollar:'Zimbabwe Dollar',
+ QatariRiyal:'Qatari Riyal',
+ CaymanIslandsDollar:'Cayman Islands Dollar',
+ Comorianfranc:'Comorian franc',
+ KuwaitiDinar:'Kuwaiti Dinar',
+ CroatianKuna:'Croatian Kuna',
+ KenyanShilling:'Kenyan Shilling',
+ LesothoLoti:'Lesotho Loti',
+ LaoKip:'Lao Kip',
+ LebanesePound:'Lebanese Pound',
+ Lithuanianlitas:'Lithuanian litas',
+ LibyanDinar:'Libyan Dinar',
+ LiberianDollar:'Liberian Dollar',
+ RwandaFranc:'Rwanda Franc',
+ RomanianLeu:'Romanian Leu',
+ MalagasyAriary:'Malagasy Ariary',
+ MaldivianRufiyaa:'Maldivian Rufiyaa',
+ MalawiKwacha:'Malawi Kwacha',
+ MalaysianRinggit:'Malaysian Ringgit',
+ MacedoniawearingDinar:'Macedonia wearing Dinar',
+ MauritiusRupee:'Mauritius Rupee',
+ MauritanianOuguiya:'Mauritanian Ouguiya',
+ MongolianTugrik:'Mongolian Tugrik',
+ BangladeshiTaka:'Bangladeshi Taka',
+ PeruvianNuevoSol:'Peruvian Nuevo Sol',
+ MyanmarKyat:'Myanmar Kyat',
+ MoldovanLeu:'Moldovan Leu',
+ MoroccanDirham:'Moroccan Dirham',
+ MozambiqueMetical:'Mozambique Metical',
+ MexicanPeso:'Mexican Peso',
+ NamibianDollar:'Namibian Dollar',
+ SouthAfricanRand:'South African Rand',
+ SouthSudanesePound:'South Sudanese Pound',
+ NicaraguaCordoba:'Nicaragua Cordoba',
+ NepaleseRupee:'Nepalese Rupee',
+ NigerianNaira:'Nigerian Naira',
+ NorwegianKrone:'Norwegian Krone',
+ GeorgianLari:'Georgian Lari',
+ RMBOffshore:'RMB (Offshore)',
+ SwedishKrona:'Swedish Krona',
+ SwissFranc:'Swiss Franc',
+ SerbianDinar:'Serbian Dinar',
+ SierraLeone:'Sierra Leone',
+ SeychellesRupee:'Seychelles Rupee',
+ SaudiRiyal:'Saudi Riyal',
+ SaoTomeDobra:'Sao Tome Dobra',
+ SaintHelenapound:'Saint Helena pound',
+ SriLankaRupee:'Sri Lanka Rupee',
+ SwazilandLilangeni:'Swaziland Lilangeni',
+ SudanesePound:'Sudanese Pound',
+ Surinamesedollar:'Surinamese dollar',
+ SolomonIslandsDollar:'Solomon Islands Dollar',
+ SomaliShilling:'Somali Shilling',
+ TajikistanSomoni:'Tajikistan Somoni',
+ PacificFranc:'Pacific Franc',
+ ThaiBaht:'Thai Baht',
+ TanzanianShilling:'Tanzanian Shilling',
+ TonganPaanga:"Tongan Pa'anga",
+ TrinidadandTobagoDollar:'Trinidad and Tobago Dollar',
+ TunisianDinar:'Tunisian Dinar',
+ TurkishLira:'Turkish Lira',
+ VanuatuVatu:'Vanuatu Vatu',
+ GuatemalanQuetzal:'Guatemalan Quetzal',
+ CommissionBolivar:'Commission Bolivar',
+ BruneiDollar:'Brunei Dollar',
+ UgandanShilling:'Ugandan Shilling',
+ UkrainianHryvnia:'Ukrainian Hryvnia',
+ UruguayanPeso:'Uruguayan Peso',
+ Uzbekistansom:'Uzbekistan som',
+ WesternSamoaTala:'Western Samoa Tala',
+ SingaporeDollar:'Singapore Dollar',
+ NT:'NT',
+ NewZealandDollar:'New Zealand Dollar',
+ HungarianForint:'Hungarian Forint',
+ SyrianPound:'Syrian Pound',
+ JamaicanDollar:'Jamaican Dollar',
+ ArmenianDram:'Armenian Dram',
+ YemeniRial:'Yemeni Rial',
+ IraqiDinar:'Iraqi Dinar',
+ IranianRial:'Iranian Rial',
+ NewIsraeliShekel:'New Israeli Shekel',
+ IndianRupee:'Indian Rupee',
+ IndonesianRupiah:'Indonesian Rupiah',
+ JordanianDinar:'Jordanian Dinar',
+ VND:'VND',
+ ZambianKwacha:'Zambian Kwacha',
+ GibraltarPound:'Gibraltar Pound',
+ ChileanPeso:'Chilean Peso',
+ CFAFrancBEAC:'CFA Franc BEAC'
+ },
+ defaultFmt:[
+ { "text": 'Automático', "value": "General", "example": "" },
+ { "text": 'Texto', "value": "@", "example": "" },
+ { "text": "", "value": "partir", "example": "" },
+ { "text": 'Número', "value": "##0.00", "example": "1000.12" },
+ { "text": 'Porcentaje', "value": "#0.00%", "example": "12.21%" },
+ { "text": 'Científico', "value": "0.00E+00", "example": "1.01E+5" },
+ { "text": "", "value": "split", "example": "" },
+ { "text": 'Contabilidad', "value": "¥(0.00)", "example": "¥(1200.09)" },
+
+
+ { "text": 'Moneda', "value": "¥0.00", "example": "¥1200.09" },
+
+
+ { "text": "", "value": "partir", "example": "" },
+ { "text": 'Fecha', "value": "yyyy-MM-dd", "example": "2017-11-29" },
+ { "text": 'Hora', "value": "hh:mm AM/PM", "example": "3:00 PM" },
+ { "text": 'Hora 24H', "value": "hh:mm", "example": "15:00" },
+ { "text": 'Fecha Hora', "value": "yyyy-MM-dd hh:mm AM/PM", "example": "2017-11-29 3:00 PM" },
+ { "text": 'Fecha Hora 24 H', "value": "yyyy-MM-dd hh:mm", "example": "2017-11-29 15:00" },
+ { "text": "", "value": "partir", "example": "" },
+ { "text": 'Formatos personalizados', "value": "fmtOtherSelf", "example": "más" }
+ ],
+ dateFmtList:[
+ {
+ "name": "1930-08-05",
+ "value": "yyyy-MM-dd"
+ },
+ {
+ "name": "1930/8/5",
+ "value": "yyyy/MM/dd"
+ },
+ {
+ "name": "08-05",
+ "value": "MM-dd"
+ },
+ {
+ "name": "8-5",
+ "value": "M-d"
+ },
+ {
+ "name": "13:30:30",
+ "value": "h:mm:ss"
+ },
+ {
+ "name": "13:30",
+ "value": "h:mm"
+ },
+ {
+ "name": "PM 01:30",
+ "value": 'AM/PM hh:mm'
+ },
+ {
+ "name": "PM 1:30",
+ "value": 'AM/PM h:mm'
+ },
+ {
+ "name": "PM 1:30:30",
+ "value": 'AM/PM h:mm:ss'
+ },
+ {
+ "name": "08-05 PM 01:30",
+ "value": "MM-dd AM/PM hh:mm"
+ }
+ ],
+ fontFamily:{
+ MicrosoftYaHei:"YaHei",
+ },
+ fontarray: ["Times New Roman","Arial","Tahoma","Verdana"],
+ fontjson: {"times new roman":0,"arial":1,"tahoma":2,"verdana":3},
+ border:{
+ borderTop:'borderTop',
+ borderBottom:'borderBottom',
+ borderLeft:'borderLeft',
+ borderRight:'borderRight',
+ borderNone:'borderNone',
+ borderAll:'borderAll',
+ borderOutside:'borderOutside',
+ borderInside:'borderInside',
+ borderHorizontal:'borderHorizontal',
+ borderVertical:'borderVertical',
+ borderColor:'borderColor',
+ borderSize:'borderSize',
+ },
+ merge:{
+ mergeAll:"Unir todo",
+ mergeV:"Verticalmente",
+ mergeH:"Horizontalmente",
+ mergeCancel:"Separar",
+ overlappingError:"No se pueden fusionar áreas superpuestas",
+ partiallyError:"No se puede realizar esta operación en celdas parcialmente unidas",
+ },
+ align:{
+ left:"izquierda",
+ center:"centro",
+ right:"derecha",
+
+ top:"Arriba",
+ middle:"Centro",
+ bottom:"Abajo",
+ },
+ textWrap:{
+ "overflow":"Desbordar",
+ "wrap":"Ajustar",
+ "clip":"Cortar",
+ },
+ rotation:{
+ "none":"Ninguno",
+ "angleup":"Ladear Arriba",
+ "angledown":"Ladear Abajo",
+ "vertical":"Apilar Verticalmente",
+ "rotationUp":"Rotar Arriba",
+ "rotationDown":"Rotar Abajo"
+ },
+ freezen:{
+ default:"Fijar",
+ freezenRow:"Primera Fila",
+ freezenColumn:"Primera Columna",
+ freezenRC:"Ambas",
+ freezenRowRange:"Fijar rango filas",
+ freezenColumnRange:"Fijar rango columnas",
+ freezenRCRange:"Fijar ambos rangos",
+ freezenCancel:"Cancelar",
+
+ noSeletionError:"No hay rango para seleccionar",
+ },
+ sort:{
+ "asc":"Ascendente ",
+ "desc":"Descendente ",
+ "custom":"Ordenación personalizada",
+
+ "hasTitle":"Los datos tienen una fila de encabezado",
+ "sortBy":"Ordenar por",
+ "addOthers":"Añadir otra columna de ordenación",
+ "close":"cerrar",
+ "confirm":"ordenar",
+
+ "columnOperation":"Columna",
+ "secondaryTitle":"y después por",
+
+ "sortTitle":"Ordenar rango",
+
+ "sortRangeTitle":"Ordenar rango de",
+ "sortRangeTitleTo":"a",
+
+
+ "noRangeError":"No se puede realizar esta operación en múltiples áreas de selección, selecciona un solo rango e intenta nuevamente",
+ "mergeError":"Hay celdas combinadas en la selección, ¡esta operación no se puede realizar!",
+
+ },
+ filter:{
+ filter:"crear filtro",
+
+ sortByAsc:"Ordenar A-Z",
+ sortByDesc:"Ordenar Z-A",
+ filterByColor:"Filtrar por color",
+ filterByCondition:"Filtrar por condición",
+ filterByValues:"Filtrar por valores",
+
+ filiterInputNone:"Ninguno",
+
+ filiterInputTip:"Introduce valor de filtro",
+ filiterRangeStartTip:"Valor para fórmula",
+ filiterRangeEndTip:"Valor para fórmula",
+
+ filterValueByAllBtn:"Seleccionar todos",
+ filterValueByClearBtn:"Limpiar",
+ filterValueByInverseBtn:"Invertir",
+ filterValueByTip:"filtrar por valores",
+ filterConform:"Confirmar",
+ filterCancel:"Cancelar",
+ clearFilter:"Quitar filtro",
+
+ conditionNone:"Ninguno",
+ conditionCellIsNull: "Está vacío",
+ conditionCellNotNull: "No está vacío",
+ conditionCellTextContain: "El texto contiene",
+ conditionCellTextNotContain: "El texto no contiene",
+ conditionCellTextStart: "El texto empieza con",
+ conditionCellTextEnd: "El texto termina con",
+ conditionCellTextEqual: "El texto es exactamente",
+ conditionCellDateEqual: "La fecha es",
+ conditionCellDateBefore: "La fecha es anterior",
+ conditionCellDateAfter: "La fecha es posterior",
+ conditionCellGreater: "Mayor que",
+ conditionCellGreaterEqual: "Mayor o igual que",
+ conditionCellLess: "Menor que",
+ conditionCellLessEqual: "Menor o igual que",
+ conditionCellEqual: "Es igual a",
+ conditionCellNotEqual: "No es igual a",
+ conditionCellBetween: "Está entre",
+ conditionCellNotBetween: "No está entre",
+
+ filiterMoreDataTip:"¡Gran cantidad de datos! por favor espera",
+ filiterMonthText:"Mes",
+ filiterYearText:"Año",
+ filiterByColorTip:"Filtrar por color de celda",
+ filiterByTextColorTip:"Filtrar por color de fuente",
+ filterContainerOneColorTip:"Esta columna contiene solo un color",
+ filterDateFormatTip:"Format fecha",
+
+ valueBlank:"(Nulo)",
+ mergeError:"Hay celdas combinadas en la selección del filtro, ¡esta operación no se puede realizar!",
+ },
+ rightclick: {
+ copy: 'Copiar',
+ copyAs: 'Copiar como',
+ paste: 'Pegar',
+ insert: 'Insertar',
+ delete: 'Eliminar',
+ deleteCell: 'Eliminar celda',
+ deleteSelected: 'Eliminar seleccionado ',
+ hide: 'Esconder',
+ hideSelected: 'Esconder seleccionado ',
+ showHide: 'Mostrar ocultos ',
+ to: 'Hacia',
+ left: 'Izquierda',
+ right: 'Derecha',
+ top: 'Arriba',
+ bottom: 'Abajo',
+ moveLeft: 'Mover izquierda',
+ moveUp: 'Mover arriba',
+ add: 'Añadir',
+ row: 'Fila',
+ column: 'Columna',
+ width: 'Ancho',
+ height: 'Alto',
+ number: 'Número',
+ confirm: 'Confirmar',
+ orderAZ: 'Ordenar A-Z',
+ orderZA: 'Ordenar Z-A',
+ clearContent: 'Limpiar contenido',
+ matrix: 'Operación de Matriz',
+ sortSelection: 'Ordenar',
+ filterSelection: 'Filtrar',
+ chartGeneration: 'Crear gráfico',
+ firstLineTitle: 'título primera línea',
+ untitled: 'sin título',
+ array1: 'Matriz unidimensional',
+ array2: 'Matriz bidimensional',
+ array3: 'Matrices multidimensionales',
+ diagonal: 'Diagonal',
+ antiDiagonal: 'Anti-diagonal',
+ diagonalOffset: 'Desplazamiento Diagonal',
+ offset: 'Desplazamiento',
+ boolean: 'Booleana',
+ flip: 'Voltear',
+ upAndDown: 'Arriba y abajo',
+ leftAndRight: 'Izquierda y derecha',
+ clockwise: 'Sentido horario',
+ counterclockwise: 'Sentido anti-horario',
+ transpose: 'Transponer',
+ matrixCalculation: 'Cálculo de matrices',
+ plus: 'Suma',
+ minus: 'Resta',
+ multiply: 'Multiplicación',
+ divided: 'División',
+ power: 'Exponenciación',
+ root: 'Raíz Cuadrada',
+ log: 'Logaritmo',
+ delete0: 'Eliminar valores nulos en ambos extremos',
+ removeDuplicate: 'Eliminar valores duplicados',
+ byRow: 'Por fila',
+ byCol: 'Por columna',
+ generateNewMatrix: 'Generar nueva matriz',
+
+ },
+ comment:{
+ "insert":"Insertar",
+ "edit":"Editar",
+ "delete":"Elimiar",
+ "showOne":"Mostrar/Ocular",
+ "showAll":"Mostrar/Ocular Todo"
+ },
+ screenshot:{
+ screenshotTipNoSelection:"Selecciona el alcance de la captura de pantalla",
+ screenshotTipTitle:"¡Advertencia!",
+ screenshotTipHasMerge:"Esta operación no se puede realizar en celdas combinadas",
+ screenshotTipHasMulti:"Esta operación no se puede realizar en varios rangos de selección",
+ screenshotTipSuccess:"Exitoso",
+ screenshotImageName:"Captura de pantalla",
+
+ downLoadClose:"Cerrar",
+ downLoadCopy:"Copiar al portapapeles",
+ downLoadBtn:"Descargar",
+ browserNotTip:"no es compatible con el navegador IE.",
+ rightclickTip:"Haz clic con el botón derecho en la imagen y selecciona \"copiar\"",
+ successTip:"Con éxito (si falla el pegado, haz clic con el botón derecho en la imagen para \"copiar imagen\")",
+ },
+ splitText:{
+ splitDelimiters:"Delimitadores",
+ splitOther:"Otros",
+ splitContinueSymbol:"Los separadores consecutivos se tratan como uno solo",
+ splitDataPreview:"Previsualizar",
+ splitTextTitle:"Partir texto",
+ splitConfirmToExe:"Ya hay datos aquí, ¿quieres reemplazarlos?",
+
+ tipNoMulti: "No se puede realizar esta operación en varias áreas de selección, selecciona una única área y vuelve a intentarlo",
+ tipNoMultiColumn: "Solo se puede convertir una columna de datos a la vez. El área seleccionado puede tener varias filas, pero no varias columnas. Vuelve a intentarlo después de seleccionar un solo rango de columnas",
+ },
+ imageText:{
+ imageSetting: 'Configuración de imagen',
+ close: 'Cerrar',
+ conventional: 'Convencional',
+ moveCell1: 'Mover y cambiar el tamaño de las celdas',
+ moveCell2: 'Mover y no cambiar el tamaño de la celda',
+ moveCell3: 'No mover ni cambiar el tamaño de la celda',
+ fixedPos: 'Posición fija',
+ border: 'Borde',
+ width: 'Ancho',
+ radius: 'Radio',
+ style: 'Estilo',
+ solid: 'Sólido',
+ dashed: 'Discontinua',
+ dotted: 'Punteado',
+ double: 'Doble',
+ color: 'Color',
+ },
+ punctuation:{
+ "tab":"Tabulación",
+ "semicolon":"punto y coma",
+ "comma":"coma",
+ "space":"espacio",
+
+ },
+ findAndReplace:{
+ find:"Encontrar",
+ replace:"Reemplazar",
+ goto:"Ir a",
+ location:"Ubicación",
+ formula:"Fórmula",
+ date:"Fecha",
+ number:"Número",
+ string:"Texto",
+ error:"Error",
+ condition:"Condición",
+ rowSpan:"Intervalo de filas",
+ columnSpan:"Intervalo de columnas",
+ locationExample:"Ubicación",
+ lessTwoRowTip:"Selecciona al menos dos filas",
+ lessTwoColumnTip:"Selecciona al menos dos columnas",
+
+ findTextbox:"Encontrar Contenido",
+ replaceTextbox:"Reemplazar Contenido",
+
+ regexTextbox:"Expresión Regular",
+ wholeTextbox:"Palabra entera",
+ distinguishTextbox:"Distingue mayúsculas y minúsculas",
+
+ allReplaceBtn:"Reemplazar Todo",
+ replaceBtn:"Reemplazar",
+ allFindBtn:"Encontrar Todo",
+ findBtn:"Encontrar siguiente",
+
+ noFindTip:"No se encontró el contenido",
+ modeTip:"Esta operación no está disponible en este modo",
+
+ searchTargetSheet:"Hoja",
+ searchTargetCell:"Celda",
+ searchTargetValue:"Valor",
+
+ searchInputTip:"Introduce el contenido de la búsqueda",
+
+ noReplceTip:"No hay nada que reemplazar",
+ noMatchTip:"No se encontraron coincidencias",
+
+ successTip:"${xlength} elementos encontrados",
+
+ locationConstant:"Constante",
+ locationFormula:"Fórmula",
+ locationDate:"Fecha",
+ locationDigital:"Número",
+ locationString:"Texto",
+ locationBool:"Lógicos",
+ locationError:"Error",
+ locationNull:"Nulo",
+ locationCondition:"Formato condicional",
+ locationRowSpan:"Intervalo fila",
+ locationColumnSpan:"Intervalo columna",
+
+ locationTiplessTwoRow:"Selecciona al menos dos filas",
+ locationTiplessTwoColumn:"Selecciona al menos dos columnas",
+ locationTipNotFindCell:"Celda no encontrada"
+ },
+ sheetconfig: {
+ delete: 'Eliminar',
+ copy: 'Copiar',
+ rename: 'Renombrar',
+ changeColor: 'Cambiar color',
+ hide: 'Ocultar',
+ unhide: 'Mostrar',
+ moveLeft: 'Mover izquierda',
+ moveRight: 'Mover derecja',
+ resetColor: 'Reiniciar color',
+ cancelText: 'Cancelar',
+ chooseText: 'Confirmar color',
+
+ tipNameRepeat:"¡El nombre de la página de la pestaña no se puede repetir! Revísalo",
+ noMoreSheet:"El libro de trabajo contiene al menos una hoja de trabajo visual. Para eliminar la hoja de trabajo seleccionada, inserta una nueva hoja de trabajo o muestra una hoja de trabajo oculta",
+ confirmDelete:"¿Estás seguro de eliminar",
+ redoDelete:"Se puede deshacer con Ctrl+Z",
+ noHide:"No se puede ocultar, al menos conserva una etiqueta de hoja",
+ chartEditNoOpt:"¡Esta operación no está permitida en el modo de edición de gráficos!",
+ },
+ conditionformat: {
+ conditionformat_greaterThan: 'Conditionformat-GreaterThan',
+ conditionformat_greaterThan_title: 'Dar formato a celdas mayores que',
+ conditionformat_lessThan: 'Conditionformat-LessThan',
+ conditionformat_lessThan_title: 'Dar formato a celdas más pequeñas que',
+ conditionformat_betweenness: 'Conditionformat-Betweenness',
+ conditionformat_betweenness_title: 'Dar formato a celdas con valores entre',
+ conditionformat_equal: 'Conditionformat-Equal',
+ conditionformat_equal_title: 'Dar formato a celdas iguales a',
+ conditionformat_textContains: 'Conditionformat-TextContains',
+ conditionformat_textContains_title: 'Dar formato a las celdas que contienen el siguiente texto',
+ conditionformat_occurrenceDate: 'Conditionformat-OccurrenceDate',
+ conditionformat_occurrenceDate_title: 'Dar formato a celdas que contienen las siguientes fechas',
+ conditionformat_duplicateValue: 'Conditionformat-DuplicateValue',
+ conditionformat_duplicateValue_title: 'Dar formato a celdas que contienen los siguientes tipos de valores',
+ conditionformat_top10: 'Conditionformat-Top10',
+ conditionformat_top10_percent: 'Conditionformat-Top10%',
+ conditionformat_top10_title: 'Formatea las celdas con el valor más alto',
+ conditionformat_last10: 'Conditionformat-Last10',
+ conditionformat_last10_percent: 'Conditionformat-Last10%',
+ conditionformat_last10_title: 'Formatea las celdas con el valor más pequeño',
+ conditionformat_AboveAverage: 'Conditionformat-AboveAverage',
+ conditionformat_AboveAverage_title: 'Dar formato a celdas por encima del promedio',
+ conditionformat_SubAverage: 'Conditionformat-SubAverage',
+ conditionformat_SubAverage_title: 'Dar formato a celdas por debajo del promedio',
+ rule: 'Regla',
+ newRule: 'Nueva regla',
+ editRule: 'Editar regla',
+ deleteRule: 'Eliminar regla',
+ deleteCellRule: 'Eliminar regla de celda',
+ deleteSheetRule: 'Eliminar regla de hoja',
+ manageRules: 'Reglas administración',
+ showRules: 'Muestra sus reglas de formato',
+ highlightCellRules: 'Resaltar reglas de celda',
+ itemSelectionRules: 'Reglas de selección de elementos',
+ conditionformatManageRules: 'Administrador de reglas de formato condicional',
+ format: 'Formatear',
+ setFormat: 'Establecer formato',
+ setAs: 'Establecer como',
+ setAsByArea: 'Para el área seleccionada, establecer',
+ applyRange: 'Aplicar rango',
+ selectRange: 'Seleccionar rango de aplicación',
+ selectRange_percent: 'Porcentaje del rango seleccionado',
+ selectRange_average: 'Valor promedio del rango seleccionado',
+ selectRange_value: 'Valor en el rango seleccionado',
+ pleaseSelectRange: 'Selecciona el rango de aplicación',
+ selectDataRange: 'Seleccionar rango de datos',
+ selectCell: 'seleccionar celda',
+ pleaseSelectCell: 'Selecciona una celda',
+ pleaseSelectADate: 'Selecciona una fecha',
+ pleaseEnterInteger: 'Introduzca un número entero entre 1 y 1000',
+ onlySingleCell: 'Solo se puede hacer referencia a una sola celda',
+ conditionValueCanOnly: 'El valor de la condición solo puede ser un número o una sola celda',
+ ruleTypeItem1: 'Aplicar formato a todas las celdas según sus valores respectivos',
+ ruleTypeItem2: 'Solo formatear celdas que contengan',
+ ruleTypeItem2_title: 'Solo para celdas que cumplan las siguientes condiciones',
+ ruleTypeItem3: 'Aplicar formato solo a los números superiores o inferiores',
+ ruleTypeItem3_title: 'Es el valor en la siguiente clasificación',
+ ruleTypeItem4: 'Aplicar formato solo a los valores superiores o inferiores al promedio',
+ ruleTypeItem4_title: 'Es un valor que cumple las siguientes condiciones',
+ ruleTypeItem5: 'Aplicar formato solo a valores únicos o repetidos',
+ textColor: 'Color Texto',
+ cellColor: 'Color Celda',
+ confirm: 'Confirma',
+ confirmColor: 'Confirma color',
+ cancel: 'Cancela',
+ close: 'Cierra',
+ clearColorSelect: 'Limpiar selección de color',
+ sheet: 'Hoja',
+ currentSheet: 'Hoja actual',
+ dataBar: 'Barra de datos',
+ dataBarColor: 'Color barra de datos',
+ gradientDataBar_1: 'Barra de datos de degradado azul-blanco',
+ gradientDataBar_2: 'Barra de datos de degradado verde-blanco',
+ gradientDataBar_3: 'Barra de datos de degradado rojo-blanco',
+ gradientDataBar_4: 'Rayas de degradado de color naranja-blanco',
+ gradientDataBar_5: 'Rayas de degradado azul claro-blancas',
+ gradientDataBar_6: 'Barra de datos de degradado púrpura-blanco',
+ solidColorDataBar_1: 'Barra de datos azul',
+ solidColorDataBar_2: 'Barra de datos verde',
+ solidColorDataBar_3: 'Barra de datos roja',
+ solidColorDataBar_4: 'Barra de datos naranja',
+ solidColorDataBar_5: 'Barra de datos azul claro',
+ solidColorDataBar_6: 'Barra de datos púrpura',
+ colorGradation: 'Degradado de color',
+ colorGradation_1: 'Gradación de color verde-amarillo-rojo',
+ colorGradation_2: 'Gradación de color rojo-amarillo-verde',
+ colorGradation_3: 'Gradación de color verde-blanco-rojo',
+ colorGradation_4: 'Gradación de color rojo-blanco-verde',
+ colorGradation_5: 'Gradación de color azul-blanco-rojo',
+ colorGradation_6: 'Gradación de color rojo-blanco-azul',
+ colorGradation_7: 'Gradación de color blanco-rojo',
+ colorGradation_8: 'Gradación de color rojo-blanco',
+ colorGradation_9: 'Gradación de color verde-blanco',
+ colorGradation_10: 'Gradación de color blanco-verde',
+ colorGradation_11: 'Gradación de color verde-amarillo',
+ colorGradation_12: 'Gradación de color amarillo-verde',
+ icons: 'iconos',
+ pleaseSelectIcon: 'Haz clic para seleccionar un grupo de iconos:',
+ cellValue: 'Valor de celda',
+ specificText: 'Texto específico',
+ occurrence: 'Fecha',
+ greaterThan: 'Mayor que',
+ lessThan: 'Menor que',
+ between: 'Entre',
+ equal: 'Igual',
+ in: 'En',
+ between2: '',
+ contain: 'Contiene',
+ textContains: 'Texto contiene',
+ duplicateValue: 'Valor duplicado',
+ uniqueValue: 'Valor Unico',
+ top: 'Mejor',
+ top10: '10 mejores',
+ top10_percent: '10% mejores',
+ last: 'Ultimo',
+ last10: 'Ultimos 10',
+ last10_percent: 'Ultimos 10%',
+ oneself: '',
+ above: 'Encima',
+ aboveAverage: 'Encima media',
+ below: 'Debajo',
+ belowAverage: 'Debajo media',
+ all: 'Todos',
+ yesterday: 'Año a fecha',
+ today: 'Hoy',
+ tomorrow: 'Mañana',
+ lastWeek: 'Ultima semana',
+ thisWeek: 'Esta semana',
+ lastMonth: 'Ultimo mes',
+ thisMonth: 'Este mes',
+ lastYear: 'Ultimo año',
+ thisYear: 'Este año',
+ last7days: 'Ultimos 7 días',
+ last30days: 'Ultimos 30 días',
+ next7days: 'Siguientes 7 días',
+ next30days: 'Siguientes 30 días',
+ next60days: 'Siguientes 60 días',
+ chooseRuleType: 'Elige el tipo de regla',
+ editRuleDescription: 'Editar descripción de regla',
+ newFormatRule: 'Nueva regla de formato',
+ editFormatRule: 'Editar regla de formato',
+ formatStyle: 'Estilo',
+ fillType: 'Rellenar',
+ color: 'Color',
+ twocolor: 'Dos colores',
+ tricolor: 'Tricolor',
+ multicolor: 'Multi color',
+ grayColor: 'Color gris',
+ gradient: 'Gradiente',
+ solid: 'Sólido',
+ maxValue: 'Valor máximo',
+ medianValue: 'Valor mediano',
+ minValue: 'Valor mínimo',
+ direction: 'Dirección',
+ threeWayArrow: 'Flecha de tres direcciones',
+ fourWayArrow: 'Flecha de cuatro direcciones',
+ fiveWayArrow: 'Flecha de cinco direcciones',
+ threeTriangles: 'Tres triángulos',
+ shape: 'Forma',
+ threeColorTrafficLight: 'Semáforo de tres colores',
+ fourColorTrafficLight: 'Semáforo de cuatro colores',
+ threeSigns: 'Tres signos',
+ greenRedBlackGradient: 'Gradiente verde-rojo-negro',
+ rimless: 'Sin aros',
+ bordered: 'Bordeado',
+ mark: 'Marcar',
+ threeSymbols: 'Tres símbolos',
+ tricolorFlag: 'Bandera tricolor',
+ circled: 'Rodeado',
+ noCircle: 'Sin círculo',
+ grade: 'Grado',
+ grade4: '4 Grado',
+ grade5: '5 Grado',
+ threeStars: '3 Estrellas',
+ fiveQuadrantDiagram: 'Diagrama de cinco cuadrantes',
+ fiveBoxes: '5 Cajas',
+ },
+ dataVerification: {
+ cellRange: 'Rango celdas',
+ selectCellRange: 'Haz clic para seleccionar un rango de celdas',
+ selectCellRange2: 'Selecciona un rango de celdas',
+ verificationCondition: 'Condición de verificación',
+ dropdown: 'lista desplegable',
+ checkbox: 'Casilla de verificación',
+ number: 'Número',
+ number_integer: 'Número entero',
+ number_decimal: 'Número decimal',
+ text_content: 'Contenido texto',
+ text_length: 'Longitud texto',
+ date: 'Fecha',
+ validity: 'Eficacia',
+ placeholder1: 'Introduce las opciones, separadas por comas, como 1,2,3,4,5',
+ placeholder2: 'Introduce contenido',
+ placeholder3: 'Valor numérico, como 10',
+ placeholder4: 'Introduce el texto especificado',
+ placeholder5: 'Introduce el mensaje que se muestra cuando se selecciona la celda',
+ selected: 'Seleccionado',
+ notSelected: 'No seleccionado',
+ between: 'Entre',
+ notBetween: 'No entre',
+ equal: 'Iqual',
+ notEqualTo: 'No iqual a',
+ moreThanThe: 'Más que el',
+ lessThan: 'Menos que',
+ greaterOrEqualTo: 'Mayor o igual a',
+ lessThanOrEqualTo: 'Menor o igual a',
+ include: 'Incluir',
+ exclude: 'Excluir',
+ earlierThan: 'Antes de',
+ noEarlierThan: 'No antes de',
+ laterThan: 'Después de',
+ noLaterThan: 'No después de',
+ identificationNumber: 'Número de identificación',
+ phoneNumber: 'Número de teléfono',
+ remote: 'Opción de adquisición remota automática',
+ prohibitInput: 'Prohibir la entrada cuando los datos de entrada no son válidos',
+ hintShow: 'Mostrar mensaje cuando se selecciona la celda',
+ deleteVerification: 'Eliminar verificación',
+ tooltipInfo1: 'La opción de la lista desplegable no puede estar vacía',
+ tooltipInfo2: 'El contenido de la casilla de verificación no puede estar vacío',
+ tooltipInfo3: 'El valor ingresado no es un tipo numérico',
+ tooltipInfo4: 'El segundo valor no puede ser menor que el primero',
+ tooltipInfo5: 'El contenido del texto no puede estar vacío',
+ tooltipInfo6: 'El valor ingresado no es una fecha',
+ tooltipInfo7: 'La segunda fecha no puede ser menor que la primera',
+ },
+ formula:{
+ sum:"Suma",
+ average:"Media",
+ count:"Contar",
+ max:"Máx",
+ min:"Mín",
+ ifGenerate:"Generador de fórmula SI",
+ find:"Aprender más",
+
+ tipNotBelongToIf: "¡Esta función de celda no pertenece a la fórmula SI!",
+ tipSelectCell: "Selecciona la celda para insertar la función",
+
+ ifGenCompareValueTitle:"Valor de comparación",
+ ifGenSelectCellTitle:"Haz click para seleccionar una celda",
+ ifGenRangeTitle:"Rango",
+ ifGenRangeTo:"a",
+ ifGenRangeEvaluate:"Evaluar rango",
+ ifGenSelectRangeTitle:"Haz click para seleccionar rango",
+ ifGenCutWay:"Forma particionado",
+ ifGenCutSame:"Mismo valor de particionado",
+ ifGenCutNpiece:"Particionar por N",
+ ifGenCutCustom:"Personalizado",
+ ifGenCutConfirm:"Confirma",
+
+ ifGenTipSelectCell:"Selecciona celdas",
+ ifGenTipSelectCellPlace:"Por favor selecciona celdas",
+
+ ifGenTipSelectRange:"Selecciona rango",
+ ifGenTipSelectRangePlace:"Por favor selecciona rango",
+
+ ifGenTipNotNullValue:"El valor de comparación no puede ser vacío!",
+ ifGenTipLableTitile:"Etiqueta",
+ ifGenTipRangeNotforNull:"El rango no puede quedar vacío!",
+ ifGenTipCutValueNotforNull:"El valor de partición no puede ser vacío!",
+ ifGenTipNotGenCondition:"No hay condiciones disponibles para la generación!",
+ },
+ formulaMore:{
+ valueTitle:"Valor",
+ tipSelectDataRange:"Selecciona rango de datos",
+ tipDataRangeTile:"Rango de datos",
+ findFunctionTitle:"Función de búsqueda",
+ tipInputFunctionName:"Nombre o breve descripción de la función",
+
+ "Array":"Vector",
+ "Database":"Base de datos",
+ "Date":"Fecha",
+ "Engineering":"Ingeniería",
+ "Filter":"Filtro",
+ "Financial":"Financiero",
+ "luckysheet":"Luckysheet",
+ "other":"Otro",
+ "Logical":"Lógica",
+ "Lookup":"Búsqueda",
+ "Math":"Matemático",
+ "Operator":"Operadores",
+ "Parser":"Compilador",
+ "Statistical":"Estadístico",
+ "Text":"Texto",
+ "dataMining":"Minería de datos",
+
+ "selectFunctionTitle":"Selecciona una función",
+ "calculationResult":"Resultado",
+
+ tipSuccessText:"Exito",
+ tipParamErrorText:"Parámetro erróneo",
+
+ "helpClose":"Cerrar",
+ "helpCollapse":"Recoger",
+ "helpExample":"Ejemplo",
+ "helpAbstract":"Resumen",
+
+ "execfunctionError":'Error en la fórmula',
+ "execfunctionSelfError":'La fórmula no puede hacer referencia a su propia celda',
+ "execfunctionSelfErrorResult":'La fórmula no puede hacer referencia a su propia celda, lo que dará lugar a resultados de cálculo inexactos',
+
+ "allowRepeatText":"Repetir",
+ "allowOptionText":"Opción",
+
+ "selectCategory":"O selecciona una categoría",
+ },
+ drag:{
+ noMerge: "No se puede realizar esta operación en celdas combinadas",
+ afectarPivot: "¡Este cambio no se puede realizar en la celda seleccionada porque afectará a la tabla dinámica!",
+ noMulti: "No se puede realizar esta operación en varias áreas de selección, selecciona una sola área",
+ noPaste: "No se puede pegar este contenido aquí, selecciona una celda en el área de pegado e intenta pegar nuevamente",
+ noPartMerge: "No se puede realizar esta operación en celdas parcialmente fusionadas",
+
+ inputCorrect:"Introduce el valor correcto",
+ notLessOne:"El número de filas y columnas no puede ser inferior a 1",
+ offsetColumnLessZero:"¡La columna de desplazamiento no puede ser negativa!",
+
+ pasteMustKeybordAlert:"在表格中进行复制粘贴: Ctrl + C 进行复制, Ctrl + V 进行粘贴, Ctrl + X 进行剪切",
+ pasteMustKeybordAlertHTMLTitle:"在表格中进行复制粘贴",
+ pasteMustKeybordAlertHTML:"Ctrl + C 进行复制
Ctrl + V 进行粘贴
Ctrl + X 进行剪切",
+ },
+ pivotTable:{
+ title:"Tabla Dinámica",
+ closePannel:"Cerrar",
+ editRange:"Rango",
+ tipPivotFieldSelected:"Selecciona los campos",
+ tipClearSelectedField:"Limpiar todos los campos",
+ btnClearSelectedField:"Limpiar",
+ btnFilter:"Filtrar",
+ titleRow:"Fila",
+ titleColumn:"Columna",
+ titleValue:"Valor",
+ tipShowColumn: "Los campos de estadísticas se muestran como columnas",
+ tipShowRow: "Los campos de estadísticas se muestran como filas",
+
+ titleSelectionDataRange:"Selecciona rango",
+ titleDataRange:"Rango de datos",
+
+ valueSum:"SUMA",
+
+ valueStatisticsSUM:"Suma",
+ valueStatisticsCOUNT:"Contar",
+ valueStatisticsCOUNTA:"Contar A",
+ valueStatisticsCOUNTUNIQUE:"Contar Distintos",
+ valueStatisticsAVERAGE:"Media",
+ valueStatisticsMAX:"Máx",
+ valueStatisticsMIN:"Mín",
+ valueStatisticsMEDIAN:"Mediana",
+ valueStatisticsPRODUCT:"Producto",
+ valueStatisticsSTDEV:"Desviación Estándar",
+
+ valueStatisticsSTDEVP:"Stdevp",
+ valueStatisticslet:"Varianza",
+ valueStatisticsVARP:"VarP",
+
+ errorNotAllowEdit: "¡Esta operación está prohibida en el modo sin edición!",
+ errorNotAllowMulti: "No se puede realizar esta operación en varias áreas de selección, selecciona un solo rango y vuelve a intentarlo",
+ errorSelectRange: "Seleccione el rango de la nueva tabla dinámica",
+ errorIsDamage: "¡Los datos de origen de esta tabla dinámica están dañados!",
+ errorNotAllowPivotData: "¡No se puede seleccionar la tabla dinámica como datos de origen!",
+ errorSelectionRange: "¡La selección falló, rango de entrada incorrecto!",
+ errorIncreaseRange: "¡Por favor, expande el rango seleccionado!",
+
+ titleAddColumn:"Añadir columna a la tabla dinámica",
+ titleMoveColumn:"Muever la columna a la celda en blanco de abajo",
+ titleClearColumnFilter:"Quitar el filtro de esta columna",
+ titleFilterColumn:"Filtro",
+
+ titleSort:"Ordenar",
+ titleNoSort:"No Ordenar",
+ titleSortAsc:"ASC",
+ titleSortDesc:"DESC",
+ titleSortBy:"Ordenar por",
+ titleShowSum:"Mostrar total",
+ titleStasticTrue:"Sí",
+ titleStasticFalse:"No",
+ },
+ dropCell:{
+ copyCell:"Copiar",
+ sequence:"Secuencia",
+ onlyFormat:"Solo formato",
+ noFormat:"Sin formato",
+ day:"Día",
+ workDay:"Día Laborable",
+ month:"Mes",
+ year:"Año",
+ chineseNumber:"Números Chinos",
+ },
+ imageCtrl:{
+ borderTile:"Color de borde de imagen",
+ borderCur:"Color",
+ },
+ protection:{
+ protectiontTitle:"Protección",
+ enterPassword:"Introduce una contraseña (opcional)",
+ enterHintTitle:"Preguntar cuando la edición está prohibida (opcional)",
+ enterHint:"La celda o el gráfico que estás intentando cambiar se encuentra en una hoja de trabajo protegida. Si quieres cambiarlo, desprotege la hoja de trabajo. Es posible que tengas que ingresar una contraseña",
+ swichProtectionTip:"Protege la hoja y el contenido de las celdas bloqueadas",
+ authorityTitle:"Permitir a los usuarios de esta hoja:",
+ selectLockedCells:"Selecciona celdas bloqueadas",
+ selectunLockedCells:"Selecciona celdas desbloqueadas",
+ formatCells:"Formatear celdas",
+ formatColumns:"Formatear columnas",
+ formatRows:"Formatear filas",
+ insertColumns:"Insertar columnas",
+ insertRows:"Insertar filas",
+ insertHyperlinks:"Insertar enlaces",
+ deleteColumns:"Eliminar columnas",
+ deleteRows:"Eliminar filas",
+ sort:"Ordenar",
+ filter:"Filtrar",
+ usePivotTablereports:"Usar informes de tabla dinámica",
+ editObjects:"Editar objetos",
+ editScenarios:"Editar escenarios",
+
+ allowRangeTitle:"Permitir a los usuarios del rango:",
+ allowRangeAdd:"Nuevo...",
+
+ allowRangeAddTitle:"Título",
+ allowRangeAddSqrf:"Referencia",
+ selectCellRange: 'Haz clic para seleccionar un rango de celdas',
+ selectCellRangeHolder:"Rango de celdas",
+ allowRangeAddTitlePassword:"Contraseña",
+ allowRangeAddTitleHint:"Pregunta",
+ allowRangeAddTitleHintTitle:"Preguntar cuando hay una contraseña (opcional)",
+ allowRangeAddtitleDefault:"Nombre del rango de entrada",
+
+ rangeItemDblclick:"Haz doble clic para editar",
+ rangeItemHasPassword:"Tiene contraseña",
+
+ rangeItemErrorTitleNull:"El título es nulo",
+ rangeItemErrorRangeNull:"La referencia es nula",
+ rangeItemErrorRange:"La reference tiene un error",
+
+ validationTitle:"Validación de contraseña",
+ validationTips:"Hay que ingresar una contraseña para desbloquear la protección de la hoja de trabajo",
+ validationInputHint:"Introduce una contraseña",
+
+ checkPasswordNullalert:"Contraseña requerida!",
+ checkPasswordWrongalert:"¡Contraseña incorrecta. Por favor, prueba de nuevo!",
+
+ checkPasswordSucceedalert:"Desbloqueo conseguido!",
+ defaultRangeHintText:"La celda está protegida con contraseña.",
+ defaultSheetHintText:"La celda o el gráfico están en una hoja de trabajo protegida. Para realizar cambios, desprotege la hoja de trabajo. Es posible que tengas que ingresar una contraseña",
+ },
+ cellFormat:{
+ cellFormatTitle:"Formatear celdas",
+ protection:"Protección",
+ locked:"Bloqueado",
+ hidden:"Escondido",
+ protectionTips:"Para bloquear celdas u ocultar fórmulas, protege la hoja de trabajo. En la barra de herramientas, haz clic en el botón Proteger hoja",
+ tipsPart:"Comprobado parcial",
+ tipsAll:"Todo seleccionado",
+
+ selectionIsNullAlert:"Se requiere una selección!",
+ sheetDataIsNullAlert:"error, no hay datos!",
+
+ },
+ print:{
+ normalBtn:"Normal",
+ layoutBtn:"Disposición de página",
+ pageBtn:"Previsualización de saltos de página",
+
+ menuItemPrint:"Imprimir (Ctrl+P)",
+ menuItemAreas:"Imprimir áreas",
+ menuItemRows:"Imprimir títulos de filas",
+ menuItemColumns:"Imprimir títulos de columnas",
+ }
+ };
\ No newline at end of file