Browse Source

feat(api): api

setCellValue
master
lrz 5 years ago
parent
commit
66aecbe7fe
  1. 3
      README-zh.md
  2. 3
      README.md
  3. 193
      docs/zh/guide/api.md
  4. 42
      docs/zh/guide/sheet.md
  5. 3
      src/core.js
  6. 1
      src/function/functionlist.js
  7. 294
      src/global/api.js
  8. 82
      src/global/formula.js

3
README-zh.md

@ -10,10 +10,11 @@
🚀Luckysheet ,一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。
## 文档
[在线demo](https://mengshukeji.github.io/LuckysheetDemo/)
[在线文档](https://mengshukeji.github.io/LuckysheetDocs/zh/)
[在线demo](https://mengshukeji.github.io/LuckysheetDemo/) / [导入excel demo](https://mengshukeji.github.io/LuckyexcelDemo/)
![演示](/docs/.vuepress/public/img/LuckysheetDemo.gif)
## 插件

3
README.md

@ -16,10 +16,11 @@ English| [简体中文](./README-zh.md)
🚀Luckysheet is an online spreadsheet like excel that is powerful, simple to configure, and completely open source.
## Documentation
[Online demo](https://mengshukeji.github.io/LuckysheetDemo/)
[Online documentation](https://mengshukeji.github.io/LuckysheetDocs/)
[Online demo](https://mengshukeji.github.io/LuckysheetDemo/) / [Import excel demo](https://mengshukeji.github.io/LuckyexcelDemo/)
![Demo](/docs/.vuepress/public/img/LuckysheetDemo.gif)
## Plugins

193
docs/zh/guide/api.md

@ -10,7 +10,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
## 单元格操作
### getCellValue(row, column [,setting])<div id='getCellValue'></div>
- [x] $\color{#FF3030}已实现$
- **参数**
@ -39,7 +39,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### setCellValue(row, column, value [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -48,6 +48,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
- {Object | String | Number} [value]: 要设置的值;可以为字符串或数字,或为符合Luckysheet单元格格式的对象,参考 [单元格属性表](/zh/guide/cell.html)
- {PlainObject} [setting]: 可选参数
+ {Number} [order]: 工作表索引;默认值为当前工作表索引
+ {Boolean} [isRefresh]: 是否刷新界面;默认为`true`;用于多个单元格赋值时候控制节流,前面单元格赋值的时候应设置为 `false`,最后一个单元格赋值时设置为`true`。
+ {Function} [success]: 操作结束的回调函数
- **说明**
@ -58,13 +59,23 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
- **示例**:
- 设置当前工作表"A1"单元格的值为"abc"
     `luckysheet.setCellValue(0, 0, 'abc');`
- 设置当前工作表"A1"单元格的值为"1"
     `luckysheet.setCellValue(0, 0, 1);`
- 设置当前工作表"B1"单元格的值为公式"=sum(A1)"
     `luckysheet.setCellValue(0, 1, "=sum(A1)");`
- 设置当前工作表"C1"单元格的值为公式"=sum(A1:B1",并带有红色背景,单元格对象可以不带v和m值,Luckysheet会根据公式信息自动计算结果,如果带了未更新或者是非公式结果的v和m值,Luckysheet也仍然会根据公式实际关联的数据计算出准备的结果。
     `luckysheet.setCellValue(0, 2, {f: "=sum(A1:B1)", bg:"#FF0000"})`
再次设置"C1"单元格新的公式仍然可以生效
`luckysheet.setCellValue(0, 2, {f: "=sum(A1)", bg:"#00FF00"})`
------------
### clearCell(row, column [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -86,7 +97,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### deleteCell(move, row, column [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
- {String} [move]: 删除后,右侧还是下方的单元格移动
@ -114,7 +125,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### setCellFormat(row, column, attr, value [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -157,7 +168,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### find(content [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -180,7 +191,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### replace(content, replaceContent [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -207,7 +218,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
## 行和列操作
### setHorizontalFrozen(isRange [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -240,7 +251,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### setVerticalFrozen(isRange [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -269,7 +280,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### setBothFrozen(isRange [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -298,7 +309,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### cancelFrozen([setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -319,7 +330,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### insertRow(row [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -343,7 +354,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### insertColumn( column [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -367,7 +378,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### deleteRow(rowStart, rowEnd [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -393,7 +404,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### deleteColumn(columnStart, columnEnd [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -419,7 +430,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### hideRow(rowStart, rowEnd [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -445,7 +456,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### hideColumn(columnStart, columnEnd [,setting])(TODO)
- [x] $\color{#FF3030}已实现$
- **参数**
@ -471,7 +482,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### showRow(rowStart, rowEnd [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -495,7 +506,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### showColumn(columnStart, columnEnd [,setting])(TODO)
- [x] $\color{#FF3030}已实现$
- **参数**
@ -521,7 +532,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
## 选区操作
### getRange()
- [x] $\color{#FF3030}已实现$
- **说明**
@ -544,7 +555,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### getRangeValue([setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -630,6 +641,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### getRangeHtml([setting])
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -677,7 +691,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### getRangeJson(title [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -723,7 +737,10 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### getRangeArray(dimensional [,setting])
- [ ] $\color{green} TODO$
[todo]
- **参数**
@ -819,7 +836,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### getRangeDiagonal(type [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -899,7 +916,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### getRangeBoolean([setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -929,6 +946,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setRangeShow(range [,setting])<div id='setRangeShow'></div>
[todo]
- **参数**
- {Array | Object | String} [range]: 选区范围,支持选区的格式为`"A1:B2"`、`"sheetName!A1:B2"`或者`{row:[0,1],column:[0,1]}`,允许多个选区组成的数组;默认为当前选区
@ -967,7 +987,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### setRangeValue(data [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -975,6 +995,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
- {PlainObject} [setting]: 可选参数
+ {Array | Object | String} [range]: 选区范围,支持选区的格式为`"A1:B2"`、`"sheetName!A1:B2"`或者`{row:[0,1],column:[0,1]}`,只能为单个选区;默认为当前选区
+ {Number} [order]: 工作表索引;默认值为当前工作表索引
+ {Boolean} [isRefresh]: 是否刷新界面;默认为`true`;用于多个单元格赋值时候控制节流,前面单元格赋值的时候应设置为 `false`,最后一个单元格赋值时设置为`true`。
+ {Function} [success]: 操作结束的回调函数
- **说明**
@ -1032,7 +1053,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### setRangeFormat(attr, value [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -1074,6 +1095,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setRangeFilter(type [,setting])
[todo]
- **参数**
- {String} [type]: 打开还是关闭筛选功能
@ -1098,7 +1122,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### setRangeMerge(type [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -1152,7 +1176,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### cancelRangeMerge( [setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -1174,7 +1198,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### setRangeSort(type [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -1203,7 +1227,7 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
------------
### setRangeSortMulti(title, sort [,setting])
- [x] $\color{#FF3030}已实现$
- **参数**
@ -1228,6 +1252,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setRangeConditionalFormatDefault(conditionName, conditionValue [,setting])
[todo]
- **参数**
- {String} [conditionName]: 条件格式规则类型
@ -1330,6 +1357,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setRangeConditionalFormat(type [,setting])
[todo]
- **参数**
- {String} [type]: 条件格式规则类型
@ -1448,6 +1478,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### deleteRangeConditionalFormat(itemIndex [,setting])
[todo]
- **参数**
- {Number} [itemIndex]: 条件格式规则索引
@ -1470,6 +1503,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### clearRange([setting])
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -1490,6 +1526,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### deleteRange(move [,setting])
[todo]
- **参数**
- {String} [move]: 删除后,右侧还是下方的单元格移动
@ -1516,6 +1555,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### insertRange(move [,setting])
[todo]
- **参数**
- {String} [move]: 活动单元格右移或者下移
@ -1549,6 +1591,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### matrixOperation(type [,setting])
[todo]
- **参数**
- {String} [type]: 矩阵操作的类型
@ -1591,6 +1636,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### matrixCalculation(type, number [,setting])
[todo]
- **参数**
- {String} [type]: 计算方式
@ -1633,6 +1681,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### getAllSheets()
[todo]
- **说明**
返回所有工作表配置,格式同[工作表配置](/zh/guide/sheet.html),得到的结果可用于表格初始化时作为`options.data`使用。
@ -1648,6 +1699,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### getLuckysheetfile()
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -1666,6 +1720,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### getSheetData([setting])
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -1679,6 +1736,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### getConfig([setting])
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -1692,6 +1752,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setConfig([setting])
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -1706,6 +1769,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setSheetAdd([setting])
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -1726,6 +1792,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setSheetDelete([setting])
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -1745,6 +1814,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setSheetCopy([setting])
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -1765,6 +1837,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setSheetHide([setting])
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -1786,6 +1861,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setSheetShow([setting])
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -1805,6 +1883,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setSheetActive(order [,setting])
[todo]
- **参数**
- {Number} [order]: 要激活的工作表索引
@ -1824,6 +1905,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setSheetName(name [,setting])
[todo]
- **参数**
- {String} [name]: 新的工作表名称
@ -1844,6 +1928,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setSheetColor(color [,setting])
[todo]
- **参数**
- {String} [color]: 工作表颜色
@ -1864,6 +1951,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setSheetMove(type [,setting])
[todo]
- **参数**
- {String | Number} [type]: 工作表移动方向或者移动的目标索引,
@ -1891,6 +1981,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setSheetOrder(orderList [,setting])
[todo]
- **参数**
- {Array} [orderList]: 工作表顺序,设置工作表的index和order来指定位置,如:
@ -1943,6 +2036,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### refresh([setting])
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -1969,6 +2065,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### getScreenshot([setting])
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -1983,6 +2082,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setWorkbookName(name [,setting])
[todo]
- **参数**
- {Number} [name]: 工作簿名称
@ -1997,6 +2099,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### undo([setting])
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -2010,6 +2115,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### redo([setting])
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -2025,6 +2133,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### insertChart([setting])
[todo]
- **参数**
- {PlainObject} [setting]: 可选参数
@ -2040,6 +2151,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### setChart(chartId, attr, value [,setting])
[todo]
- **参数**
- {String} [chartId]: 指定要修改的图表id
@ -2065,6 +2179,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### getChart(chartId)
[todo]
- **参数**
- {String} [chartId]: 指定要获取的图表id
@ -2077,6 +2194,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### deleteChart(chartId [,setting])
[todo]
- **参数**
- {String} [chartId]: 要删除的图表id
@ -2094,6 +2214,9 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### transToCellData(data [,setting])<div id='transToCellData'></div>
[todo]
- **参数**
- {Array} [data]: data数据
@ -2109,6 +2232,8 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### transToData(celldata [,setting])<div id='transToData'></div>
[todo]
- **参数**
- {Array} [celldata]: data数据
@ -2124,6 +2249,8 @@ Luckysheet针对常用的数据操作需求,开放了主要功能的API,开
### toJson()
[todo]
- **说明**
导出的json字符串可以直接当作`luckysheet.create(options)`初始化工作簿时的参数`options`使用,使用场景在用户自己操作表格后想要手动保存全部的参数,再去别处初始化这个表格使用,类似一个luckysheet专有格式的导入导出。

42
docs/zh/guide/sheet.md

@ -41,6 +41,7 @@ options.data示例如下:
"chart": [], //图表配置
"allowEdit": true, //是否允许编辑
"zoomRatio":1, // 缩放比例
"image":[], //图片
},
{
"name": "Sheet2",
@ -381,7 +382,10 @@ options.data示例如下:
### calcChain
- 类型:Array
- 默认值:[]
- 作用: 公式链,用于公式所链接的单元格改变后,所有引用此单元格的公式都会联动刷新
- 作用: 公式链是一个由用户指定顺序排列的公式信息数组,Luckysheet会根据此顺序来决定公式执行的顺序。
注意,在初始化工作簿的时候,如果有单元格包含公式,请务必添加对应单元格位置的公式链,否则Luckysheet无法识别公式。
- 示例:
```js
[{
@ -1206,6 +1210,42 @@ options.data示例如下:
- 作用: 此sheet页的缩放比例,为0~1之间的二位小数数字。比如`0.1`、`0.56`
------------
### image
- 类型:Array
- 默认值:[]
- 作用: 插入表格中图片信息,包含图片地址、宽高、位置、裁剪等信息
- 示例:
以下为一个`imageItem`案例,通常一个工作表中可能存在多个图片,所以`image`的格式为数组`[imageItem,imageItem,...]`
```json
{
type: '3', //1移动并调整单元格大小 2移动并且不调整单元格的大小 3不要移动单元格并调整其大小
src: '', //图片url
originWidth: 1484, //图片原始宽度
originHeight: 834, //图片原始高度
default: {
width: 293, //图片 宽度
height: 196, //图片 高度
left: 409, //图片离表格左边的 位置
top: 248, //图片离表格顶部的 位置
},
crop: {
width: 293, //图片裁剪后 宽度
height: 196, //图片裁剪后 高度
offsetLeft: 0, //图片裁剪后离未裁剪时 左边的位移
offsetTop: 0, //图片裁剪后离未裁剪时 顶部的位移
},
isFixedPos: false, //固定位置
fixedLeft: 507, //固定位置 左位移
fixedTop: 141, //固定位置 右位移
border: {
width: 0, //边框宽度
radius: 0, //边框半径
style: 'solid', //边框类型
color: '#000', //边框颜色
}
}
```
------------
## 调试信息

3
src/core.js

@ -37,7 +37,8 @@ import * as api from './global/api';
let luckysheet = {};
// mount api
luckysheet.api = api;
// luckysheet.api = api;
Object.assign(luckysheet, api);
//创建luckysheet表格
luckysheet.create = function (setting) {

1
src/function/functionlist.js

@ -1,6 +1,5 @@
import functionImplementation from './functionImplementation';
import Store from '../store/index'
//{"0":"数学","1":"统计","2":"查找","3":"Luckysheet内置","4":"数据挖掘","5":"数据源","6":"日期","7":"过滤器","8":"财务","9":"工程计算","10":"逻辑","11":"运算符","12":"文本","13":"转换工具","14":"数组"}
const functionlist_zh = [{
'n': 'SUMIF',

294
src/global/api.js

@ -20,6 +20,7 @@ import json from "./json";
import { orderbydata } from "./sort";
import editor from "./editor";
import { rowlenByRange } from "./getRowlen";
import luckysheetformula from './formula'
const IDCardReg = /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i;
@ -68,6 +69,9 @@ export function getCellValue(row, column, options = {}) {
/**
* 设置单元格的值
*
* 关键点如果设置了公式则需要更新公式链insertUpdateFunctionGroup如果设置了不是公式判断之前是公式则需要清除公式delFunctionGroup
*
* @param {Number} row 单元格所在行数从0开始的整数0表示第一行
* @param {Number} column 单元格所在列数从0开始的整数0表示第一列
* @param {Object | String | Number} value 要设置的值可以为字符串或数字或为符合Luckysheet单元格格式的对象
@ -75,6 +79,156 @@ export function getCellValue(row, column, options = {}) {
* @param {Number} options.order 工作表索引默认值为当前工作表索引
* @param {Function} options.success 操作结束的回调函数
*/
// export function setCellValue(row, column, value, options = {}) {
// if (row == null && column == null) {
// return console.error('Arguments row or column cannot be null or undefined.')
// }
// let curSheetOrder = getSheetIndex(Store.currentSheetIndex);
// let {
// order = curSheetOrder,
// success
// } = {...options}
// let targetSheetData = Store.luckysheetfile[order].data;
// let cell = targetSheetData[row][column];
// let vupdate;
// if (getObjType(value) == 'object') {
// cell = value;
// if (getObjType(value.v) == 'object') {
// vupdate = vaule.v.v;
// } else {
// vupdate = value.v;
// }
// } else {
// vupdate = value;
// }
// if (isRealNull(vupdate)) {
// if (getObjType(cell) == 'object') {
// delete cell.m;
// delete cell.v;
// } else {
// cell = null;
// }
// return;
// }
// if (isRealNull(cell)) {
// cell = {}
// }
// if (vupdate.toString().substring(0, 1) == "'") {
// cell.m = vupdate.toString().substring(1);
// cell.ct = { "fa": "@", "t": "s" };
// cell.v = vupdate.toString().substring(1);
// } else if (vupdate.toString().toUpperCase() === 'TRUE') {
// cell.m = "TRUE";
// cell.ct = { "fa": "General", "t": "b" };
// cell.v = true;
// } else if (vupdate.toString().toUpperCase() === 'FALSE') {
// cell.m = "FALSE";
// cell.ct = { "fa": "General", "t": "b" };
// cell.v = false;
// } else if (valueIsError(vupdate)) {
// cell.m = vupdate.toString();
// cell.ct = { "fa": "General", "t": "e" };
// cell.v = vupdate;
// } else {
// if (cell.f != null && isRealNum(vupdate) && !IDCardReg.test(vupdate)) {
// cell.v = parseFloat(vupdate);
// if (cell.ct == null) {
// cell.ct = {
// 'fa': 'General',
// 't': 'n'
// }
// }
// if (cell.v == Infinity || cell.v == -Infinity) {
// cell.m = cell.v.toString();
// } else {
// if (cell.v.toString().indexOf('e') > -1) {
// let len = cell.v.toString().split('.')[1].split('e')[0].length;
// if (len > 5) {
// len = 5;
// }
// cell.m = cell.v.toExponential(len).toString();
// } else {
// let v_p = Math.round(cell.v * 1000000000) / 1000000000;
// if (cell.ct == null) {
// let mask = genarate(v_p);
// cell.m = mask[0].toString();
// } else {
// let mask = update(cell.ct.fa, v_p);
// cell.m = mask.toString();
// }
// }
// }
// } else if (cell.ct != null && cell.ct.fa == '@') {
// cell.m = vupdate.toString();
// cell.v = vupdate;
// } else if (cell.ct != null && cell.ct.fa != null && cell.ct.fa != 'General') {
// if (isRealNum(vupdate)) {
// vupdate = parseFloat(vupdate);
// }
// let mask = update(cell.ct.fa, vupdate);
// if (mask === vupdate) {// 若原来单元格格式 应用不了 要更新的值,则获取更新值的 格式
// mask = genarate(vupdate);
// cell.m = mask[0].toString();
// cell.ct = mask[1];
// cell.v = mask[2];
// } else {
// cell.m = mask.toString();
// cell.v = vupdate;
// }
// } else {
// if (isRealNum(vupdate) && !IDCardReg.test(vupdate)) {
// vupdate = parseFloat(vupdate);
// cell.v = parseFloat(vupdate);
// cell.ct = {
// 'fa': 'General',
// 't': 'n'
// }
// if (cell.v == Infinity || cell.v == -Infinity) {
// cell.m = cell.v.toString();
// } else {
// let mask = genarate(cell.v);
// cell.m = mask[0].toString();
// }
// } else {
// let mask = genarate(vupdate);
// cell.m = mask[0].toString();
// cell.ct = mask[1];
// cell.v = mask[2];
// }
// }
// }
// if (!server.allowUpdate && !luckysheetConfigsetting.pointEdit) {
// if (cell.ct != null && !/^(w|W)((0?)|(0\.0+))$/.test(cell.ct.fa) && cell.ct.t == 'n' && cell.v != null && parseInt(cell.v).toString().length > 4) {
// let autoFormatw = luckysheetConfigsetting.autoFormatw.toString().toUpperCase();
// let accuracy = luckysheetConfigsetting.accuracy;
// let sfmt = setAccuracy(autoFormatw, accuracy);
// if (sfmt != 'General') {
// cell.ct.fa = sfmt;
// cell.m = update(sfmt, cell.v);
// }
// }
// }
// // refresh
// jfrefreshgrid(targetSheetData, {
// row: [row],
// column: [column]
// })
// if (success && typeof success === 'function') {
// success();
// }
// }
export function setCellValue(row, column, value, options = {}) {
if (row == null && column == null) {
return console.error('Arguments row or column cannot be null or undefined.')
@ -84,142 +238,10 @@ export function setCellValue(row, column, value, options = {}) {
order = curSheetOrder,
success
} = {...options}
let targetSheetData = Store.luckysheetfile[order].data;
let cell = targetSheetData[row][column];
let vupdate;
if (getObjType(value) == 'object') {
cell = value;
if (getObjType(value.v) == 'object') {
vupdate = vaule.v.v;
} else {
vupdate = value.v;
}
} else {
vupdate = value;
}
if (isRealNull(vupdate)) {
if (getObjType(cell) == 'object') {
delete cell.m;
delete cell.v;
} else {
cell = null;
}
return;
}
if (isRealNull(cell)) {
cell = {}
}
if (vupdate.toString().substring(0, 1) == "'") {
cell.m = vupdate.toString().substring(1);
cell.ct = { "fa": "@", "t": "s" };
cell.v = vupdate.toString().substring(1);
} else if (vupdate.toString().toUpperCase() === 'TRUE') {
cell.m = "TRUE";
cell.ct = { "fa": "General", "t": "b" };
cell.v = true;
} else if (vupdate.toString().toUpperCase() === 'FALSE') {
cell.m = "FALSE";
cell.ct = { "fa": "General", "t": "b" };
cell.v = false;
} else if (valueIsError(vupdate)) {
cell.m = vupdate.toString();
cell.ct = { "fa": "General", "t": "e" };
cell.v = vupdate;
} else {
if (cell.f != null && isRealNum(vupdate) && !IDCardReg.test(vupdate)) {
cell.v = parseFloat(vupdate);
if (cell.ct == null) {
cell.ct = {
'fa': 'General',
't': 'n'
}
}
if (cell.v == Infinity || cell.v == -Infinity) {
cell.m = cell.v.toString();
} else {
if (cell.v.toString().indexOf('e') > -1) {
let len = cell.v.toString().split('.')[1].split('e')[0].length;
if (len > 5) {
len = 5;
}
cell.m = cell.v.toExponential(len).toString();
} else {
let v_p = Math.round(cell.v * 1000000000) / 1000000000;
if (cell.ct == null) {
let mask = genarate(v_p);
cell.m = mask[0].toString();
} else {
let mask = update(cell.ct.fa, v_p);
cell.m = mask.toString();
}
}
}
} else if (cell.ct != null && cell.ct.fa == '@') {
cell.m = vupdate.toString();
cell.v = vupdate;
} else if (cell.ct != null && cell.ct.fa != null && cell.ct.fa != 'General') {
if (isRealNum(vupdate)) {
vupdate = parseFloat(vupdate);
}
let mask = update(cell.ct.fa, vupdate);
if (mask === vupdate) {// 若原来单元格格式 应用不了 要更新的值,则获取更新值的 格式
mask = genarate(vupdate);
cell.m = mask[0].toString();
cell.ct = mask[1];
cell.v = mask[2];
} else {
cell.m = mask.toString();
cell.v = vupdate;
}
} else {
if (isRealNum(vupdate) && !IDCardReg.test(vupdate)) {
vupdate = parseFloat(vupdate);
cell.v = parseFloat(vupdate);
cell.ct = {
'fa': 'General',
't': 'n'
}
if (cell.v == Infinity || cell.v == -Infinity) {
cell.m = cell.v.toString();
} else {
let mask = genarate(cell.v);
cell.m = mask[0].toString();
}
} else {
let mask = genarate(vupdate);
cell.m = mask[0].toString();
cell.ct = mask[1];
cell.v = mask[2];
}
}
}
if (!server.allowUpdate && !luckysheetConfigsetting.pointEdit) {
if (cell.ct != null && !/^(w|W)((0?)|(0\.0+))$/.test(cell.ct.fa) && cell.ct.t == 'n' && cell.v != null && parseInt(cell.v).toString().length > 4) {
let autoFormatw = luckysheetConfigsetting.autoFormatw.toString().toUpperCase();
let accuracy = luckysheetConfigsetting.accuracy;
let sfmt = setAccuracy(autoFormatw, accuracy);
if (sfmt != 'General') {
cell.ct.fa = sfmt;
cell.m = update(sfmt, cell.v);
}
}
}
// refresh
jfrefreshgrid(targetSheetData, {
row: [row],
column: [column]
})
luckysheetformula.updatecell(row, column, value);
if (success && typeof success === 'function') {
success();

82
src/global/formula.js

@ -1189,13 +1189,15 @@ const luckysheetformula = {
"opacity": "0.13"
});
},
updatecell: function(r, c) {
updatecell: function(r, c, value) {
let _this = this;
let $input = $("#luckysheet-rich-text-editor"),
value = $input.text();
let $input = $("#luckysheet-rich-text-editor");
// API, we get value from user
value = value || $input.text();
if (_this.rangetosheet != Store.currentSheetIndex) {
if (_this.rangetosheet != null && _this.rangetosheet != Store.currentSheetIndex) {
sheetmanage.changeSheetExec(_this.rangetosheet);
}
@ -1218,7 +1220,7 @@ const luckysheetformula = {
}
}
if (value.slice(0, 1) == "=" && value.length > 1) {
if (getObjType(value) == "string" && value.slice(0, 1) == "=" && value.length > 1) {
}
else if(getObjType(curv) == "object" && curv.ct != null && curv.ct.fa != null && curv.ct.fa != "@" && !isRealNull(value)){
@ -1257,6 +1259,42 @@ const luckysheetformula = {
}
}
}
// from API setCellValue,luckysheet.setCellValue(0, 0, {f: "=sum(D1)", bg:"#0188fb"}),value is an object, so get attribute f as value
else if(getObjType(value) == "object"){
let valueFunction = value.f;
if(getObjType(valueFunction) == "string" && valueFunction.slice(0, 1) == "=" && valueFunction.length > 1){
let v = _this.execfunction(valueFunction, r, c, true);
// get v/m/ct
curv = _this.execFunctionGroupData[r][c];
// get f
curv.f = v[2];
// get other cell style attribute
delete value.v;
delete value.m;
delete value.f;
Object.assign(curv,value);
//打进单元格的sparklines的配置串, 报错需要单独处理。
if(v.length == 4 && v[3].type == "sparklines"){
delete curv.m;
delete curv.v;
let curCalv = v[3].data;
if(getObjType(curCalv) == "array" && getObjType(curCalv[0]) != "object"){
curv.v = curCalv[0];
}
else{
curv.spl = v[3].data;
}
}
}
}
else{
_this.delFunctionGroup(r, c);
_this.execFunctionGroup(r, c, value);
@ -1266,7 +1304,7 @@ const luckysheetformula = {
delete curv.f;
delete curv.spl;
if(curv.qp == 1 && value.substr(0,1)!="'"){//if quotePrefix is 1, cell is force string, cell clear quotePrefix when it is updated
if(curv.qp == 1 && ('' + value).substr(0,1)!="'"){//if quotePrefix is 1, cell is force string, cell clear quotePrefix when it is updated
curv.qp = 0;
if(curv.ct!=null){
curv.ct.fa = "General";
@ -1298,6 +1336,36 @@ const luckysheetformula = {
}
}
}
// from API setCellValue,luckysheet.setCellValue(0, 0, {f: "=sum(D1)", bg:"#0188fb"}),value is an object, so get attribute f as value
else if(getObjType(value) == "object"){
let valueFunction = value.f;
if(getObjType(valueFunction) == "string" && valueFunction.slice(0, 1) == "=" && valueFunction.length > 1){
let v = _this.execfunction(valueFunction, r, c, true);
// value = {
// "v": v[1],
// "f": v[2]
// };
// update attribute v
value.v = v[1];
value.f = v[2];
//打进单元格的sparklines的配置串, 报错需要单独处理。
if(v.length == 4 && v[3].type == "sparklines"){
let curCalv = v[3].data;
if(getObjType(curCalv) == "array" && getObjType(curCalv[0]) != "object"){
value.v = curCalv[0];
}
else{
value.spl = v[3].data;
}
}
}
}
else{
_this.delFunctionGroup(r, c);
_this.execFunctionGroup(r, c, value);
@ -1305,6 +1373,7 @@ const luckysheetformula = {
}
}
// value maybe an object
setcellvalue(r, c, d, value);
_this.cancelNormalSelected();
@ -4451,6 +4520,7 @@ const luckysheetformula = {
this.execFunctionGroup();
}
},
// When set origin_r and origin_c, that mean just refresh cell value link to [origin_r,origin_c] cell
execFunctionGroup: function(origin_r, origin_c, value, index, data, isForce=false) {
let _this = this;

Loading…
Cancel
Save