Showing preview only (8,356K chars total). Download the full file or copy to clipboard to get everything.
Repository: dream-num/Luckysheet
Branch: master
Commit: 5b3fe58f5ad2
Files: 180
Total size: 7.9 MB
Directory structure:
gitextract_wgvkz2_0/
├── .eslintignore
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── bug_report_zh.md
│ │ ├── feature_request.md
│ │ └── feature_request_zh.md
│ └── workflows/
│ ├── gitee-mirror.yml
│ ├── github-demo.yml
│ └── github-doc.yml
├── .gitignore
├── .prettierignore
├── .prettierrc.json
├── CHANGELOG.md
├── LICENSE
├── README-zh.md
├── README.md
├── commitlint.config.js
├── deploy.bat
├── docs/
│ ├── .vuepress/
│ │ └── config.js
│ ├── README.md
│ ├── about/
│ │ ├── README.md
│ │ ├── company.md
│ │ └── sponsor.md
│ ├── guide/
│ │ ├── FAQ.md
│ │ ├── README.md
│ │ ├── api.md
│ │ ├── cell.md
│ │ ├── config.md
│ │ ├── contribute.md
│ │ ├── data.md
│ │ ├── operate.md
│ │ ├── resource.md
│ │ └── sheet.md
│ └── zh/
│ ├── README.md
│ ├── about/
│ │ ├── README.md
│ │ ├── company.md
│ │ └── sponsor.md
│ └── guide/
│ ├── FAQ.md
│ ├── README.md
│ ├── api.md
│ ├── cell.md
│ ├── config.md
│ ├── contribute.md
│ ├── operate.md
│ ├── resource.md
│ └── sheet.md
├── gulpfile.js
├── package.json
└── src/
├── assets/
│ └── iconfont/
│ ├── demo.css
│ ├── demo_index.html
│ ├── iconfont.css
│ ├── iconfont.js
│ └── iconfont.json
├── config.js
├── controllers/
│ ├── alternateformat.js
│ ├── cellDatePickerCtrl.js
│ ├── cellFormat.js
│ ├── conditionformat.js
│ ├── constant.js
│ ├── controlHistory.js
│ ├── dataVerificationCtrl.js
│ ├── dropCell.js
│ ├── expendPlugins.js
│ ├── filter.js
│ ├── formulaBar.js
│ ├── freezen.js
│ ├── handler.js
│ ├── hyperlinkCtrl.js
│ ├── ifFormulaGenerator.js
│ ├── imageCtrl.js
│ ├── imageUpdateCtrl.js
│ ├── inlineString.js
│ ├── insertFormula.js
│ ├── keyboard.js
│ ├── listener.js
│ ├── locationCell.js
│ ├── luckysheetConfigsetting.js
│ ├── matrixOperation.js
│ ├── menuButton.js
│ ├── mobile.js
│ ├── moreFormat.js
│ ├── orderBy.js
│ ├── pivotTable.js
│ ├── postil.js
│ ├── protection.js
│ ├── resize.js
│ ├── rowColumnOperation.js
│ ├── searchReplace.js
│ ├── select.js
│ ├── selection.js
│ ├── server.js
│ ├── sheetBar.js
│ ├── sheetMove.js
│ ├── sheetSearch.js
│ ├── sheetmanage.js
│ ├── sparkline.js
│ ├── splitColumn.js
│ ├── toolbar.js
│ ├── updateCell.js
│ └── zoom.js
├── core.js
├── css/
│ ├── iconCustom.css
│ ├── luckysheet-cellFormat.css
│ ├── luckysheet-core.css
│ ├── luckysheet-protection.css
│ └── luckysheet-zoom.css
├── data/
│ └── chartJson.js
├── demoData/
│ ├── chat.js
│ ├── demoFeature.js
│ ├── getTargetData.js
│ ├── sheetCell.js
│ ├── sheetChart.js
│ ├── sheetComment.js
│ ├── sheetConditionFormat.js
│ ├── sheetDataVerification.js
│ ├── sheetFormula.js
│ ├── sheetPicture.js
│ ├── sheetPivotTable.js
│ ├── sheetPivotTableData.js
│ ├── sheetSparkline.js
│ └── sheetTable.js
├── expendPlugins/
│ ├── chart/
│ │ ├── chartmix.css
│ │ └── plugin.js
│ ├── exportXlsx/
│ │ └── plugin.js
│ └── print/
│ ├── plugin.js
│ └── print.css
├── fonts/
│ └── FontAwesome.otf
├── function/
│ ├── func.js
│ ├── functionImplementation.js
│ ├── functionListDescriptor.js
│ ├── functionlist.js
│ ├── getLocalizedFunctionList.js
│ ├── luckysheet_function.js
│ └── matrix_methods.js
├── global/
│ ├── analysis.js
│ ├── api.js
│ ├── array.js
│ ├── border.js
│ ├── browser.js
│ ├── cleargridelement.js
│ ├── count.js
│ ├── createdom.js
│ ├── createsheet.js
│ ├── cursorPos.js
│ ├── datecontroll.js
│ ├── draw.js
│ ├── dynamicArray.js
│ ├── editor.js
│ ├── extend.js
│ ├── format.js
│ ├── formula.js
│ ├── func_methods.js
│ ├── getRowlen.js
│ ├── getdata.js
│ ├── json.js
│ ├── loading.js
│ ├── location.js
│ ├── method.js
│ ├── refresh.js
│ ├── rhchInit.js
│ ├── scroll.js
│ ├── setdata.js
│ ├── sort.js
│ ├── tooltip.js
│ └── validate.js
├── index.html
├── index.js
├── locale/
│ ├── en.js
│ ├── es.js
│ ├── locale.js
│ ├── zh.js
│ └── zh_tw.js
├── methods/
│ ├── get.js
│ └── set.js
├── plugins/
│ └── jquery.sPage.css
├── store/
│ └── index.js
└── utils/
├── chartUtil.js
├── math.js
├── polyfill.js
└── util.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .eslintignore
================================================
src
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: # [mengshukeji]
patreon: mengshukeji
open_collective: luckysheet
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: ['https://www.paypal.me/wbfsa']
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: "[BUG]Find a bug"
labels: ''
assignees: ''
---
<!--- Thank you for your attention and submit the issue, we hope that besides submitting the issue, you can also help us to understand your user case of Luckysheet, please help fill out the following solicitation form -->
<!-- Wanted: Who is using Luckysheet https://github.com/mengshukeji/Luckysheet/issues/230 -->
<!-- The following is the issues template -->
**Describe the bug**
<!--- A clear and concise description of what the bug is. -->
**To Reproduce**
<!--- Steps to reproduce the behavior. -->
1. The first step:
2. The second step:
3. The third step:
4. See error:
**What is expected?**
<!--- A clear and concise description of what you expected to happen. -->
**Screenshots or demo**
<!--- If applicable, add screenshots or online demo to help explain your problem.We will be more accurate when we retest. -->
**Environment**
- OS: <!--- [e.g. Windows,Mac,Linux] -->
- Browser Version: <!---[e.g. Chrome Version 84.0.4147.105 (Official Build) (64-bit), Safari,Firefox,Edge] -->
- Luckysheet Version: <!---[e.g. 1.0.1,latest] -->
**Additional context**
<!--- Add any other context about the problem here. -->
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report_zh.md
================================================
---
name: '错误报告'
about: 创建报告帮助我们改进
title: '[BUG]发现了个bug'
labels: ''
assignees: ''
---
<!--- 感谢您的关注并发现问题,我们希望除了提交问题,还能帮助我们对您使用Luckysheet做进一步的了解,请帮忙填写以下征集表 -->
<!-- 征求:谁在使用Luckysheet https://github.com/mengshukeji/Luckysheet/issues/230 -->
<!-- 以下是issues正文模板 -->
**描述错误**
<!--- 清楚简洁地描述错误是什么 -->
**重现**
<!--- 重现错误的步骤 -->
1. 第一步操作:
2. 第二步操作:
3. 第三步操作:
4. 最后看到了什么错误:
**期望的结果**
<!--- 对您期望发生的结果简洁明了的描述 -->
**屏幕截图或演示**
<!--- 方便的话,贴上屏幕截图或在线链接复现问题,我们复测时会更精准 -->
**环境:**
- 操作系统:<!--- [例如 Windows,Mac,Linux] -->
- 浏览器 版本号:<!--- [例如 Chrome 版本 84.0.4147.105(正式版本) (64 位),Safari,Firefox,Edge] -->
- Luckysheet版本:<!--- [例如 1.0.1,最新] -->
**备注**
<!--- 其他说明 -->
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: "[Feature request]I have an idea"
labels: ''
assignees: ''
---
<!--- Thank you for your attention and submit the issue, we hope that besides submitting the issue, you can also help us to understand your user case of Luckysheet, please help fill out the following solicitation form -->
<!-- Wanted: Who is using Luckysheet https://github.com/mengshukeji/Luckysheet/issues/230 -->
<!-- The following is the issues template -->
**Is your feature request related to a problem? Please describe.**
<!--- A clear and concise description of what the problem is. -->
**Describe the solution you'd like**
<!--- A clear and concise description of what you want to happen. -->
**Additional context**
<!--- Add any other context or screenshots about the feature request here. -->
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request_zh.md
================================================
---
name: 功能要求
about: 为这个项目提出想法
title: "[Feature request]我有个点子"
labels: ''
assignees: ''
---
<!--- 感谢您的关注并发现问题,我们希望除了提交问题,还能帮助我们对您使用Luckysheet做进一步的了解,请帮忙填写以下征集表 -->
<!-- 征求:谁在使用Luckysheet https://github.com/mengshukeji/Luckysheet/issues/230 -->
<!-- 以下是issues正文模板 -->
**您的功能请求与问题有关吗?**
<!--- 清楚简洁地说明问题 -->
**描述您想要的解决方案**
<!--- 对您想要的功能效果简洁明了的描述 -->
**其他内容**
<!--- 其他说明 -->
================================================
FILE: .github/workflows/gitee-mirror.yml
================================================
# 使用 GitHub Action 来解决手动同步到 Gitee 的问题
# 效果:github repo 代码更新之后,会自动同步至 gitee
# 使用到的 GitHub Action:https://github.com/Yikun/hub-mirror-action
# This is a basic workflow to help you get started with Actions
name: gitee-mirror<sync2gitee.com>
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
push:
branches:
- '*'
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- name: Mirror the Github organization repos to Gitee.
uses: Yikun/hub-mirror-action@master
with:
src: github/mengshukeji
dst: gitee/mengshukeji
# 这里请填写与gitee上公钥匹配的的 ssh private key,参见:https://gitee.com/profile/sshkeys
# 填写地址:https://github.com/ly525/luban-h5/settings/secrets
dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
# 这里请填写 gitee的令牌,参见:https://gitee.com/profile/personal_access_tokens
# 填写地址:https://github.com/ly525/luban-h5/settings/secrets
dst_token: ${{ secrets.GITEE_TOKEN }}
# 项目同步白名单,可以选择填写多个,以英文逗号分割
static_list: "Luckyexcel,Luckysheet,LuckysheetDemo,LuckyexcelDemo,LuckysheetDocs,chartMix,LuckysheetServer"
# 是否强制同步
force_update: true
# 账号类型:对 luban-h5 而言是 user,因为是个人项目;如果是企业项目,请填写 org,因为是组织下的项目
account_type: user
================================================
FILE: .github/workflows/github-demo.yml
================================================
name: Luckysheet demo github pages deploy
on:
push:
tags:
- 'v*'
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout # 检查项目
uses: actions/checkout@v2
- name: Set up Node.js # Nodejs版本
uses: actions/setup-node@master
with:
node-version: 12.13.0
- name: Install dependencies & Generate static files # 安装依赖打包demo和文档
run: |
node -v
npm install
npm install gulp -g
npm run build
- name: Deploy LuckysheetDemo to GitHub Pages # 发布demo 到github pages
if: success()
uses: crazy-max/ghaction-github-pages@v2
with:
repo: mengshukeji/LuckysheetDemo
target_branch: gh-pages
build_dir: dist
env:
GITHUB_TOKEN: ${{ secrets.GIT_TOKEN }}
================================================
FILE: .github/workflows/github-doc.yml
================================================
name: Luckysheet docs github pages deploy
on:
push:
tags:
- 'doc*'
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout # 检查项目
uses: actions/checkout@v2
- name: Set up Node.js # Nodejs版本
uses: actions/setup-node@master
with:
node-version: 12.13.0
- name: Install dependencies & Generate static files # 安装依赖打包demo和文档
run: |
node -v
npm install
npm install gulp -g
npm run docs:build
- name: Deploy LuckysheetDocs to GitHub Pages # 发布docs 到github pages
if: success()
uses: crazy-max/ghaction-github-pages@v2
with:
repo: mengshukeji/LuckysheetDocs
target_branch: gh-pages
build_dir: docs/.vuepress/dist
env:
GITHUB_TOKEN: ${{ secrets.GIT_TOKEN }}
================================================
FILE: .gitignore
================================================
.DS_Store
node_modules
package-lock.json
yarn.lock
dist
docs/.vuepress/dist
src/expendPlugins/print/print.js
.idea
.history
.vs
.vscode
================================================
FILE: .prettierignore
================================================
dist
*.css
*.html
*.md
*.yml
*.min.js
package.json
package-lock.json
================================================
FILE: .prettierrc.json
================================================
{
"printWidth": 80,
"trailingComma": "es5",
"tabWidth": 2,
"semi": true,
"singleQuote": false,
"arrowParens": "avoid"
}
================================================
FILE: CHANGELOG.md
================================================
# Changelog
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [2.1.13](https://github.com/mengshukeji/Luckysheet/compare/v2.1.12...v2.1.13) (2021-01-19)
### Bug Fixes
* **bug:** bug ([025823b](https://github.com/mengshukeji/Luckysheet/commit/025823b9f386c8048aa44b62f076a739eaa980c0)), closes [#435](https://github.com/mengshukeji/Luckysheet/issues/435)
* **bug:** bug ([a8ff967](https://github.com/mengshukeji/Luckysheet/commit/a8ff967be9cdcf3bbcb0045888951a26a852500a)), closes [#398](https://github.com/mengshukeji/Luckysheet/issues/398)
* **bug:** bug ([deb3a96](https://github.com/mengshukeji/Luckysheet/commit/deb3a965b881d747f9a2171f7d9c9f967d671901))
* **bug:** bug ([5ce1f4a](https://github.com/mengshukeji/Luckysheet/commit/5ce1f4a0b753b7a95569b5285d749389e4d8b943)), closes [#433](https://github.com/mengshukeji/Luckysheet/issues/433)
* **bug:** bug ([932e821](https://github.com/mengshukeji/Luckysheet/commit/932e8215563248f97547ad21a429ef3f8ed0682b)), closes [#423](https://github.com/mengshukeji/Luckysheet/issues/423) [#424](https://github.com/mengshukeji/Luckysheet/issues/424)
* **bug:** bug ([06636f6](https://github.com/mengshukeji/Luckysheet/commit/06636f6a3c08128fe50aa880baabc9420fce4092)), closes [#154](https://github.com/mengshukeji/Luckysheet/issues/154) [#410](https://github.com/mengshukeji/Luckysheet/issues/410) [#416](https://github.com/mengshukeji/Luckysheet/issues/416)
* **bug:** history bug ([973eec8](https://github.com/mengshukeji/Luckysheet/commit/973eec8b71ea963bb23c9fe35c985e86c85ef019))
* **bug:** setRangeFormat history ([065148b](https://github.com/mengshukeji/Luckysheet/commit/065148b5a97e9090479f401463c548c3346757ec))
* **bug:** setRangeShow api ([5bbc45b](https://github.com/mengshukeji/Luckysheet/commit/5bbc45b68e807a2c58c328d93fe8079f3e56fa9f))
* bug ([7412c5b](https://github.com/mengshukeji/Luckysheet/commit/7412c5b4f5aa0afd93f3e0210d3f3fe182c67273))
* **bug:** 文本自动换行bug ([bc926e5](https://github.com/mengshukeji/Luckysheet/commit/bc926e5c49f008c14b4b5e1fdf13713fd6e995b5))
* 换行 ([94022a4](https://github.com/mengshukeji/Luckysheet/commit/94022a48b6407523c5924e94c86fb2ada0fab301))
* **bug:** 渲染换行空行 ([4162b7a](https://github.com/mengshukeji/Luckysheet/commit/4162b7a049f109715a9246ce610d05882d5a5f12))
* **hook:** cellrender ([d444980](https://github.com/mengshukeji/Luckysheet/commit/d44498086fcd3b1b2bf75e95c6a236bc79a1df13))
* **let:** let declar ([71ade32](https://github.com/mengshukeji/Luckysheet/commit/71ade32abd3989230db609ec37f92e931a4473f0))
* **pivottable:** fix ([7cecb12](https://github.com/mengshukeji/Luckysheet/commit/7cecb12ae3a1a0bd0d5bdce803429d4464388e31)), closes [#439](https://github.com/mengshukeji/Luckysheet/issues/439) [#447](https://github.com/mengshukeji/Luckysheet/issues/447)
* **pivottable:** init ([5b19e8b](https://github.com/mengshukeji/Luckysheet/commit/5b19e8b06bdd95c2b799d2cc1d6ae677b96617cd))
* **pivottable:** refresh ([78330c9](https://github.com/mengshukeji/Luckysheet/commit/78330c95db2735c8139b0320c2e81ee6f438adea))
### [2.1.12](https://github.com/mengshukeji/Luckysheet/compare/v2.1.11...v2.1.12) (2020-12-22)
### Features
* **api:** find ([ea97233](https://github.com/mengshukeji/Luckysheet/commit/ea97233a668b3a682f6f0b1ad3fec251b01c33ab))
### Bug Fixes
* **bug:** bug ([9357792](https://github.com/mengshukeji/Luckysheet/commit/9357792fd1c49737398cf86cdf87d9dbfe35df26)), closes [#359](https://github.com/mengshukeji/Luckysheet/issues/359) [#360](https://github.com/mengshukeji/Luckysheet/issues/360) [#376](https://github.com/mengshukeji/Luckysheet/issues/376) [#382](https://github.com/mengshukeji/Luckysheet/issues/382)
* **bug:** bug ([19560eb](https://github.com/mengshukeji/Luckysheet/commit/19560eba3fe36cce4ee65ba3e8ac80ab7ec8d620)), closes [#367](https://github.com/mengshukeji/Luckysheet/issues/367) [#370](https://github.com/mengshukeji/Luckysheet/issues/370)
* **bug:** bug ([0f257e8](https://github.com/mengshukeji/Luckysheet/commit/0f257e8f153bb6c0cf38fb85200c587aabac164c)), closes [#361](https://github.com/mengshukeji/Luckysheet/issues/361) [#364](https://github.com/mengshukeji/Luckysheet/issues/364) [#365](https://github.com/mengshukeji/Luckysheet/issues/365)
* **bug:** copy bug ([2bcbab9](https://github.com/mengshukeji/Luckysheet/commit/2bcbab9a9f4727fd03930962a2dbdcaec3401597))
* **feature:** functionButton ([5983cb0](https://github.com/mengshukeji/Luckysheet/commit/5983cb015e092e2edc1d3f27dba2d585fb4db099)), closes [#336](https://github.com/mengshukeji/Luckysheet/issues/336) [#381](https://github.com/mengshukeji/Luckysheet/issues/381)
* copy ([d177cc8](https://github.com/mengshukeji/Luckysheet/commit/d177cc8f5ee01d32932d1137920883209ec24be4))
### [2.1.10](https://github.com/mengshukeji/Luckysheet/compare/v2.1.9...v2.1.10) (2020-12-18)
### Bug Fixes
* **rowtitle:** bug ([8faeffe](https://github.com/mengshukeji/Luckysheet/commit/8faeffee08840a5e8119d9fc8ac7204248105616))
### [2.1.9](https://github.com/mengshukeji/Luckysheet/compare/v2.1.8...v2.1.9) (2020-12-17)
### Bug Fixes
* **bug:** bug ([54ae143](https://github.com/mengshukeji/Luckysheet/commit/54ae143aa268b5ce0253752a2a92b2ab22601b42)), closes [#222](https://github.com/mengshukeji/Luckysheet/issues/222) [#355](https://github.com/mengshukeji/Luckysheet/issues/355)
* **numeral:** userInfo ([871d381](https://github.com/mengshukeji/Luckysheet/commit/871d3819f7c734b604f19da1ba81bf5ee0ea0814)), closes [#338](https://github.com/mengshukeji/Luckysheet/issues/338)
### [2.1.8](https://github.com/mengshukeji/Luckysheet/compare/v2.1.7...v2.1.8) (2020-12-16)
### ⚠ BREAKING CHANGES
* **bug:** n
### Features
* **api add:** image ([16131b2](https://github.com/mengshukeji/Luckysheet/commit/16131b2776cd278bb7bddae674c206aa739f3a46)), closes [#270](https://github.com/mengshukeji/Luckysheet/issues/270)
* **changlang:** changLang ([cbc81e9](https://github.com/mengshukeji/Luckysheet/commit/cbc81e9e17ca56e09f9e697e5372650f3d6a476b)), closes [#318](https://github.com/mengshukeji/Luckysheet/issues/318)
* **collaborative editing:** collaborative editing ([6fe8726](https://github.com/mengshukeji/Luckysheet/commit/6fe87260e8986cd83e7bcf655594389c01739107)), closes [#199](https://github.com/mengshukeji/Luckysheet/issues/199) [#201](https://github.com/mengshukeji/Luckysheet/issues/201) [#202](https://github.com/mengshukeji/Luckysheet/issues/202)
* **condition format:** formula condition ([6c98bde](https://github.com/mengshukeji/Luckysheet/commit/6c98bded8dcf16aab4bcc89a63a62d3878c06cd3)), closes [#186](https://github.com/mengshukeji/Luckysheet/issues/186)
* **demo:** proxy ([bc64807](https://github.com/mengshukeji/Luckysheet/commit/bc64807de9e3f8f60ddc529c6b795c95aff1884c))
* **feature:** closeWebsocket api and ctrl ; ([9153bc7](https://github.com/mengshukeji/Luckysheet/commit/9153bc799db2aea947f2ba70a7b947daca55b844)), closes [#328](https://github.com/mengshukeji/Luckysheet/issues/328) [#326](https://github.com/mengshukeji/Luckysheet/issues/326)
* **hook:** add ([2c6b1c2](https://github.com/mengshukeji/Luckysheet/commit/2c6b1c21b3ad6535671745fd7483d9318f7e55ec))
* **print feature:** develop ([a0921b6](https://github.com/mengshukeji/Luckysheet/commit/a0921b62d73b8b3edcaf1c72dd9e35cd43848f2f))
### Bug Fixes
* **add forcecaculation config:** add ([e96d210](https://github.com/mengshukeji/Luckysheet/commit/e96d210fe544caa8b912720a274374bccb0cef7d))
* **bug:** bug ([95e26c3](https://github.com/mengshukeji/Luckysheet/commit/95e26c3fa07fa74c238c0c7b96b5b7ff91b79889)), closes [#330](https://github.com/mengshukeji/Luckysheet/issues/330)
* **bug:** bug ([c003f8a](https://github.com/mengshukeji/Luckysheet/commit/c003f8a4281f346c89226061851f71693208574a)), closes [#184](https://github.com/mengshukeji/Luckysheet/issues/184) [#337](https://github.com/mengshukeji/Luckysheet/issues/337)
* **bug:** bug ([4900b4a](https://github.com/mengshukeji/Luckysheet/commit/4900b4a0f2a82528e130d7281bb1f153ed3297fe)), closes [#331](https://github.com/mengshukeji/Luckysheet/issues/331)
* **bug:** bug ([b93ea6b](https://github.com/mengshukeji/Luckysheet/commit/b93ea6b66e444d387f230602dd02034b4b237369)), closes [#284](https://github.com/mengshukeji/Luckysheet/issues/284) [#296](https://github.com/mengshukeji/Luckysheet/issues/296)
* **bug:** bug ([57ff2b9](https://github.com/mengshukeji/Luckysheet/commit/57ff2b959b4be8d5cad559624d92f00e996d315f)), closes [#182](https://github.com/mengshukeji/Luckysheet/issues/182) [#220](https://github.com/mengshukeji/Luckysheet/issues/220)
* **bug:** bug ([31bdc4f](https://github.com/mengshukeji/Luckysheet/commit/31bdc4feae0037c92074b244e9e52363298b164d)), closes [#263](https://github.com/mengshukeji/Luckysheet/issues/263)
* **bug:** bug ([385bc03](https://github.com/mengshukeji/Luckysheet/commit/385bc039c91727655ea771c7a48d6f0890a275fb)), closes [#243](https://github.com/mengshukeji/Luckysheet/issues/243) [#226](https://github.com/mengshukeji/Luckysheet/issues/226)
* **bug:** bug ([88aa6c5](https://github.com/mengshukeji/Luckysheet/commit/88aa6c5b59964078c6a9cfffb41308c196a44953)), closes [#278](https://github.com/mengshukeji/Luckysheet/issues/278) [#276](https://github.com/mengshukeji/Luckysheet/issues/276) [#267](https://github.com/mengshukeji/Luckysheet/issues/267) [#215](https://github.com/mengshukeji/Luckysheet/issues/215)
* **bug:** copy to excel ([5cf72ec](https://github.com/mengshukeji/Luckysheet/commit/5cf72ec0781f0e3b2ddc77eac228812507ce66a2)), closes [#319](https://github.com/mengshukeji/Luckysheet/issues/319)
* **bug:** data verification range select ([6d60679](https://github.com/mengshukeji/Luckysheet/commit/6d606791abaa5d410ce68cfb49f8bc9c2dfaf609))
* **cell:** render ([ba21140](https://github.com/mengshukeji/Luckysheet/commit/ba2114055ba62b0401c76075054588642fa4fbf1))
* **demo:** websocket url ([cf77ec3](https://github.com/mengshukeji/Luckysheet/commit/cf77ec3307c0d44bc5303f606762c003d4f50b86))
* **dynamic array refresh fix:** fix ([b7d634f](https://github.com/mengshukeji/Luckysheet/commit/b7d634f0425dd8cb337784b10094d0952edc460a))
* **fix #209:** highlight ([ab2d8b7](https://github.com/mengshukeji/Luckysheet/commit/ab2d8b7b5467200e12c8d4c1ece014ebfc6ee7cc)), closes [#209](https://github.com/mengshukeji/Luckysheet/issues/209)
* **fix #209 ,fix #219:** highlight follow checkout keep highlight ([c547596](https://github.com/mengshukeji/Luckysheet/commit/c5475964e41eb7bb12d87b679dffba4b988abb30)), closes [#209](https://github.com/mengshukeji/Luckysheet/issues/209) [#219](https://github.com/mengshukeji/Luckysheet/issues/219)
* **fix #209 fix #219:** highlight follow checkout page ([0a5ca86](https://github.com/mengshukeji/Luckysheet/commit/0a5ca86ab808d2cb1da8cb14d93c5d787c50f540)), closes [#209](https://github.com/mengshukeji/Luckysheet/issues/209) [#219](https://github.com/mengshukeji/Luckysheet/issues/219)
* **fix #209 fix #219:** highlight follow, checkout keep highlight ([2c7b0bb](https://github.com/mengshukeji/Luckysheet/commit/2c7b0bbdf5adf1b2a6fc537e37825ab01ee3cf96)), closes [#209](https://github.com/mengshukeji/Luckysheet/issues/209) [#219](https://github.com/mengshukeji/Luckysheet/issues/219)
* **fix #290:** userinfo ([80d67e1](https://github.com/mengshukeji/Luckysheet/commit/80d67e157d010f8e59c472b2e6046c04efe9b966)), closes [#290](https://github.com/mengshukeji/Luckysheet/issues/290)
* **fix #290:** userinfo ([dddfc8f](https://github.com/mengshukeji/Luckysheet/commit/dddfc8f9418991466025682309e73950da6611cd)), closes [#290](https://github.com/mengshukeji/Luckysheet/issues/290)
* **fix #290:** userinfo ([27a770e](https://github.com/mengshukeji/Luckysheet/commit/27a770ee863356d2ef120970723bb048c510d9aa)), closes [#290](https://github.com/mengshukeji/Luckysheet/issues/290)
* **main canvas:** bottom space ([23c8a78](https://github.com/mengshukeji/Luckysheet/commit/23c8a78cb3bd387c7c609250de41b187105475b5))
* **tojson:** bug ([1c94783](https://github.com/mengshukeji/Luckysheet/commit/1c94783677bcfe6488caf39028f18e5b2505a737))
* setCellValue API 可设置自定义的属性,不显式设置v, v 不会丢失 ([6d45cf2](https://github.com/mengshukeji/Luckysheet/commit/6d45cf2ce63dca282f4a40ce5aaf628f94bfc8d1))
* jfrefreshgrid 函数第二个参数应该是个数组 ([c7cf87a](https://github.com/mengshukeji/Luckysheet/commit/c7cf87a49b1b8ce64fb21249cd05950fabc0e546))
* setCellFormat data 引用 ([ed50e47](https://github.com/mengshukeji/Luckysheet/commit/ed50e47b44e079bc76419ba3f96f04d964c70610))
* setCellValue 刷新页面时的历史记录问题 ([a2cf969](https://github.com/mengshukeji/Luckysheet/commit/a2cf96978f97b289d603aa404bcfaf8a0d64f87b))
* 修复alert ([94e0020](https://github.com/mengshukeji/Luckysheet/commit/94e0020acd49aed50810e6c133688c950690ab3c))
* 修复主动关闭socket仍然alert弹窗 ([e0bdb2c](https://github.com/mengshukeji/Luckysheet/commit/e0bdb2c4015355e428c5e8d567196d607606a38e))
* 修复主动关闭socket定时器仍运行问题 ([82a8731](https://github.com/mengshukeji/Luckysheet/commit/82a87319342c698c1a1a58972a9d59ab3b7e91cd))
* 初始化表单状态下标调整 ([3a54312](https://github.com/mengshukeji/Luckysheet/commit/3a54312c93a6daebf575639dd612e0d01be2a296))
* 复制选区虚线框正确显示 ([9d6a2ee](https://github.com/mengshukeji/Luckysheet/commit/9d6a2eed05ae660fb65515217e156817fc4d6443))
* 解决单击非时间日期单元格后还会跳出日期时间弹框 ([fc9eb4e](https://github.com/mengshukeji/Luckysheet/commit/fc9eb4e7984af6991b79acae6a2a5c0bbea5254f))
* **fix forcecaculation feature:** complete ([7568ceb](https://github.com/mengshukeji/Luckysheet/commit/7568ceb442acdfdedeb6d6e4d623bdcd2a8c4018))
* **formula contain text bug:** add iscell method ([89358d3](https://github.com/mengshukeji/Luckysheet/commit/89358d36045baca791f2b5e9d2152349bf5903cf))
* **formula update fix:** formula update only one level, when cell value change. Fix it ([cf6c5be](https://github.com/mengshukeji/Luckysheet/commit/cf6c5be8a45616e1002db0ff4b04b47c3ed4c38e))
### [2.1.7](https://github.com/mengshukeji/Luckysheet/compare/v2.1.6...v2.1.7) (2020-11-26)
### Features
* **demo:** tool function ([3baf93c](https://github.com/mengshukeji/Luckysheet/commit/3baf93cdb57238ee73ace3e7b9bca142fad81584))
* 修改日期能够正常的弹出格式框和设置对应格式的日期时间 ([2c27044](https://github.com/mengshukeji/Luckysheet/commit/2c2704473c1c5a77091acda45a46f39ebbad3592))
* 修改日期能够正常的弹出格式框和设置对应格式的日期时间 ([67c44e7](https://github.com/mengshukeji/Luckysheet/commit/67c44e7a68d948fcb90bd499ecc15cfb2bea5127))
### Bug Fixes
* **formula:** function ([dad6e2b](https://github.com/mengshukeji/Luckysheet/commit/dad6e2b2d144a31f4cfaaf84c90588e1a02ee006))
* **formular:** docs ([ddac582](https://github.com/mengshukeji/Luckysheet/commit/ddac582f696898a1a46fc0ce3eb5d245d20077ae))
* **hook:** function ([fb43a56](https://github.com/mengshukeji/Luckysheet/commit/fb43a56222c3d4c77b84efa9ff37eed8e1333a1a))
* **hook function:** cellupdate ([5e8f71f](https://github.com/mengshukeji/Luckysheet/commit/5e8f71f32e5104769dbe6e0c61de3cd26b286344))
* ie11右下角菜单图标会出现错位 ([34fd6e7](https://github.com/mengshukeji/Luckysheet/commit/34fd6e74cb87f9563ff28979d9f5f8a192fb558a))
* 重复create会出现很多问题 ([8f22790](https://github.com/mengshukeji/Luckysheet/commit/8f227904fe9600ea17fdc346924d73c3bc81a041))
### [2.1.6](https://github.com/mengshukeji/Luckysheet/compare/v2.1.5...v2.1.6) (2020-11-23)
### ⚠ BREAKING CHANGES
* yes
q
### Features
* **api:** hook function ([a0db530](https://github.com/mengshukeji/Luckysheet/commit/a0db530295bca24b81b02171a073f6b6f1227ce6))
* **hook:** add hook function ([215dec2](https://github.com/mengshukeji/Luckysheet/commit/215dec27d796ee9b5be7857a425093a53db84332))
* q ([54a42a2](https://github.com/mengshukeji/Luckysheet/commit/54a42a274a96eb3334602fd0de65e1d4b2fc492a))
* **bottom alignment of english letters:** fix ([a596d2f](https://github.com/mengshukeji/Luckysheet/commit/a596d2fcd617cac196e3336a8dfe8ac9ba58c9f7))
* **config:** sheetRightClickConfig ([59c7cb3](https://github.com/mengshukeji/Luckysheet/commit/59c7cb34a33450e59023fd1ae5e615f3e40ef0d9))
* add underline button ([df56ba6](https://github.com/mengshukeji/Luckysheet/commit/df56ba6f359bb12eb765b26b973100c554601eca))
* use npm dependencies ([e4bd439](https://github.com/mengshukeji/Luckysheet/commit/e4bd439a0e96dbec0cb3a45e01aaecb129fab2ad))
* **row and column width:** batch change the height and width of the selected row and column ([956bd2a](https://github.com/mengshukeji/Luckysheet/commit/956bd2a01012b429c58a14b5b88d02a02350b662))
### Bug Fixes
* **bug fix:** [#26](https://github.com/mengshukeji/Luckysheet/issues/26) [#91](https://github.com/mengshukeji/Luckysheet/issues/91) ([a26ffd8](https://github.com/mengshukeji/Luckysheet/commit/a26ffd8ac388db475dfd38e4ae83098eeeee8bc8))
* **cooperative:** bug ([9e48c72](https://github.com/mengshukeji/Luckysheet/commit/9e48c72a47022188d387558b5b5f3a6250878c65))
* **demo:** ie11 ([e7ddc39](https://github.com/mengshukeji/Luckysheet/commit/e7ddc397c8b1e421c63f3e9f661ced99a3d81556)), closes [#234](https://github.com/mengshukeji/Luckysheet/issues/234)
* **fix #212:** cancel highlight ([289d3ef](https://github.com/mengshukeji/Luckysheet/commit/289d3ef46ebadf9662d272109a1f24d2a8b0dc1d)), closes [#212](https://github.com/mengshukeji/Luckysheet/issues/212)
* **fix #219:** checkout ([15dca04](https://github.com/mengshukeji/Luckysheet/commit/15dca040840d228f6326d4eecad917df38e15f04)), closes [#219](https://github.com/mengshukeji/Luckysheet/issues/219)
* **fix #219:** clear info ([080f027](https://github.com/mengshukeji/Luckysheet/commit/080f0275b80143026cc30e8450c901715fc51c19)), closes [#219](https://github.com/mengshukeji/Luckysheet/issues/219)
* sheet menu position ([a40f679](https://github.com/mengshukeji/Luckysheet/commit/a40f679fde6700c90cd66c66bb070afabb31fb83))
* **iconfont:** conflict ([bf4d539](https://github.com/mengshukeji/Luckysheet/commit/bf4d539dddc4cef232f8eae602b39980ded5b208))
* **mousemove hook error:** fix ([89b93e7](https://github.com/mengshukeji/Luckysheet/commit/89b93e71460750be8f736df0dbc13675daf5d72d))
### [2.1.5](https://github.com/mengshukeji/Luckysheet/compare/v2.1.4...v2.1.5) (2020-11-03)
### Features
* **cell date picker:** cell date picker and bug solve ([2996ae9](https://github.com/mengshukeji/Luckysheet/commit/2996ae9cab724714903d00e0b63022abc4a1a3b6))
* **cell hooks add:** go to document for detail ([927ff46](https://github.com/mengshukeji/Luckysheet/commit/927ff46949f688a5bcffcb3fe48dc6b4b12b61c9))
* **config:** custom menu button config ([14eb78e](https://github.com/mengshukeji/Luckysheet/commit/14eb78e153cbce726adf9e093702f9b93af1fa03))
* **config:** sheetbar ([3555746](https://github.com/mengshukeji/Luckysheet/commit/3555746f4cc8ef2c1fe163a34edd428f1a6377ed))
* **date format:** date format Chinese ([8f8d0cb](https://github.com/mengshukeji/Luckysheet/commit/8f8d0cb8c5563a31afba3fe11b525e6bccd5eb56))
* **hyperlink:** add hyperlink function ([439dff4](https://github.com/mengshukeji/Luckysheet/commit/439dff4330ab5053643331286091d44ae910fb8d))
* **hyperlink:** perfect hyperlink function ([5adfc60](https://github.com/mengshukeji/Luckysheet/commit/5adfc6055bf4cfed7f1ff40933d292057196bc7e))
* **statisticbar:** config docs ([c1ed417](https://github.com/mengshukeji/Luckysheet/commit/c1ed417074e89e665f9ef39ee186db9106904c4e))
* **tojson:** api/docs ([8e410f5](https://github.com/mengshukeji/Luckysheet/commit/8e410f5d3cd61724230b3024898d6de3c6c41101))
### Bug Fixes
* **bug:** bug ([ad73f9a](https://github.com/mengshukeji/Luckysheet/commit/ad73f9a679d77721d8af0a483dffe70b90e56412)), closes [#129](https://github.com/mengshukeji/Luckysheet/issues/129)
* **bug:** bug ([801cbe5](https://github.com/mengshukeji/Luckysheet/commit/801cbe5a8040d80f2e672b3607c0b92c922281a9))
* **bug:** bug ([f8716c1](https://github.com/mengshukeji/Luckysheet/commit/f8716c18db05c7ab8bf59d1feb0dc4c3b364c560)), closes [#67](https://github.com/mengshukeji/Luckysheet/issues/67) [#85](https://github.com/mengshukeji/Luckysheet/issues/85)
* **bug:** bug ([0909f5e](https://github.com/mengshukeji/Luckysheet/commit/0909f5e4c957e3d3248a8c86d6e092c5a5396112)), closes [#142](https://github.com/mengshukeji/Luckysheet/issues/142) [#132](https://github.com/mengshukeji/Luckysheet/issues/132)
* **bug:** dataVerification and sheet move and delete cell bug ([4815d86](https://github.com/mengshukeji/Luckysheet/commit/4815d86ce564da43aa1ced3b48d38e88afc39f77))
* **conflict:** conflict ([b11de26](https://github.com/mengshukeji/Luckysheet/commit/b11de26c4d2dbdd7e9d4363558e95d4433f26585))
* **conflict:** toolbar ([8cfa6ac](https://github.com/mengshukeji/Luckysheet/commit/8cfa6ac1bec8bcb156fe45e8c488aa7026b65738))
* **fix bug with inline string rotate wrap:** add change to max, fix height error ([1988687](https://github.com/mengshukeji/Luckysheet/commit/198868719ffb19738ee5ecc1ee060a0840fa92df))
* **hide row/column:** right click menu ([8070858](https://github.com/mengshukeji/Luckysheet/commit/8070858f6c35f11ee8cf2692d8828d0e78c46d92)), closes [#37](https://github.com/mengshukeji/Luckysheet/issues/37)
* **restore demo:** restore demo ([e799862](https://github.com/mengshukeji/Luckysheet/commit/e7998627400b82bf082bad3c984f4d26e3c9f43a))
### [2.1.3](https://github.com/mengshukeji/Luckysheet/compare/v2.1.2...v2.1.3) (2020-10-22)
### Features
* **api add:** getRowHeight getColumnWidth getDefaultRowHeight getDefaultColumnWidth ([a72f38b](https://github.com/mengshukeji/Luckysheet/commit/a72f38b641a999bdf15281029777222e0bf79e85))
* **api add:** setRowHeight setColumnWidth setSheetZoom setDataVerification deleteDataVerification ([0fd06cc](https://github.com/mengshukeji/Luckysheet/commit/0fd06cc4d7f465967b3bcc91e0b2484ba61b71f6))
* **api add:** setSheetOrder refresh getScreenshot setWorkbookName undo redo ([b2a4617](https://github.com/mengshukeji/Luckysheet/commit/b2a46171c2cfcd9682537a801a1ea68e7e2d3ba0))
* **api and config:** api exitEditMode() scroll() config defaultFontSize ([5eedc48](https://github.com/mengshukeji/Luckysheet/commit/5eedc48a764727bebe09fd626087b158b2979c1e))
* **support spanish:** support Spanish ([41c527c](https://github.com/mengshukeji/Luckysheet/commit/41c527c6f39a8cb3a99d3fc70603f29ab7ba0a82))
### Bug Fixes
* **api:** api ([14d72eb](https://github.com/mengshukeji/Luckysheet/commit/14d72ebe56a2f87f0df5d14595c60e41fe9af077))
* **bug:** postil image zoom ([76dbb5c](https://github.com/mengshukeji/Luckysheet/commit/76dbb5cc613c8290696e917c554aff934050b6a2))
* **destroy function repaire:** repair ([02b9fe7](https://github.com/mengshukeji/Luckysheet/commit/02b9fe75f28a87a475bd0593522b20d030d31b85))
* **event name:** fix ([f64ba54](https://github.com/mengshukeji/Luckysheet/commit/f64ba54455e2a757c72fb4c0110fef2cc5ccdaab))
* **fix focus after formula edit:** fix ([0ee5f31](https://github.com/mengshukeji/Luckysheet/commit/0ee5f31f5ce84c1a7fab2af17ff102790603e3bb))
* **fix text whole text wrap bug:** fix ([ef3d324](https://github.com/mengshukeji/Luckysheet/commit/ef3d324e80bc648080b1e5a53108b30dccf74520))
* **function array value error:** fix it ([31e4b3d](https://github.com/mengshukeji/Luckysheet/commit/31e4b3d9e4cf16f005f8cede059b7cb1cab05031))
* **function update fix:** fix bug ([28835bb](https://github.com/mengshukeji/Luckysheet/commit/28835bb7533087eb16866b4cdaebe94231c7832b))
* **image:** resize and change row or column size ([05c49a2](https://github.com/mengshukeji/Luckysheet/commit/05c49a2fad21706ee7e232fe75d213fed3724109))
* **image fuzzy:** fix it ([8fb1a88](https://github.com/mengshukeji/Luckysheet/commit/8fb1a88669d772a0067edb614e5974ada7301c9c))
* **image zoom:** fix ([1337178](https://github.com/mengshukeji/Luckysheet/commit/1337178a991b4aa99a6e255e50d69e2c8ca47b82))
* **index offset indirect fix:** improve the overall execution efficiency of the function ([7a2f8d0](https://github.com/mengshukeji/Luckysheet/commit/7a2f8d02daf2cc0180adc56dafcfb1d1f6d022ec))
* **inline style:** inline style cell delete bug ([8067a01](https://github.com/mengshukeji/Luckysheet/commit/8067a012ec59a39c5a389d357c3ba2c19bc6acb9))
* **lineheight change to 0.5:** similar to excel ([760378b](https://github.com/mengshukeji/Luckysheet/commit/760378b369b9bf71da0182ea3b413a0accb23c38))
* **more btn:** fix more btn align middle ([c5112e9](https://github.com/mengshukeji/Luckysheet/commit/c5112e9700cd89d4820cbbbefdc0e1d3d0ed940a))
* **more formats toolbar:** fix more formats toolbar can't sync with cell, fix mac delete button can't delete cell, fix can't delete cell with inline-style ([23fcb13](https://github.com/mengshukeji/Luckysheet/commit/23fcb137cb594cfb4bc6dfe2ac86d306c42427f9))
* **selection bug:** fix it ([b83447d](https://github.com/mengshukeji/Luckysheet/commit/b83447d61805192d0310b20e97821eb01b790fb7))
* **setcellvalue delete function fix:** fix it ([00b351f](https://github.com/mengshukeji/Luckysheet/commit/00b351fa0dc01c32cf9c6b8852937e7d2ceb292d))
* **sheet name contains squotes bug:** formla can not execute, when sheet name contains squotes ([fc1dd83](https://github.com/mengshukeji/Luckysheet/commit/fc1dd837d4a3d1639914923201e853e55a865143))
* **text wrap postion bug:** wrap and rotation postion wrong ([9538972](https://github.com/mengshukeji/Luckysheet/commit/9538972f910ed77e02ccb55c0b96386fcf87297b))
* **the bug with first word is space:** fix ti ([6ae8319](https://github.com/mengshukeji/Luckysheet/commit/6ae83196cb50fafbf5657104babd124fac27b818))
* **update number add quote automatically:** similar to excel ([05b01a6](https://github.com/mengshukeji/Luckysheet/commit/05b01a6c95a5d0736c51c5c1ca41e9eb463122d8))
* **validation of "0" values:** fix ([7255c51](https://github.com/mengshukeji/Luckysheet/commit/7255c51d7b46523ff423ee5560b78d18f8535821))
## [2.1.0](https://github.com/mengshukeji/Luckysheet/compare/v2.0.0...v2.1.0) (2020-10-10)
### ⚠ BREAKING CHANGES
* **frozen,docs:** when init workbook and sheet has frozen row or column,you need init sheet's
property frozen
### Features
* **add autocalculationmerge sheet attribute:** it can auto calculate merge infomation ([f7e30cf](https://github.com/mengshukeji/Luckysheet/commit/f7e30cf946f9c5945fd7e69bf4a3273f54e2616f))
* **add force cacultion formula:** add forceCaculate parameter ([4dd82ad](https://github.com/mengshukeji/Luckysheet/commit/4dd82ad131e0a936c040852657b05ffd53e4b465))
* **api:** add some api functions ([37910ab](https://github.com/mengshukeji/Luckysheet/commit/37910abea38dc37fcb5cc5b905c7b028e3390c10))
* **api:** api ([6f7ca26](https://github.com/mengshukeji/Luckysheet/commit/6f7ca26ba22c47ed0746363dccfd1e392040aed9))
* **api:** api ([66aecbe](https://github.com/mengshukeji/Luckysheet/commit/66aecbe7fe16be03c9c62e1ebbf941c1a9f4bac7))
* **api:** provides an api for users ([b176753](https://github.com/mengshukeji/Luckysheet/commit/b176753ceacba3ab8a243bfe27c5ea8d9455d617))
* **api add:** api add ([e4198fa](https://github.com/mengshukeji/Luckysheet/commit/e4198fa5bda4f6787a3153a113d2be10cfe64fd5))
* **api add:** deleteRangeConditionalFormat clearRange deleteRange ([44cf72a](https://github.com/mengshukeji/Luckysheet/commit/44cf72a1c7592ac5227a92c3e325e7f5088bca30))
* **api add:** setSheetDelete setSheetCopy setSheetHide setSheetShow setSheetName setSheetColor ([62f641f](https://github.com/mengshukeji/Luckysheet/commit/62f641fe7f519b8679c4e006427a74e2e17a8f98))
* **data verification:** data verification ([a661d30](https://github.com/mengshukeji/Luckysheet/commit/a661d303101ee6ebedf22aabb60f7a5a50722b0e))
* **data verification:** data verification ([9cbbbce](https://github.com/mengshukeji/Luckysheet/commit/9cbbbce556444182536bf0a0641c5db22d4a6007))
* **delete cell:** delete cell ([d7de718](https://github.com/mengshukeji/Luckysheet/commit/d7de718d5e6e6308cae1ccf7a7699c3f7d790d8f))
* **draw use sacle:** cancel manual devicePixRatio, use context sacle ([c832283](https://github.com/mengshukeji/Luckysheet/commit/c832283c9709a8393f2c6b74d50e984c7720bb34))
* **drawmain efficiency optimization:** efficiency optimization ([37080fa](https://github.com/mengshukeji/Luckysheet/commit/37080faa39dccb23539d346080baf07ad367c2d7))
* **editor box position fit:** show diffrent position acording to align ([636046d](https://github.com/mengshukeji/Luckysheet/commit/636046dbb2f005c2e6110b3559b72a59a7c67d87))
* **fix:** fix ([9830714](https://github.com/mengshukeji/Luckysheet/commit/983071467d21a5eb1a35c0c427005e95364128db))
* **hide column:** hide column ([9f05959](https://github.com/mengshukeji/Luckysheet/commit/9f05959d4d5fea7fc26e0cedb7217f0be92bcae9))
* **image:** copy and paste ([33d6c96](https://github.com/mengshukeji/Luckysheet/commit/33d6c961bb2d88fa1ba73448c2b808957f750544))
* **image insert:** image insert ([4232dfc](https://github.com/mengshukeji/Luckysheet/commit/4232dfc7832846013e623d13f6157ee1e371bda3))
* **inline string:** finished ([325b66c](https://github.com/mengshukeji/Luckysheet/commit/325b66ccd0e7508535f16a7dfc51acba622cfc14))
* **inline string:** operation like excel ([9ac9f08](https://github.com/mengshukeji/Luckysheet/commit/9ac9f08acf088b614b5318000df2e0d442df21fd))
* **inline string:** when focus cell, show inline string content ([713805c](https://github.com/mengshukeji/Luckysheet/commit/713805cd031ccdf3e5ef1b70da504b635fed85fa))
* **inline string render finished:** begin to develop edit feature ([2ffd9ae](https://github.com/mengshukeji/Luckysheet/commit/2ffd9aedd82e9abaf32b374337503f25d56fd9da))
* **insert image:** insert image ([cf3ba93](https://github.com/mengshukeji/Luckysheet/commit/cf3ba930cadc90e3fc753ac30154974e74089cfc))
* **insert image perfect:** insert image perfect ([ad0a88a](https://github.com/mengshukeji/Luckysheet/commit/ad0a88a8d412202692ce1611f6ac7fe4ac30d2e9))
* **mobile touch event optimized:** very smooth, good experience ([0ed0bf6](https://github.com/mengshukeji/Luckysheet/commit/0ed0bf63ba06895a2ea39c581d0180db6c0d9266))
* **new style:** new style ([5c8d603](https://github.com/mengshukeji/Luckysheet/commit/5c8d603fc41e9c214cb3dca84a147b39f2f6ce06))
* **optimization function:** setCellvalue support any cell param ([9b208e4](https://github.com/mengshukeji/Luckysheet/commit/9b208e4e2eeeaae09dbe75b245c989f98747613a))
* **protection feature:** protection feature similar to Excel ([a71c92a](https://github.com/mengshukeji/Luckysheet/commit/a71c92a5f05aaed6c3df1556a81fc1b2ed97419a))
* **zoom feature beta:** zoom in and zoom out sheet ([249aa02](https://github.com/mengshukeji/Luckysheet/commit/249aa02fa6c74eb854034ee0913a73267b6057cc))
* **zoom gui:** zoom plus and minus, restore origin, slider ([d70dab4](https://github.com/mengshukeji/Luckysheet/commit/d70dab4938ff33e1fcefdd15492279347efe6b33))
* **zoom redo undo suport:** redo undo ([4d03906](https://github.com/mengshukeji/Luckysheet/commit/4d0390675f3aa021f7e15bf529a8102830878202))
### Bug Fixes
* **a few bug fix:** fix ([f07e25d](https://github.com/mengshukeji/Luckysheet/commit/f07e25d0010775b71c1e73cd3ed2db6413d661ca))
* **add button bug:** fix ([3250ef6](https://github.com/mengshukeji/Luckysheet/commit/3250ef69606d24518d7b615806c1210c2ce0a684))
* **allowedit dont work ,when press del:** allowEdit dont work ,when press DEL ([10dccec](https://github.com/mengshukeji/Luckysheet/commit/10dcceccc7f5f04afe70adebb4db59046382abb6))
* **array unique very slow:** fix it ([20f3cb3](https://github.com/mengshukeji/Luckysheet/commit/20f3cb3e2028e455b49a4d1947ac8f02186363af))
* **big data slowly:** speed up ([5109873](https://github.com/mengshukeji/Luckysheet/commit/5109873500996ac4e17abb95899f1fe5950f33b9))
* **blank border position:** fix ([d285d9f](https://github.com/mengshukeji/Luckysheet/commit/d285d9fb5e3ff74385debaf493ad6125173644a4))
* **bug:** bug ([6bb113b](https://github.com/mengshukeji/Luckysheet/commit/6bb113bb4421fc0497f7cf833975e4e2e7544aaa))
* **bug:** bug ([4806de8](https://github.com/mengshukeji/Luckysheet/commit/4806de8de501c08bde6e69be1779b3327ecf2364))
* **bug:** bug ([0cb1ec2](https://github.com/mengshukeji/Luckysheet/commit/0cb1ec23c26e2393a14475d982349a310587e7a7))
* **bug:** bug ([735d1c8](https://github.com/mengshukeji/Luckysheet/commit/735d1c8b5c3777615b20795f70e867e576b8afbf))
* **bug:** bug ([ad1ac61](https://github.com/mengshukeji/Luckysheet/commit/ad1ac6154502193a7e34177a08ce678522d08a03))
* **bug:** bug ([27d1be0](https://github.com/mengshukeji/Luckysheet/commit/27d1be0037c2bd5ba290e7b0f9db229de04582d9))
* **bug:** bug ([dea7bbf](https://github.com/mengshukeji/Luckysheet/commit/dea7bbf44414be31191841443119a3505003522e))
* **bug:** bug ([061ea20](https://github.com/mengshukeji/Luckysheet/commit/061ea2003dca838dffb9ee92d1c43f28c64a9978))
* **bug:** bug ([ba0b047](https://github.com/mengshukeji/Luckysheet/commit/ba0b04752f35f32df82229339bdb3f295fbcecb2))
* **bug:** bug ([7263008](https://github.com/mengshukeji/Luckysheet/commit/726300811a9fdb6e36d19187764aa73daacfc7b7))
* **bug:** bug ([c578c0e](https://github.com/mengshukeji/Luckysheet/commit/c578c0e34b6e589dba2ef29146d894b5c6333676))
* **bug:** bug ([fc8f61b](https://github.com/mengshukeji/Luckysheet/commit/fc8f61b0154f2220c233e680eaf814edfce3a52b))
* **bug:** bug ([fb3b512](https://github.com/mengshukeji/Luckysheet/commit/fb3b5122a5f4e333cca581251ef6d672da767b37))
* **bug:** bug ([6236e5e](https://github.com/mengshukeji/Luckysheet/commit/6236e5e8d6621c0ad829206704bdc2fac684d3bc))
* **bug:** bug ([f057d7d](https://github.com/mengshukeji/Luckysheet/commit/f057d7d281fccc7094c4f806c4590dca39cfbaa0))
* **bug fix:** [#55](https://github.com/mengshukeji/Luckysheet/issues/55) [#50](https://github.com/mengshukeji/Luckysheet/issues/50) [#54](https://github.com/mengshukeji/Luckysheet/issues/54) ([5caf2b0](https://github.com/mengshukeji/Luckysheet/commit/5caf2b028c962e8ca2e6bd1c92fed3e6a9fb462d))
* **bug fix:** pivotTable blank title disapear, merge cell is recognized as range ([47fe25c](https://github.com/mengshukeji/Luckysheet/commit/47fe25c32107e719115a98ceef2ed97ae6161f3b))
* **bugs:** fix issue [#27](https://github.com/mengshukeji/Luckysheet/issues/27) [#29](https://github.com/mengshukeji/Luckysheet/issues/29) ([5d57267](https://github.com/mengshukeji/Luckysheet/commit/5d572676d46692719309c20e536d001ccfe2cd2f))
* **celloverflow border bug:** celloverflow border bug ([86403c2](https://github.com/mengshukeji/Luckysheet/commit/86403c20b329ea4106d6498c33927b714e22941b))
* **change sheet:** change sheet must setTimeOut ([e51457e](https://github.com/mengshukeji/Luckysheet/commit/e51457ef492ae74b77a0298931268b9f14feaa44))
* **change sheet bug:** multiple refresh canvas bug ([7a625e0](https://github.com/mengshukeji/Luckysheet/commit/7a625e0dae187cc7af8e10e3449abf666fd332eb))
* **change sheet scroll bar fix:** change sheet scroll bar dont restore ([02d2655](https://github.com/mengshukeji/Luckysheet/commit/02d26557a52b7cef0cb3b2b8d14996eb29fafa51))
* **chart:** chart ([2be467d](https://github.com/mengshukeji/Luckysheet/commit/2be467d6a4b385d7d7bb0585c9be7a227614a04b))
* **cloumn and row highlight bug:** column and row highlight bar disapear ([c806211](https://github.com/mengshukeji/Luckysheet/commit/c80621118e28f711b1513c869da36989c1a70c8f))
* **columlen:** columlen ([b656c27](https://github.com/mengshukeji/Luckysheet/commit/b656c27a3971b756ea809f4c1010ae28310569da))
* **copy cut paste bug:** bug fix ([ade56d5](https://github.com/mengshukeji/Luckysheet/commit/ade56d5b5ff38dd5095234b71bc89927841fa387))
* **demo fix:** fix ([3d17426](https://github.com/mengshukeji/Luckysheet/commit/3d174260e27793d1634c5f15b83a4aa9ca4100de))
* **demo fix:** fix ([732f678](https://github.com/mengshukeji/Luckysheet/commit/732f6788bcff9ddcf4b0e6bc266b3be9e28eea41))
* **demo fontlist url change:** local path ([feb89b3](https://github.com/mengshukeji/Luckysheet/commit/feb89b301b116745e82a2b17071909d7a4873562))
* **filter option bug:** position error ([3324512](https://github.com/mengshukeji/Luckysheet/commit/33245124be8972d1e011c047caf657275ac76916))
* **fix:** bug fix ([52375dc](https://github.com/mengshukeji/Luckysheet/commit/52375dcb416f435a1adea1fa3abeb486a73d513f))
* **fix:** fix ([194dea1](https://github.com/mengshukeji/Luckysheet/commit/194dea17672cc15e76b364b788f0818299b5e64c))
* **fix bug:** param dont remenber change ([0425e4e](https://github.com/mengshukeji/Luckysheet/commit/0425e4eef2c585873a61efe9ee34496aab40b810))
* **fix bugs:** fix ([bbaafe0](https://github.com/mengshukeji/Luckysheet/commit/bbaafe0d68d670b7621d616db5f91394ded8f573))
* **fix index.html:** fix ([e980cd9](https://github.com/mengshukeji/Luckysheet/commit/e980cd91afee781a004d7e207283e41990b4e45c))
* **fix number to column title bug:** if column title is big , it will show undefined ([2d6e73e](https://github.com/mengshukeji/Luckysheet/commit/2d6e73eb3fba5ebd85b76d22ba4ffdc9c5197b58))
* **fix touch:** touch fix ([d884a69](https://github.com/mengshukeji/Luckysheet/commit/d884a698d6f62aa21bea7d76705682e7406e7973))
* **fix wrap bug:** alt + enter twice bug ([789bab5](https://github.com/mengshukeji/Luckysheet/commit/789bab5e5d712af889577ed141387c02a049f21f))
* **float calculate bug:** fix it ([ef2a96a](https://github.com/mengshukeji/Luckysheet/commit/ef2a96a7cd6d341810b99698f26063862cf33e35))
* **fonts bug on ie:** fit it ([f9a1546](https://github.com/mengshukeji/Luckysheet/commit/f9a1546ca783c058994759dc3443d2e0d9929267))
* **format of formula cell bug fix:** if cell has format , it is no effect ([1f6ebad](https://github.com/mengshukeji/Luckysheet/commit/1f6ebad36da9de608bc32bddc945a5e3bb68528d))
* **formula -(1-2) error:** fix it ([dee2333](https://github.com/mengshukeji/Luckysheet/commit/dee2333b295aa63fae544c075a98f993c1c3e84c))
* **formula bug:** formula bug ([6c84420](https://github.com/mengshukeji/Luckysheet/commit/6c84420ad4461281ba87378af41cde0e5a7fee93))
* **formula efficiency up:** speed up ([d05151f](https://github.com/mengshukeji/Luckysheet/commit/d05151f474145cb765a60b2f118c222f8b488efb))
* **formula initialization bug:** if formula has cross sheet param, initial this ([c5f6254](https://github.com/mengshukeji/Luckysheet/commit/c5f6254bccd89a90abfa3a6d6728416983ebbb4c))
* **frozen bug:** fix ([91daa07](https://github.com/mengshukeji/Luckysheet/commit/91daa07ec94255f9135d423aa17d9425c0ffe58d))
* **frozen bug and style change:** fix bug ([7cfd0d9](https://github.com/mengshukeji/Luckysheet/commit/7cfd0d914c8999cfd4dbb2bca50f5766645cb108))
* **frozen,docs:** frozen,docs ([e1bd844](https://github.com/mengshukeji/Luckysheet/commit/e1bd844749fa05a7b178565a90bbdba0c81ce1fe))
* **function box input bug:** editor box and function box fix ([4ebb79d](https://github.com/mengshukeji/Luckysheet/commit/4ebb79d67f50dc46f97bc64a0cef0ba8d44e5c12))
* **green label size fix:** fix ([b0734b5](https://github.com/mengshukeji/Luckysheet/commit/b0734b57bb42c55e99eb831c0ca24053ea4aa6a8))
* **hide row and column fix:** add lines ([c430d66](https://github.com/mengshukeji/Luckysheet/commit/c430d6625a23b0f4b8ef903ae62e82833ed0618f))
* **hot key bug fix:** range bug when formula move selection ([f4625d1](https://github.com/mengshukeji/Luckysheet/commit/f4625d1dc38d6f69fddb0ae131d54f65bd7bcbd7))
* **image background opacity:** fix ([d61d3a0](https://github.com/mengshukeji/Luckysheet/commit/d61d3a07e55978350e9e5171537fee1457847209))
* **image,config:** image,config ([2dddfaa](https://github.com/mengshukeji/Luckysheet/commit/2dddfaa8f1a13476f512db0e0d27742ebebb7f35))
* **inline string bug:** style lost when change cell to inline string, input error ([405d90b](https://github.com/mengshukeji/Luckysheet/commit/405d90bfec0c7b47dee64e2034aeec8686c53e32))
* **inline string finished:** fix some bus ([57e7518](https://github.com/mengshukeji/Luckysheet/commit/57e75188ffb718e92251cb9813ae47b467410889))
* **inline string space dont recognize:** fix it ([ddc5c5d](https://github.com/mengshukeji/Luckysheet/commit/ddc5c5dde9a4d4db2ee42207383d696c12c58249))
* **input range bug:** fix it ([5412721](https://github.com/mengshukeji/Luckysheet/commit/5412721675598979689e4de31ec37c2e807c7c16))
* **jquery error:** jquery error ([1a2fed9](https://github.com/mengshukeji/Luckysheet/commit/1a2fed99871d79bcb895af1796909ee3e286e05f))
* **menubutton.js fonts:** fix bug ([1e62de3](https://github.com/mengshukeji/Luckysheet/commit/1e62de3d2f358e99373259600c736ca83601d2ba))
* **mobile text dose not display:** fix bug ([19922c7](https://github.com/mengshukeji/Luckysheet/commit/19922c76dd6afc4991ca3816262d40a6659baa5f))
* **mobile touch:** moubile touch fix ([04e2b8e](https://github.com/mengshukeji/Luckysheet/commit/04e2b8e06965673f807a46fbcda2a403711ec7ea))
* **my english is pool:** fix ([26ff1fd](https://github.com/mengshukeji/Luckysheet/commit/26ff1fd21180e2c795dcc24ed4d4aa2d5ba1f689))
* **no fullscreen bug:** when no fullscreen , div go to top ([64f7d0e](https://github.com/mengshukeji/Luckysheet/commit/64f7d0e6c44c24f21e6e7d8d16beac6f23a5d770))
* **normal style change bug:** fit error ([f24eb7f](https://github.com/mengshukeji/Luckysheet/commit/f24eb7f69c5c9ae53832f130a27473a686720e72))
* **offset indirect formula fix:** fix bug ([d8dfe50](https://github.com/mengshukeji/Luckysheet/commit/d8dfe50782108745e5f132c0bbb1438f7180d198))
* **old chrome dont surport actualboundingboxascent:** fix it and make it beautiful ([5c503d8](https://github.com/mengshukeji/Luckysheet/commit/5c503d851945d5ece1d69c2da8fa26c330d13930))
* **paste bug:** fixed ([76d966f](https://github.com/mengshukeji/Luckysheet/commit/76d966f27eb7632061b97a438d07a63f88704878))
* **pivot table bug:** bug ([9fcc209](https://github.com/mengshukeji/Luckysheet/commit/9fcc209b936eed2057a09b1f070d62832c9801b1))
* **pivot table change sheet bug:** if prevous sheet is pivot table and pennel is closed, change bug ([7cac8e6](https://github.com/mengshukeji/Luckysheet/commit/7cac8e62631d90bea0521498e9980234fde88fc3))
* **pivot table filter bug:** change sheet bug ,after filter pivot table ([c7c1999](https://github.com/mengshukeji/Luckysheet/commit/c7c1999081289c70b6e575e9e37fae82bdfe438c))
* **pivot table show error:** when column area have field and row area is null,pivot table show error ([04bc51c](https://github.com/mengshukeji/Luckysheet/commit/04bc51cf8dc5ff24fc5d71b3bbf755a9787ca57d))
* **remain cell style in inline string mode:** click cell and change cell style like to Excel ([7d0438a](https://github.com/mengshukeji/Luckysheet/commit/7d0438a10db44f371c23daccb9c066f30773e307))
* **render:** render ([40550d6](https://github.com/mengshukeji/Luckysheet/commit/40550d6e59c44e0f47e23f8b5fac4c5e79a5c122))
* **render bug fix:** new render method ([a1bcf81](https://github.com/mengshukeji/Luckysheet/commit/a1bcf81562ebc8c8327baad01d5e814e23fae647))
* **rotate text position mistake, when sheet zoom:** fix zoom bug, fix strike and underline bug ([6680a13](https://github.com/mengshukeji/Luckysheet/commit/6680a134252a65b346b0a99142998ced277e8adf))
* **scroll bug:** scroll bug ([3637fa4](https://github.com/mengshukeji/Luckysheet/commit/3637fa4121340e6278f12104e7877c450e92d511))
* **several bug and new feature:** formula calculation , quotePrefix add ([5a95304](https://github.com/mengshukeji/Luckysheet/commit/5a95304289714d130501faae352dc07fb21dbf68))
* **sheet change arrow:** fix bug ([4a7850b](https://github.com/mengshukeji/Luckysheet/commit/4a7850b86ef1086fe18fa7961a62bbc622ed760d))
* **splines and dynamicarray bug fix:** formula calculation update is finished ([a59aa04](https://github.com/mengshukeji/Luckysheet/commit/a59aa04e4db70e3d90c6109a18ea6a7d2747c156))
* **ssf column resize:** change ([2a09f59](https://github.com/mengshukeji/Luckysheet/commit/2a09f5977e35a388c42d4b43d7fbe6df891234db))
* **store cache:** bug fix ([cbd9014](https://github.com/mengshukeji/Luckysheet/commit/cbd90140e0aae293b40724bce692b861047d47c3))
* **text get wrong height when zoom:** fix height ([106f1fd](https://github.com/mengshukeji/Luckysheet/commit/106f1fd111a75778a2c61424290f33295cec9964))
* **toolbar:** menu button style ([d18478c](https://github.com/mengshukeji/Luckysheet/commit/d18478c0e11cdce994d585be216b9ad95836f073))
* **underline and cancelline:** add and fix ([d3f23ff](https://github.com/mengshukeji/Luckysheet/commit/d3f23fffd72f95b241710e9fdf1a70113502a815))
* **undo redo bug fix:** formula update bug ([373dc4f](https://github.com/mengshukeji/Luckysheet/commit/373dc4f464d8bd106408ce28bd48b9e44b310b5f))
* **update demo:** fix ([e101b91](https://github.com/mengshukeji/Luckysheet/commit/e101b91c4a4a427a83ef727f2e8c2e8166124485))
* **updatecell bug fix:** fix undo redo ([d8b76ce](https://github.com/mengshukeji/Luckysheet/commit/d8b76ce52f25d9fc487ca62b7007c049a4a80160))
* **websocket bux:** bug ([4eda52a](https://github.com/mengshukeji/Luckysheet/commit/4eda52ac89587515d6a20574c0711fe22de0a8c0))
* **zoom scroll position wrong:** fix ([5830e9a](https://github.com/mengshukeji/Luckysheet/commit/5830e9af5a9c8757f55a18b34af2f08ce02f2351))
* **zoom slider drag lag:** fix lag ([17ddd13](https://github.com/mengshukeji/Luckysheet/commit/17ddd13b2e87d3879fa49e1f3569f062400eb251))
## [2.0.0](https://github.com/mengshukeji/Luckysheet/compare/v2.0.0-0...v2.0.0) (2020-07-31)
### ⚠ BREAKING CHANGES
* **api:** 1. luckysheet.flowdata change to luckysheet.flowdata() 2.all apis list in
documentation
* **gulp:** demo index.html's js and css refrence change
* **bug:** bug
bug
* **chart:** add new config : plugins, array
* **main:** bug
### Features
* **cell overflow:** cell overflow ([c3e4f39](https://github.com/mengshukeji/Luckysheet/commit/c3e4f39919e68d99ad72c6a0ae104926acce6b23))
* **chart:** chart ([9991702](https://github.com/mengshukeji/Luckysheet/commit/999170251810720fc4d44012bcc7c70c124463fd))
* **chart:** chart plugin ([196362d](https://github.com/mengshukeji/Luckysheet/commit/196362db053a25ea0deaff14b5019e1450902ceb))
* d ([07d004f](https://github.com/mengshukeji/Luckysheet/commit/07d004f9d63962dc3ad09a32a1d3c61866de5525))
* **allowedit support:** allowEdit support ([59561bb](https://github.com/mengshukeji/Luckysheet/commit/59561bb3453469cbf86703672ec770187545459d))
* **bug fix:** bu ([f23ba5d](https://github.com/mengshukeji/Luckysheet/commit/f23ba5df9b967cd9d8188680723c903ee467bb29))
* **canvas:** canvas ([c63871f](https://github.com/mengshukeji/Luckysheet/commit/c63871fbeabb47d766320800d3bb8be47604690b))
* **chart:** add chart ([139bc6e](https://github.com/mengshukeji/Luckysheet/commit/139bc6ea8510667c4900db6d1b5b26a33fb52734))
* **gloabe improve and bug fix:** global improve and bug fix,include formula,find and replace,filter ([e6cfa31](https://github.com/mengshukeji/Luckysheet/commit/e6cfa3156ac2ec8989f3716601dc27bcfbdc4d13))
* **globalization fix:** pivot table , drop cell ([55d4cf2](https://github.com/mengshukeji/Luckysheet/commit/55d4cf29868787a94377ea2e659da9e74e062628))
* **locale:** locale ([4cd2ee4](https://github.com/mengshukeji/Luckysheet/commit/4cd2ee4cb3f115be9e2455a626469711d8be2c2e))
* **move:** move chart ([cda6df0](https://github.com/mengshukeji/Luckysheet/commit/cda6df0209fb1d440e54d663de682f4749660917))
* **optimiz:** optimization ([abbf592](https://github.com/mengshukeji/Luckysheet/commit/abbf592d2df320d8a44eb5375075cd65f4ef4066))
* **rightclick menu perfect:** add rows and cols delete rows and cols hide rows and cols ([32f94a7](https://github.com/mengshukeji/Luckysheet/commit/32f94a72285d6051df87ce45390cb4e5a4cc49b2))
* **scroll style fix beautify:** scroll,sheet color and style ([63f2630](https://github.com/mengshukeji/Luckysheet/commit/63f2630b95ab811807199670db6eee332af882a8))
* **split handler.js to small file:** split handler.js file to seven files ([0a62ff0](https://github.com/mengshukeji/Luckysheet/commit/0a62ff0565d4116ae66a758386ef8d84dcfceba5))
* **zh en:** zh en ([040bfe4](https://github.com/mengshukeji/Luckysheet/commit/040bfe4b456eb910dc7ddbcc3f5ae0e42d440951))
* **zh-cn:** zh-cn ([907226c](https://github.com/mengshukeji/Luckysheet/commit/907226c74297882896f527b9c54a88a11d592a4d))
* **zh-cn:** zh-cn ([01f9521](https://github.com/mengshukeji/Luckysheet/commit/01f9521ed37e11b2e9630b01b84583a45302fc77))
### Bug Fixes
* **bug:** bug ([7dff640](https://github.com/mengshukeji/Luckysheet/commit/7dff64086aaf034a8c427e37ef7b15da96e1123c))
* **bug:** bug ([8baf378](https://github.com/mengshukeji/Luckysheet/commit/8baf378407f67684b77e62bacf6894e4359ed2d3))
* **bug:** bug ([5ebd31e](https://github.com/mengshukeji/Luckysheet/commit/5ebd31e4a455c7547e46c418838e2e3a16def6a7))
* **bug:** bug ([f53addb](https://github.com/mengshukeji/Luckysheet/commit/f53addbf70e96b45d73014d8e181c2712820b5c3))
* **bug:** bug ([9cc36cf](https://github.com/mengshukeji/Luckysheet/commit/9cc36cf40ebb5a4f41b52f230e35d253f8261f69))
* **bug:** bug ([186e3c9](https://github.com/mengshukeji/Luckysheet/commit/186e3c9a557a555d1737d456abf872622004f052))
* **bug:** bug ([447735c](https://github.com/mengshukeji/Luckysheet/commit/447735c7ea365c2c292dd98a4fba8813a9a62d34))
* **bug:** bug ([74639a8](https://github.com/mengshukeji/Luckysheet/commit/74639a8b719db028ab856f95a80d82553c0d919c))
* **bug:** bug ([1082ab0](https://github.com/mengshukeji/Luckysheet/commit/1082ab0e2e84c7863ab29c7b68bb2d9934dcf11c))
* **bug fix:** sparkLines, pivot Table, change to sheet ([69aee1a](https://github.com/mengshukeji/Luckysheet/commit/69aee1aec3200c75cb4897f0f782a945c2ef9fd1))
* **canvas:** canvas,function ([2445ff5](https://github.com/mengshukeji/Luckysheet/commit/2445ff5094fe8da9f7d56612ceb06dd86b75b30e))
* **fix:** fix ([bd6a9bd](https://github.com/mengshukeji/Luckysheet/commit/bd6a9bdd31cefe00a6470fbec9d10471d21fac9f))
* **fix:** fix byg ([d9fb5fe](https://github.com/mengshukeji/Luckysheet/commit/d9fb5fe4c48637d2ac947fe8aa21d6a7ccde0264))
* **fix allowedit:** fix allowEdit attribute ([35820b3](https://github.com/mengshukeji/Luckysheet/commit/35820b3c2ea8437036cfc32911acde9ff32c2fea))
* **from github:** github ([abd44e8](https://github.com/mengshukeji/Luckysheet/commit/abd44e882e39bfb85c0e213e049325754bc3ba4f))
* **hot key and mousemove:** hot key fix ([1ad40cf](https://github.com/mengshukeji/Luckysheet/commit/1ad40cf5521b7b3bd804c2c1f5f13fe6860ab95e))
* **internationalization:** internationalization,formula ([c6901fc](https://github.com/mengshukeji/Luckysheet/commit/c6901fc884d14c5fb8f48a60192f1eb8ad26a485))
* **linestyle bug:** lineStyle ([27ba0a3](https://github.com/mengshukeji/Luckysheet/commit/27ba0a3010865aa0e28158e661bcd6196bc1cfe4))
* **locale:** locale bug ([3bd0cae](https://github.com/mengshukeji/Luckysheet/commit/3bd0cae0502e14c329304bfbf8c0f98c8e7b284e))
* **locale finished and bug fix:** locale finished, condition bug fix , multi range bug fix ([0aa9b3b](https://github.com/mengshukeji/Luckysheet/commit/0aa9b3baa51c818ec2415b9d1c2e838ef32bdc85))
* **locale,formula:** locale,formula ([b11b862](https://github.com/mengshukeji/Luckysheet/commit/b11b86295108d8b25ad2cd7b1ba016b3555cee0d))
* **mac scroll x reverse fix:** mac scroll x reverse fix and scroll optimization ([8eb68e8](https://github.com/mengshukeji/Luckysheet/commit/8eb68e82e2898b1be2702f463c326a304bc96106))
* **main:** bug ([67ebe19](https://github.com/mengshukeji/Luckysheet/commit/67ebe1978bf067c17c74e5b3b7b048055c53c0b4))
* **pivot table bug:** uni ([56181e6](https://github.com/mengshukeji/Luckysheet/commit/56181e610085604666d96aa6068944e05355ec7d))
### build
* **gulp:** gulpfile,index.html,pack js css ([8be0467](https://github.com/mengshukeji/Luckysheet/commit/8be0467dea483be7be2a5af1bc3545a04a67ea72))
* **api:** api ([f19a26e](https://github.com/mengshukeji/Luckysheet/commit/f19a26eab08bc44a5c380afd883d4e730f681062))
### [1.0.1-6](https://github.com/mengshukeji/Luckysheet/compare/v1.0.1-2...v1.0.1-6) (2020-07-14)
### Bug Fixes
* **core.js:** core function ([6e63969](https://github.com/mengshukeji/Luckysheet/commit/6e639699e117abd241532de5530a533b80d547bb))
### [1.0.1-2](https://github.com/mengshukeji/Luckysheet/compare/v1.0.1-1...v1.0.1-2) (2020-07-14)
### [1.0.1-1](https://github.com/mengshukeji/Luckysheet/compare/v1.0.1-0...v1.0.1-1) (2020-07-14)
### 1.0.1-0 (2020-07-14)
## 2.0.0-0 (2020-07-24)
### ⚠ BREAKING CHANGES
* **all project:** File name change
* **all project:** modular,Document promotion,Some bugs ([37c3070](https://github.com/mengshukeji/Luckysheet/commit/37c307087cb50efa9eb3e1f3a22a356024aa43b5)), closes [#11](https://github.com/mengshukeji/Luckysheet/issues/11) [#2](https://github.com/mengshukeji/Luckysheet/issues/2)
================================================
FILE: LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2020-present, Mengshukeji
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
================================================
FILE: README-zh.md
================================================
<div align="center">

</div>
简体中文 | [English](./README.md)
# Luckysheet 已不再维护,推荐使用升级版 [Univer](https://univer.short.gy/LuckysheetRepository) 用于生产环境部署,新版解决了大数据量加载,图表样式,透视表,公式计算等方面的问题,做了很多优化设计,增加了导入,导出,打印,协同等功能,提高了表格性能,更有专业技术团队进行技术支持。
点击 [#1454](https://github.com/dream-num/Luckysheet/issues/1454) 查看更多详情。
## 介绍
🚀Luckysheet ,一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。
## 相关链接
| 源码 | 文档 | Demo | 论坛 |
| ------ | -------- | ------ | ------ |
| [Github](https://github.com/mengshukeji/Luckysheet)| [在线文档](https://dream-num.github.io/LuckysheetDocs/zh/) | [在线Demo](https://dream-num.github.io/LuckysheetDemo) / [协同编辑Demo](http://luckysheet.lashuju.com/demo/) | [中文论坛](https://support.qq.com/product/288322) |
| [Gitee镜像](https://gitee.com/mengshukeji/Luckysheet)| [Gitee在线文档](https://mengshukeji.gitee.io/LuckysheetDocs/zh/) | [Gitee在线Demo](https://mengshukeji.gitee.io/luckysheetdemo/) | [Google Group](https://groups.google.com/g/luckysheet) |

## 插件
导入导出、打印等高级功能请使用 [Univer](https://github.com/dream-num/univer/)
## 生态
| 工程 | 描述 |
|---------|-------------|
| [Luckysheet Vue] | 在vue cli 3项目中使用Luckysheet和Luckyexcel|
| [Luckysheet Vue3] | 在vue3, vite项目中使用Luckysheet和Luckyexcel|
| [Luckysheet React] | 在React项目中使用Luckysheet |
| [Luckyexcel Node] | 在koa2中使用Luckyexcel |
| [Luckysheet Server] | Java后台Luckysheet Server |
| [Luckysheet Server Starter] | LuckysheetServer 一键docker部署 |
[Luckysheet Vue]: https://gitee.com/mengshukeji/luckysheet-vue
[Luckysheet Vue3]: https://gitee.com/hjwforever/luckysheet-vue3-vite.git
[Luckysheet React]: https://gitee.com/mengshukeji/luckysheet-react
[Luckyexcel Node]: https://gitee.com/mengshukeji/Luckyexcel-node
[Luckysheet Server]: https://gitee.com/mengshukeji/LuckysheetServer
[Luckysheet Server Starter]: https://gitee.com/mengshukeji/LuckysheetServerStarter
## 特性
- **格式设置**:样式,条件格式,文本对齐及旋转,文本截断、溢出、自动换行,多种数据类型,单元格内多样式
- **单元格**:拖拽,下拉填充,多选区,查找和替换,定位,合并单元格,数据验证
- **行和列操作**:隐藏、插入、删除行或列,冻结,文本分列
- **操作体验**:撤销、重做,复制、粘贴、剪切,快捷键,格式刷,选区拖拽
- **公式和函数**:内置公式,远程公式,自定义公式
- **表格操作**:筛选,排序
- **增强功能**:数据透视表,图表,评论,共享编辑,插入图片,矩阵计算,截图,复制到其他格式,EXCEL导入及导出等
更详细的功能列表,请查阅:[特性](https://dream-num.github.io/LuckysheetDocs/zh/guide/#%E7%89%B9%E6%80%A7)
## 📖 学习资源
- 新用户优先阅读:[用户指引](https://github.com/mengshukeji/Luckysheet/wiki/User-Guide)
- 社区提供的教程、学习资料及配套解决方案请查阅:[教程与资源](https://dream-num.github.io/LuckysheetDocs/zh/guide/resource.html)
## 📜 更新日志
每个版本的详细更改都记录在 [CHANGELOG.md](CHANGELOG.md) 中。
## ❗️ 问题反馈
在反馈问题之前,请确保仔细阅读 [如何提交问题](https://dream-num.github.io/LuckysheetDocs/zh/guide/contribute.html#如何提交问题)。 不符合准则的问题可能会立即被移除。
## ✅ 开发计划
通过 [GitHub Projects](https://github.com/mengshukeji/Luckysheet/projects/1) 管理
## 💪 贡献
在提交PR之前,请确保仔细阅读 [贡献指南](https://dream-num.github.io/LuckysheetDocs/zh/guide/contribute.html)。
## 用法
### 第一步
通过CDN引入依赖
```
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/css/pluginsCss.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/plugins.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/css/luckysheet.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/assets/iconfont/iconfont.css' />
<script src="https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/js/plugin.js"></script>
<script src="https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/luckysheet.umd.js"></script>
```
### 第二步
指定一个表格容器
```
<div id="luckysheet" style="margin:0px;padding:0px;position:absolute;width:100%;height:100%;left: 0px;top: 0px;"></div>
```
### 第三步
创建一个表格
```
<script>
$(function () {
//配置项
var options = {
container: 'luckysheet' //luckysheet为容器id
}
luckysheet.create(options)
})
</script>
```
## 开发
### 环境
[Node.js](https://nodejs.org/en/) Version >= 6
### 安装
```
npm install
npm install gulp -g
```
### 开发
```
npm run dev
```
### 打包
```
npm run build
```
## 合作项目
- [h5-Dooring](https://github.com/MrXujiang/h5-Dooring)
## 交流
- [官网](http://lucky.lashuju.com/index.html)
- [Github 论坛](https://github.com/mengshukeji/Luckysheet/discussions)
- 以下扫码加入官方微信群或者QQ群
加小编微信: msuniver,备注:加群
<img src="https://gcore.jsdelivr.net/gh/mengshukeji/LuckyResources@master/assets/img/wechat/univer-wechat.jpg" width="200" />
[英文社群](./README.md)
## 赞助
Luckysheet是MIT许可的开源项目,其持续稳定的开发离不开这些优秀的 [**支持者**](https://dream-num.github.io/LuckysheetDocs/zh/about/sponsor.html#%E8%B5%9E%E5%8A%A9%E8%80%85%E5%88%97%E8%A1%A8)。 如果您想加入他们,请考虑:
- [成为Patreon的支持者或赞助商](https://www.patreon.com/mengshukeji)
- [成为Open Collective的支持者或赞助商](https://opencollective.com/luckysheet)
- 通过PayPal,微信或支付宝一次性捐赠
| PayPal | 微信 | 支付宝 |
|---|---|---|
| [Paypal Me](https://www.paypal.me/wbfsa) | <img src="https://cdn.jsdelivr.net/gh/mengshukeji/LuckyResources@master/assets/img/wechat/wechat.jpg" width="200" />| <img src="https://cdn.jsdelivr.net/gh/mengshukeji/LuckyResources@master/assets/img/wechat/alipay.jpg" width="200" /> |
### Patreon和OpenCollective有什么区别?
通过Patreon捐赠的资金将直接用于支持menshshukeji在Luckysheet上的工作。 通过OpenCollective捐赠的资金由透明费用管理,将用于补偿核心团队成员的工作和费用或赞助社区活动。 通过在任一平台上捐款,您的姓名/徽标将得到适当的认可和曝光。
## 赞助者列表
(按时间顺序排列)
- *涛 ¥ 200
- popo ¥ 1
- 孔垂善 ¥ 5
- Shawn文 ¥ 99
- 幸运的小路易 ¥ 1
- 冯启俊 ¥ 88
- mxb ¥ 10
- 祭阳 ¥ 20
- *勇 ¥ 30
- 虚我 ¥ 200
- 甜党 ¥ 50
- Alphabet(Google)-gcf ¥ 1
- **平 ¥ 100
- **东 ¥ 10
- debugger ¥ 20
- 烦了烦 ¥ 10
- 文顶顶 ¥ 200
- yangxshn ¥ 10
- 爱乐 ¥ 100
- 小李飞刀刀 ¥ 66
- 张铭 ¥ 200
- 曹治军 ¥ 1
- *特 ¥ 10
- **权 ¥ 9.9
- **sdmq ¥ 20
- *旭 ¥ 10
- Quentin ¥ 20
- 周宇凡 ¥ 100
- *超 ¥ 10
- 维宁 ¥ 100
- hyy ¥ 20
- 雨亭寒江月 ¥ 50
- **功 ¥ 10
- **光 ¥ 20
- terrywan ¥ 100
- 王晓洪 ¥ 10
- Sun ¥ 10
- 忧绣 ¥ 100
- Jasonx ¥ 10
- 国勇 ¥ 66.6
- 郎志 ¥ 100
- 匿名 ¥ 1
- ni ¥ 100
- 苏 ¥ 50
- Mads_chan ¥ 1
- LK ¥ 100
- 智连方舟 李汪石 ¥ 168
- **发 ¥ 260
- *超 ¥ 10
- *勇 ¥ 10
- *腾 ¥ 15
- 名字好难起 ¥ 20
- 大山 ¥ 1
- waiting ¥ 1000
- **宇 ¥ 10.00
- 刘小帅的哥哥 ¥ 20.00
- 宁静致远 ¥ 10.00
- Eleven ¥ 1.00
- **帆 ¥ 188
- henry ¥ 100
- .波罗 ¥ 50
- 花落有家 ¥ 50
- 踏遍南水北山 ¥ 1
- LC ¥ 5
- **明 ¥ 8.80
- *军 ¥ 20
- 张彪 ¥ 50
- 企业文档云@肖敏 ¥ 10
- 匿名 ¥ 50
- 逍遥行 ¥ 10
- z.wasaki ¥ 50
- Make Children ¥ 20
- Foam ¥ 20
- 奥特曼( o|o)ノ三 ¥ 50
- **凯 ¥ 10
- **兵 ¥ 20
- **川 ¥ 1
- 二万 ¥ 50
- 蔚然成林 ¥ 10
- 邹杰 ¥ 10
- 张永强 ¥ 50
- 鱼得水 ¥ 270
- Ccther ¥ 1
- Eric Cheng ¥ 10
- 佚名 ¥ 1
- 花叶 ¥ 50
- GT ¥ 20
- 菜菜心 ¥ 10
- fisher ¥ 1
- JC ¥ 5
- 佚名 ¥ 20
- 独孤一剑 ¥ 50
- mxt ¥ 20
- 一叶迷山 ¥ 100
- Jeff ¥ 100
- 八千多条狗🐶 ¥ 100
- 晓峰 ¥ 10
- 戒 ¥ 1
- 浪里个浪 ¥ 1
- 回调函数 ¥ 50
- 赖瓜子 ¥ 5
- Milo•J ¥ 20
- 可道云 ¥ 200
- *程 ¥ 10
- 来一杯卡布酸奶 ¥ 5
- 刘久胜 ¥ 100
- 快意江湖 ¥ 50
- *新 ¥ 9.9
- **龙 ¥ 100
- **江 ¥ 100
- **威 ¥ 9.8
- **涛 ¥ 500
- **嘉 ¥ 10
- *涛 ¥ 1
- *兵 ¥ 5
- *阳 ¥ 200
- *辉 ¥ 1
- *帆 ¥ 30
- **旺 ¥ 10
- **麟 ¥ 20
- *霖 ¥ 9.9
- *帅 ¥ 10
- *鑫 ¥ 6.66
- ~朴:shu ¥ 29.79
- 未来 ¥ 1
- 国勇 ¥ 0.1
- 用心灵听雨 ¥ 10
- 钊 ¥ 5
- 星稀 ¥ 5
## 贡献者和感谢
### 核心团队活跃成员
- [@wbfsa](https://github.com/wbfsa)
- [@eiji-th](https://github.com/eiji-th)
- [@fly-95](https://github.com/fly-95)
- [@tonytonychopper123](https://github.com/tonytonychopper123)
- [@Dushusir](https://github.com/Dushusir)
- [@iamxuchen800117](https://github.com/iamxuchen800117)
- [@wpxp123456](https://github.com/wpxp123456)
- [@c19c19i](https://weibo.com/u/3884623955)
- [@zhangchen915](https://github.com/zhangchen915)
- [@jerry-f](https://github.com/jerry-f)
- [@flowerField](https://github.com/flowerField)
### 社区伙伴
- [@yiwasheng](https://github.com/yiwasheng)
- [@danielcai1987](https://github.com/danielcai1987)
- [@qq6690876](https://github.com/qq6690876)
- [@javahuang](https://github.com/javahuang)
- [@TimerGang](https://github.com/TimerGang)
- [@gsw945](https://github.com/gsw945)
- [@swen-xiong](https://github.com/swen-xiong)
- [@lzmch](https://github.com/lzmch)
- [@kdevilpf](https://github.com/kdevilpf)
- [@WJWM0316](https://github.com/WJWM0316)
## 版权信息
[MIT](http://opensource.org/licenses/MIT)
Copyright (c) 2020-present, mengshukeji
================================================
FILE: README.md
================================================
<div align="center">

[](https://gitter.im/mengshukeji/Luckysheet?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
<a href="https://twitter.com/intent/follow?screen_name=luckysheet">
<img src="https://img.shields.io/twitter/follow/luckysheet?style=social&logo=twitter"
alt="follow on Twitter"></a>
</div>
English| [简体中文](./README-zh.md)
# Luckysheet is no longer maintained. It is recommended to use the upgraded version of [Univer](https://univer.short.gy/LuckysheetRepository) for production environment deployment. The new version solves problems such as large data loading, chart styles, pivot tables, formula calculations, etc., and has made many optimization designs, added import, export, printing, collaboration and other functions, improved table performance, and has a professional technical team to provide technical support.
Follow the [#1454](https://github.com/dream-num/Luckysheet/issues/1454) issue for more details.
## Introduction
🚀Luckysheet is an online spreadsheet like excel that is powerful, simple to configure, and completely open source.
## Links
| Source Code | Documentation | Demo | Forum |
| ------ | -------- | ------ | ------ |
| [Github](https://github.com/mengshukeji/Luckysheet)| [Online Documentation](https://dream-num.github.io/LuckysheetDocs/) | [Online Demo](https://dream-num.github.io/LuckysheetDemo) / [Cooperative editing demo](http://luckysheet.lashuju.com/demo/) | [Chinese Forum](https://support.qq.com/product/288322) |
| [Gitee Mirror](https://gitee.com/mengshukeji/Luckysheet)| [Gitee Online Documentation](https://mengshukeji.gitee.io/LuckysheetDocs/) | [Gitee Online Demo](https://mengshukeji.gitee.io/luckysheetdemo/) | [Google Group](https://groups.google.com/g/luckysheet) |

## Plugins
For advanced features like import, export, and printing, please use [Univer](https://github.com/dream-num/univer/)
## Ecosystem
| Project | Description |
|---------|-------------|
| [Luckysheet Vue] | Luckysheet and Luckyexcel in a vue cli3 project |
| [Luckysheet Vue3] | Luckysheet and Luckyexcel in a vue3 project with vite|
| [Luckysheet React] | Luckysheet in a React project |
| [Luckyexcel Node] | Use Luckyexcel in koa2 |
| [Luckysheet Server] | Java backend Luckysheet Server |
| [Luckysheet Server Starter] | LuckysheetServer docker deployment startup template |
[Luckysheet Vue]: https://github.com/mengshukeji/luckysheet-vue
[Luckysheet Vue3]: https://github.com/hjwforever/luckysheet-vue3-vite
[Luckysheet React]: https://github.com/mengshukeji/luckysheet-react
[Luckyexcel Node]: https://github.com/mengshukeji/Luckyexcel-node
[Luckysheet Server]: https://github.com/mengshukeji/LuckysheetServer
[Luckysheet Server Starter]: https://github.com/mengshukeji/LuckysheetServerStarter
## Features
- **Formatting**: style, conditional formatting, text alignment and rotation, text truncation, overflow, automatic line wrapping, multiple data types, cell segmentation style
- **Cells**: drag and drop, fill handle, multiple selection, find and replace, location, merge cells, data verification
- **Row & column**: hide, insert, delete rows or columns, freeze, and split text
- **Operation**: undo, redo, copy, paste, cut, hot key, format painter, drag and drop selection
- **Formulas & Functions**: Built-in, remote and custom formulas
- **Tables**: filter, sort
- **Enhanced functions**: Pivot tables, charts, comments, cooperative editing, insert picture, matrix calculations, screenshots, copying to other formats, EXCEL import and export, etc.
For a more detailed feature list, please refer to: [Features](https://dream-num.github.io/LuckysheetDocs/guide/#features)
## 📖 Resources
- Priority reading for new users: [User Guide](https://github.com/mengshukeji/Luckysheet/wiki/User-Guide)
- For the tutorials, learning materials and supporting solutions provided by the community, please refer to: [Tutorials and Resources](https://dream-num.github.io/LuckysheetDocs/guide/resource.html)
## 📜 Changelog
Detailed changes for each release are documented in the [CHANGELOG.md](CHANGELOG.md).
## ❗️ Issues
Please make sure to read the [Issue Reporting Checklist](https://dream-num.github.io/LuckysheetDocs/guide/contribute.html#how-to-submit-issues) before opening an issue. Issues not conforming to the guidelines may be closed immediately.
## ✅ TODO
Managed with [GitHub Projects](https://github.com/mengshukeji/Luckysheet/projects/1)
## 💪Contribution
Please make sure to read the[ Contributing Guide](https://dream-num.github.io/LuckysheetDocs/guide/contribute.html) before making a pull request.
## Usage
### First step
Introduce dependencies through CDN
```
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/css/pluginsCss.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/plugins.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/css/luckysheet.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/assets/iconfont/iconfont.css' />
<script src="https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/js/plugin.js"></script>
<script src="https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/luckysheet.umd.js"></script>
```
### Second step
Specify a table container
```
<div id="luckysheet" style="margin:0px;padding:0px;position:absolute;width:100%;height:100%;left: 0px;top: 0px;"></div>
```
### Third step
Create a table
```
<script>
$(function () {
//Configuration item
var options = {
container: 'luckysheet' //luckysheet is the container id
}
luckysheet.create(options)
})
</script>
```
## Development
### Requirements
[Node.js](https://nodejs.org/en/) Version >= 6
### Installation
```
npm install
npm install gulp -g
```
### Development
```
npm run dev
```
### Package
```
npm run build
```
## Partner project
- [h5-Dooring](https://github.com/MrXujiang/h5-Dooring)
## Communication
- [WebSite](http://lucky.lashuju.com/index.html)
- [Github Discussions](https://github.com/mengshukeji/Luckysheet/discussions)
- [Gitter](https://gitter.im/mengshukeji/Luckysheet)
[Chinese community](./README-zh.md)
## Sponsor
Luckysheet is an MIT-licensed open source project with its ongoing development made possible entirely by the support of these awesome [backers](https://dream-num.github.io/LuckysheetDocs/about/sponsor.html#sponsors-list). If you'd like to join them, please consider:
- [Become a backer or sponsor on Patreon](https://www.patreon.com/mengshukeji).
- [Become a backer or sponsor on Open Collective](https://opencollective.com/luckysheet).
- One-time donation via PayPal, WeChat or Alipay
| PayPal | WeChat | Alipay |
|---|---|---|
| [Paypal Me](https://www.paypal.me/wbfsa) | <img src="https://cdn.jsdelivr.net/gh/mengshukeji/LuckyResources@master/assets/img/wechat/wechat.jpg" width="140" />| <img src="https://cdn.jsdelivr.net/gh/mengshukeji/LuckyResources@master/assets/img/wechat/alipay.jpg" width="130" /> |
### What's the difference between Patreon and OpenCollective?
Funds donated via Patreon go directly to support mengshukeji's work on Luckysheet. Funds donated via OpenCollective are managed with transparent expenses and will be used for compensating work and expenses for core team members or sponsoring community events. Your name/logo will receive proper recognition and exposure by donating on either platform.
## Sponsors List
(Sort by time)
- *涛 ¥ 200
- popo ¥ 1
- 孔垂善 ¥ 5
- Shawn文 ¥ 99
- 幸运的小路易 ¥ 1
- 冯启俊 ¥ 88
- mxb ¥ 10
- 祭阳 ¥ 20
- *勇 ¥ 30
- 虚我 ¥ 200
- 甜党 ¥ 50
- Alphabet(Google)-gcf ¥ 1
- **平 ¥ 100
- **东 ¥ 10
- debugger ¥ 20
- 烦了烦 ¥ 10
- 文顶顶 ¥ 200
- yangxshn ¥ 10
- 爱乐 ¥ 100
- 小李飞刀刀 ¥ 66
- 张铭 ¥ 200
- 曹治军 ¥ 1
- *特 ¥ 10
- **权 ¥ 9.9
- **sdmq ¥ 20
- *旭 ¥ 10
- Quentin ¥ 20
- 周宇凡 ¥ 100
- *超 ¥ 10
- 维宁 ¥ 100
- hyy ¥ 20
- 雨亭寒江月 ¥ 50
- **功 ¥ 10
- **光 ¥ 20
- terrywan ¥ 100
- 王晓洪 ¥ 10
- Sun ¥ 10
- 忧绣 ¥ 100
- Jasonx ¥ 10
- 国勇 ¥ 66.6
- 郎志 ¥ 100
- 匿名 ¥ 1
- ni ¥ 100
- 苏 ¥ 50
- Mads_chan ¥ 1
- LK ¥ 100
- 智连方舟 李汪石 ¥ 168
- **发 ¥ 260
- *超 ¥ 10
- *勇 ¥ 10
- *腾 ¥ 15
- 名字好难起 ¥ 20
- 大山 ¥ 1
- waiting ¥ 1000
- **宇 ¥ 10.00
- 刘小帅的哥哥 ¥ 20.00
- 宁静致远 ¥ 10.00
- Eleven ¥ 1.00
- **帆 ¥ 188
- henry ¥ 100
- .波罗 ¥ 50
- 花落有家 ¥ 50
- 踏遍南水北山 ¥ 1
- LC ¥ 5
- **明 ¥ 8.80
- *军 ¥ 20
- 张彪 ¥ 50
- 企业文档云@肖敏 ¥ 10
- 匿名 ¥ 50
- 逍遥行 ¥ 10
- z.wasaki ¥ 50
- Make Children ¥ 20
- Foam ¥ 20
- 奥特曼( o|o)ノ三 ¥ 50
- **凯 ¥ 10
- **兵 ¥ 20
- **川 ¥ 1
- 二万 ¥ 50
- 蔚然成林 ¥ 10
- 邹杰 ¥ 10
- 张永强 ¥ 50
- 鱼得水 ¥ 50
- Ccther ¥ 1
- Eric Cheng ¥ 10
- 佚名 ¥ 1
- 花叶 ¥ 50
- GT ¥ 20
- 菜菜心 ¥ 10
- fisher ¥ 1
- JC ¥ 5
- 佚名 ¥ 20
- 独孤一剑 ¥ 50
- mxt ¥ 20
- 一叶迷山 ¥ 100
- Jeff ¥ 100
- 八千多条狗🐶 ¥ 100
- 晓峰 ¥ 10
- 戒 ¥ 1
- 浪里个浪 ¥ 1
- 回调函数 ¥ 50
- 赖瓜子 ¥ 5
- Milo•J ¥ 20
- 可道云 ¥ 200
- *程 ¥ 10
- 来一杯卡布酸奶 ¥ 5
- 刘久胜 ¥ 100
- 快意江湖 ¥ 50
- *新 ¥ 9.9
- **龙 ¥ 100
- **江 ¥ 100
- **威 ¥ 9.8
- **涛 ¥ 500
- **嘉 ¥ 10
- *涛 ¥ 1
- *兵 ¥ 5
- *阳 ¥ 200
- *辉 ¥ 1
- *帆 ¥ 30
- **旺 ¥ 10
- **麟 ¥ 20
- *霖 ¥ 9.9
- *帅 ¥ 10
- *鑫 ¥ 6.66
- ~朴:shu ¥ 29.79
- 未来 ¥ 1
- 国勇 ¥ 0.1
- 用心灵听雨 ¥ 10
- 钊 ¥ 5
- 星稀 ¥ 5
## Authors and acknowledgment
### Active Core Team Members
- [@wbfsa](https://github.com/wbfsa)
- [@eiji-th](https://github.com/eiji-th)
- [@fly-95](https://github.com/fly-95)
- [@tonytonychopper123](https://github.com/tonytonychopper123)
- [@Dushusir](https://github.com/Dushusir)
- [@iamxuchen800117](https://github.com/iamxuchen800117)
- [@wpxp123456](https://github.com/wpxp123456)
- [@c19c19i](https://weibo.com/u/3884623955)
- [@zhangchen915](https://github.com/zhangchen915)
- [@jerry-f](https://github.com/jerry-f)
- [@flowerField](https://github.com/flowerField)
### Community Partners
- [@yiwasheng](https://github.com/yiwasheng)
- [@danielcai1987](https://github.com/danielcai1987)
- [@qq6690876](https://github.com/qq6690876)
- [@javahuang](https://github.com/javahuang)
- [@TimerGang](https://github.com/TimerGang)
- [@gsw945](https://github.com/gsw945)
- [@swen-xiong](https://github.com/swen-xiong)
- [@lzmch](https://github.com/lzmch)
- [@kdevilpf](https://github.com/kdevilpf)
- [@WJWM0316](https://github.com/WJWM0316)
## License
[MIT](http://opensource.org/licenses/MIT)
Copyright (c) 2020-present, mengshukeji
================================================
FILE: commitlint.config.js
================================================
module.exports = {
extends: ['@commitlint/config-conventional']
}
================================================
FILE: deploy.bat
================================================
# deploy Demo
npm run build
cd dist
git init
git remote add origin https://github.com/mengshukeji/LuckysheetDemo.git
git config --local user.email "1414556676@qq.com"
git config --local user.name "Dushusir"
git add .
git commit -m 'deploy Luckysheet demo'
git push -f origin master:gh-pages
# ===============================================
# deploy Docs
npm run docs:build
cd docs/.vuepress/dist
git init
git remote add origin https://github.com/mengshukeji/LuckysheetDocs.git
git add .
git commit -m 'deploy Luckysheet docs'
git push -f origin master:gh-pages
# ===============================================
# add a tags
git tag -a doc -m "doc"
# replease
npm run build
npm run release -- --release-as patch
git push --follow-tags origin master
npm publish
# only publish
npm run build
git add .
npm run commit
npm version patch
git push -u origin master
npm publish
# ==============================================
# test feature branch
git checkout -b fea origin/feature
git pull
## After some test, create PR merge feature to master branch
git checkout master
git branch -d fea
# ===============================================
# test pull request: https://docs.github.com/cn/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/checking-out-pull-requests-locally
# 139 is ID, dev is branch name
git fetch origin pull/139/head:test-139
git checkout test-139
# test code
git push origin test-139
# create new PR ,merge test-139 to master
# list all remote and local branchs
git branch -a
# delete remote branch
git push origin --delete dev
git checkout master
# delete local branch
git branch -d dev
# pr
## 1. fork 到自己的仓库
## 2. git clone 到本地
## 3. 上游建立连接
git remote add upstream https://github.com/mengshukeji/Luckysheet.git
## 4. 创建开发分支
git checkout -b dev
## 5. 修改提交代码
git add .
git commit -m "add"
git push origin dev
## 6. 同步代码,将最新代码同步到本地
git fetch upstream
git rebase upstream/master
## 7. 如果有冲突(没有可以略过)
git status # 查看冲突文件,并修改冲突
git add .
git rebase --continue
## 8.提交分支代码
git push origin dev
## 7. 提交pr
去自己github仓库对应fork的项目下new pull request
================================================
FILE: docs/.vuepress/config.js
================================================
module.exports = {
base: '/LuckysheetDocs/',
locales: {
// 键名是该语言所属的子路径
// 作为特例,默认语言可以使用 '/' 作为其路径。
'/': {
lang: 'en-US', // 将会被设置为 <html> 的 lang 属性
title: 'Luckysheet Document',
description: 'Luckysheet is an online spreadsheet like excel that is powerful, simple to configure, and completely open source.This site contains official configuration document, API, and tutorial.'
},
'/zh/': {
lang: 'zh-CN',
title: 'Luckysheet文档',
description: 'Luckysheet ,一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。本站包含官方配置文档,API,教程。'
},
},
themeConfig: {
domain: 'https://dream-num.github.io/LuckysheetDemo',
logo: '/img/logo.png',
author: 'Luckysheet',
// 仓库地址
repo: 'mengshukeji/Luckysheet',
// 允许编辑链接文字
editLinks: true,
// 仓库的文档目录
docsDir: 'docs',
// 页面滚动
smoothScroll: true,
locales: {
'/': {
selectText: 'Languages',
label: 'English',
ariaLabel: 'Select language',
editLinkText: 'Edit this page on GitHub',
lastUpdated: 'Last Updated',
serviceWorker: {
updatePopup: {
message: "New content is available.",
buttonText: "Refresh"
}
},
nav: [
{ text: 'Home', link: '/' },
{ text: 'Guide', link: '/guide/' },
{ text: 'Demo', link: 'https://dream-num.github.io/LuckysheetDemo/' },
{
text: 'More',
ariaLabel: 'More',
items: [
{ text: 'About', link: '/about/' }
]
},
],
// 侧边栏
sidebar: {
'/guide/': [
'',
'config',
'sheet',
'cell',
'operate',
'api',
'resource',
'FAQ',
'contribute'
],
'/about/': [
'',
'sponsor',
'company'
],
},
},
'/zh/': {
// 多语言下拉菜单的标题
selectText: '选择语言',
// 该语言在下拉菜单中的标签
label: '简体中文',
ariaLabel: '选择语言',
// 编辑链接文字
editLinkText: '在 GitHub 上编辑此页',
lastUpdated: '上次更新',
// Service Worker 的配置
serviceWorker: {
updatePopup: {
message: "发现新内容可用.",
buttonText: "刷新"
}
},
// 导航栏
nav: [
{ text: '首页', link: '/zh/' },
{ text: '指南', link: '/zh/guide/' },
{ text: '演示', link: 'https://dream-num.github.io/LuckysheetDemo/' },
{
text: '了解更多',
ariaLabel: '了解更多',
items: [
{ text: '关于', link: '/zh/about/' }
]
},
],
// 侧边栏
sidebar: {
'/zh/guide/': [
'',
'config',
'sheet',
'cell',
'operate',
'api',
'resource',
'FAQ',
'contribute'
],
'/zh/about/': [
'',
'sponsor',
'company'
],
},
},
},
},
plugins: {
'vuepress-plugin-baidu-autopush': {},
'sitemap': {
hostname: 'https://dream-num.github.io/LuckysheetDocs'
},
'vuepress-plugin-code-copy': true,
'seo': {
siteTitle: (_, $site) => $site.title,
title: $page => $page.title,
description: $page => $page.frontmatter.description,
author: (_, $site) => $site.themeConfig.author,
tags: $page => $page.frontmatter.tags,
twitterCard: _ => 'summary_large_image',
type: $page => ['guide'].some(folder => $page.regularPath.startsWith('/' + folder)) ? 'article' : 'website',
url: (_, $site, path) => ($site.themeConfig.domain || '') + path,
image: ($page, $site) => $page.frontmatter.image && (($site.themeConfig.domain && !$page.frontmatter.image.startsWith('http') || '') + $page.frontmatter.image),
publishedAt: $page => $page.frontmatter.date && new Date($page.frontmatter.date),
modifiedAt: $page => $page.lastUpdated && new Date($page.lastUpdated),
}
}
}
================================================
FILE: docs/README.md
================================================
---
home: true
heroText: Luckysheet
tagline: Configuration Document · API · Tutorial
actionText: Get Started →
actionLink: /guide/
features:
- title: Powerful Features
details: Contains a large number of commonly used spreadsheet functions to replace your excel
- title: Simple Configuration
details: Get started with minimal configuration
- title: Open Source
details: Community driven, work together to improve your ideas
footer: MIT Licensed | Copyright © 2020-present Mengshukeji
---
================================================
FILE: docs/about/README.md
================================================
# Meet the Team
Luckysheet is a project led by an individual and jointly developed by several friends with the same interests.
### Active Core Team Members
- [@wbfsa](https://github.com/wbfsa)
- [@eiji-th](https://github.com/eiji-th)
- [@fly-95](https://github.com/fly-95)
- [@tonytonychopper123](https://github.com/tonytonychopper123)
- [@Dushusir](https://github.com/Dushusir)
- [@iamxuchen800117](https://github.com/iamxuchen800117)
- [@wpxp123456](https://github.com/wpxp123456)
- [@c19c19i](https://weibo.com/u/3884623955)
- [@zhangchen915](https://github.com/zhangchen915)
- [@jerry-f](https://github.com/jerry-f)
- [@flowerField](https://github.com/flowerField)
### Community Partners
- [@yiwasheng](https://github.com/yiwasheng)
- [@danielcai1987](https://github.com/danielcai1987)
- [@qq6690876](https://github.com/qq6690876)
- [@javahuang](https://github.com/javahuang)
- [@TimerGang](https://github.com/TimerGang)
- [@gsw945](https://github.com/gsw945)
- [@swen-xiong](https://github.com/swen-xiong)
- [@lzmch](https://github.com/lzmch)
- [@kdevilpf](https://github.com/kdevilpf)
- [@WJWM0316](https://github.com/WJWM0316)
================================================
FILE: docs/about/company.md
================================================
# Community case
We collected a lot of case feedback from the community, and also discovered Luckysheet usage scenarios that we did not expect before.
It is our responsibility to actively listen to the voice of the community, and to continuously update and iterate with your support and feedback.
## Company Case
<table>
<tbody>
<tr>
<td align="center" valign="middle">
<a href="https://www.zpy360.com/" target="_blank">
<img width="222px" src="https://cdn.jsdelivr.net/npm/luckyresources/assets/img/community_case/Zhiping_Cloud.png">
</a>
<p>雄安智评云数字科技有限公司</p>
</td>
<td align="center" valign="middle">
<a href="https://code-the-future.com/" target="_blank">
<img width="222px" src="https://cdn.jsdelivr.net/npm/luckyresources/assets/img/community_case/code_the_future.png">
</a>
<p>Code the Future</p>
</td>
<td align="center" valign="middle">
<a href="http://www.jackyun.com/" target="_blank">
<img width="222px" src="https://cdn.jsdelivr.net/npm/luckyresources/assets/img/community_case/jackyun.png">
</a>
<p>吉客云</p>
</td>
<td align="center" valign="middle">
<a href="https://www.huawei.com/cn/" target="_blank">
<img width="222px" src="https://cdn.jsdelivr.net/npm/luckyresources/assets/img/community_case/huawei.png">
</a>
<p>华为</p>
</td>
</tr>
<tr>
<td align="center" valign="middle">
</td>
<td align="center" valign="middle">
</td>
<td align="center" valign="middle">
</td>
<td align="center" valign="middle">
</td>
</tr>
</tbody>
</table>
================================================
FILE: docs/about/sponsor.md
================================================
# Sponsor
## Why sponsor
If you run a business and is using Luckysheet in a revenue-generating product, it would make business sense to sponsor Luckysheet development: it ensures the project that your product relies on stays healthy and actively maintained. It can also help your exposure in the Luckysheet community and more people pay attention to your products.
Of course, individual users are also welcome to buy author a glass of juice if Luckysheet has helped you in your work or personal projects 😋.
## How to sponsor
Luckysheet is an MIT-licensed open source project with its ongoing development made possible entirely by the support of these awesome [**backers**](#sponsors-list). If you'd like to join them, please consider:
- [Become a backer or sponsor on Patreon](https://www.patreon.com/mengshukeji).
- [Become a backer or sponsor on Open Collective](https://opencollective.com/luckysheet).
- One-time donation via PayPal, WeChat or Alipay
| PayPal | WeChat | Alipay |
|---|---|---|
| [Paypal Me](https://www.paypal.me/wbfsa) | <img src="https://minio.cnbabylon.com/public/luckysheet/wechat.jpg" width="140" />| <img src="https://minio.cnbabylon.com/public/luckysheet/alipay.jpg" width="130" /> |
### What's the difference between Patreon and OpenCollective?
Funds donated via Patreon go directly to support mengshukeji's work on Luckysheet. Funds donated via OpenCollective are managed with transparent expenses and will be used for compensating work and expenses for core team members or sponsoring community events. Your name/logo will receive proper recognition and exposure by donating on either platform.
## Sponsors List
(Sort by time)
- *涛 ¥ 200
- popo ¥ 1
- 孔垂善 ¥ 5
- Shawn文 ¥ 99
- 幸运的小路易 ¥ 1
- 冯启俊 ¥ 88
- mxb ¥ 10
- 祭阳 ¥ 20
- *勇 ¥ 30
- 虚我 ¥ 200
- 甜党 ¥ 50
- Alphabet(Google)-gcf ¥ 1
- **平 ¥ 100
- **东 ¥ 10
- debugger ¥ 20
- 烦了烦 ¥ 10
- 文顶顶 ¥ 200
- yangxshn ¥ 10
- 爱乐 ¥ 100
- 小李飞刀刀 ¥ 66
- 张铭 ¥ 200
- 曹治军 ¥ 1
- *特 ¥ 10
- **权 ¥ 9.9
- **sdmq ¥ 20
- *旭 ¥ 10
- Quentin ¥ 20
- 周宇凡 ¥ 100
- *超 ¥ 10
- 维宁 ¥ 100
- hyy ¥ 20
- 雨亭寒江月 ¥ 50
- **功 ¥ 10
- **光 ¥ 20
- terrywan ¥ 100
- 王晓洪 ¥ 10
- Sun ¥ 10
- 忧绣 ¥ 100
- Jasonx ¥ 10
- 国勇 ¥ 66.6
- 郎志 ¥ 100
- 匿名 ¥ 1
- ni ¥ 100
- 苏 ¥ 50
- Mads_chan ¥ 1
- LK ¥ 100
- 智连方舟 李汪石 ¥ 168
- **发 ¥ 260
- *超 ¥ 10
- *勇 ¥ 10
- *腾 ¥ 15
- 名字好难起 ¥ 20
- 大山 ¥ 1
- waiting ¥ 1000
- **宇 ¥ 10.00
- 刘小帅的哥哥 ¥ 20.00
- 宁静致远 ¥ 10.00
- Eleven ¥ 1.00
- **帆 ¥ 188
- henry ¥ 100
- .波罗 ¥ 50
- 花落有家 ¥ 50
- 踏遍南水北山 ¥ 1
- LC ¥ 5
- **明 ¥ 8.80
- *军 ¥ 20
- 张彪 ¥ 50
- 企业文档云@肖敏 ¥ 10
- 匿名 ¥ 50
- 逍遥行 ¥ 10
- z.wasaki ¥ 50
- Make Children ¥ 20
- Foam ¥ 20
- 奥特曼( o|o)ノ三 ¥ 50
- **凯 ¥ 10
- **兵 ¥ 20
- **川 ¥ 1
- 二万 ¥ 50
- 蔚然成林 ¥ 10
- 邹杰 ¥ 10
- 张永强 ¥ 50
- 鱼得水 ¥ 50
- Ccther ¥ 1
- Eric Cheng ¥ 10
- 佚名 ¥ 1
- 花叶 ¥ 50
- GT ¥ 20
- 菜菜心 ¥ 10
- fisher ¥ 1
- JC ¥ 5
- 佚名 ¥ 20
- 独孤一剑 ¥ 50
- mxt ¥ 20
- 一叶迷山 ¥ 100
- Jeff ¥ 100
- 八千多条狗🐶 ¥ 100
- 晓峰 ¥ 10
- 戒 ¥ 1
- 浪里个浪 ¥ 1
- 回调函数 ¥ 50
- 赖瓜子 ¥ 5
- Milo•J ¥ 20
- 可道云 ¥ 200
- *程 ¥ 10
- 来一杯卡布酸奶 ¥ 5
- 刘久胜 ¥ 100
- 快意江湖 ¥ 50
- *新 ¥ 9.9
- **龙 ¥ 100
- **江 ¥ 100
- **威 ¥ 9.8
- **涛 ¥ 500
- **嘉 ¥ 10
- *涛 ¥ 1
- *兵 ¥ 5
- *阳 ¥ 200
- *辉 ¥ 1
- *帆 ¥ 30
- **旺 ¥ 10
- **麟 ¥ 20
- *霖 ¥ 9.9
- *帅 ¥ 10
- *鑫 ¥ 6.66
- ~朴:shu ¥ 29.79
- 未来 ¥ 1
- 国勇 ¥ 0.1
- 用心灵听雨 ¥ 10
- 钊 ¥ 5
- 星稀 ¥ 5
================================================
FILE: docs/guide/FAQ.md
================================================
# FAQ
The content of this chapter collects the common problems that everyone has feedback. If the official documents and this list can’t answer your questions, I recommend you to [Official Forum](https://github.com/mengshukeji/Luckysheet/discussions)
## What is the difference between data and celldata in luckysheetfile?
**<span style="font-size:20px;">A</span>**: Use one-dimensional array format [celldata](/guide/sheet.html#celldata), after the initialization is completed, the data converted into a two-dimensional array format is used for storage and update, and celldata is no longer used.
If you need to take out `data` as initial data, you need to execute [transToCellData(data)](/guide/api.html#transtocelldata-data-setting) to convert it to celldata data.
Among them, the celldata in `{ r, c, v }` format is converted to a two-dimensional array using [transToData(celldata)](/guide/api.html#transtodata-celldata-setting)
Summarized as follows:
```js
// data => celldata two-dimensional array data into {r, c, v} format one-dimensional array
luckysheet.transToCellData(data)
// celldata => data to generate the two-dimensional array required for the table
luckysheet.transToData(celldata)
```
------------
## What are the cell types?
**<span style="font-size:20px;">A</span>**: Refer to [Cell Format List](/guide/cell.html), with examples of available cell formats
------------
## How to use Luckysheet in Vue/React project?
**<span style="font-size:20px;">A</span>**: Check
- Vue case: [luckysheet-vue](https://github.com/mengshukeji/luckysheet-vue)
- React case: [luckysheet-react](https://github.com/mengshukeji/luckysheet-react)
------------
## Why will the formula in the table not be triggered after initialization?
**<span style="font-size:20px;">A</span>**: Refer to [Table data format](/guide/sheet.html#calcchain) ,just set the calcChain corresponding to the cell data.
------------
## Is the remote loading data loadUrl or updateUrl?
**<span style="font-size:20px;">A</span>**: [loadUrl](/guide/config.html#loadurl). Configure loadUrl, Luckysheet will request the entire table data through ajax, and updateUrl will be used as the interface address for collaborative editing in real-time saving.
Note: Initial data needs to be configured with loadUrl parameter, while for collaborative editing, the four parameters of loadUrl, updateUrl and allowUpdate can be configured to take effect.
------------
## What is the difference between `index` and `order` for each sheet page?
**<span style="font-size:20px;">A</span>**: Each sheet page has a unique id, which is `index`, which can be incremented by numbers or a random string. And `order` is the sorting situation of all sheets, starting from 0, can only be numbers `0,1,2...`.
------------
## Why can’t I run the project directly under the dist folder?
**<span style="font-size:20px;">A</span>**: Need to start the local server
- [Node build a local server](https://github.com/JacksonTian/anywhere)
- [Python build local server](https://developer.mozilla.org/en-US/docs/Learn/Common_questions/set_up_a_local_testing_server)
------------
## How to import and export excel?
**<span style="font-size:20px;">A</span>**: The excel import and export library developed with Luckysheet-[Luckyexcel](https://github.com/mengshukeji/Luckyexcel) has realized the excel import function, and the export function is under development.You can refer to these 2 blog posts for excel export at this stage:
- [Development of Excel download function based on LuckySheet online form](https://www.cnblogs.com/recode-hyh/p/13168226.html)
- [Use exceljs to export luckysheet form](https://blog.csdn.net/csdn_lsy/article/details/107179708)
------------
## How to merge cells during initialization?
**<span style="font-size:20px;">A</span>**: Refer to the following case:
- [How Luckysheet initializes the data with merged cells](https://www.cnblogs.com/DuShuSir/p/13272397.html)
------------
## How does 'Luckysheet' save the data from the table to the database? Is there a soulution for storage and collaboration?
**<span style="font-size:20px;">A</span>**: There are two options:
- 1. after the table operation is completed, you can use `luckysheet.getAllSheets()` to get all sheet data that stroed in the back-end.
- 2. enable the collaborative editing function to transmit data to the back-end in real-time.
refer this article:
[How Luckysheet saves the data in the table to the database](https://www.cnblogs.com/DuShuSir/p/13857874.html)
------------
## How to monitor cell hover or click events? how to monitor `cellRenderAfter` in real-time?
**<span style="font-size:20px;">A</span>**: We have collected the secondary development requirements for cell events, and planned the cell-related hook functions, refer to [cell hook function](/guide/config.html#cellrenderafter) (the TODO displayed is not yet open)
------------
## How to customize the top toolbar?
**<span style="font-size:20px;">A</span>**:
reference: [options.showtoolbarconfig](/guide/config.html#showtoolbarconfig)(TODO means waiting to developed)
------------
## Does the project use jQuery?
**<span style="font-size:20px;">A</span>**: yes. At the beginning, Luckysheet uses jQuery。The packaging tool will package the jQuery to this file `./plugins/js/plugin.js`
If your project (such as react / Vue) also references jQuery globally and causes conflicts, you can try to remove a jQuery.
if you want to remove jQuery in `Luckysheet`, you can find `jQuery` in source code folder `gulpfile.js`: [src/plugins/js/jquery.min.js](https://github.com/mengshukeji/Luckysheet/blob/master/gulpfile.js),then delete information related to jQuery.
------------
## How to add a field to a cell object?
**<span style="font-size:20px;">A</span>**: reference [cell object format](/guide/cell.html),then read this annotation[src/controllers/postil.js](https://github.com/mengshukeji/Luckysheet/blob/master/src/controllers/postil.js)。the annotation is a configuration in a cell object.
------------
## The toolbar icon is on the loading stage all the time.
**<span style="font-size:20px;">A</span>**: The luckysheet use iconfont icon in this project, if any icon cannot be loaded ,plz check your iconfont.css. we are so sorry that we did not describe it clearly in the old version documents.
Now the documents have been updated.[official documents](/guide/#steps-for-usage)
------------
## Can't run Luckyexcel after package.
**<span style="font-size:20px;">A</span>**: Terminal does not show `end`, but if the `dist` folder has this file `luckyexcel.js`, it is normal.
Lucky excel is an excel import and export library. The project uses `gulp` as a packaging tool. There is a problem with the old version of the packaging tool, but it is fixed now. if this problem still troubles you, plz check the following steps:
1. pull the latest code.
2. `npm i`
3. `npm run build`
more information: [Luckyexcel](https://github.com/mengshukeji/Luckyexcel/)
------------
## How to disable editing of cells?How to open sheet protection?
**<span style="font-size:20px;">A</span>**: Sheet protection includes disable editing of cells that you need to make some configurations on each sheets. `config.authority`, the latest configurations[sheet protection](/guide/sheet.html#config-authority)。
In order to make it easier for you to understand the function of sheet protection, the following video shows how to make the whole sheet uneditable, but allow a column of cells to be edited:
<iframe frameborder="0" src="https://v.qq.com/txp/iframe/player.html?vid=g3162sacwn6" allowFullScreen="true"></iframe>
In you local browser, you can open the control pannel, use `luckysheet.getLuckysheetfile()[0].config.authority` to get the configuration parameters.
------------
## How to configure data validation?
**<span style="font-size:20px;">A</span>**: there is the configuration of data validation,[data validation](/guide/sheet.html#dataVerification)。Also there is the API that you can use `data validation` in any time. [setDataVerification](/guide/api.html#setdataverification-optionitem-setting).
------------
## Is there a case for using Luckysheet with CDN?
**<span style="font-size:20px;">A</span>**: Luckysheet supports CDN. reference: [The case of using luckysheet by CDN](https://www.cnblogs.com/DuShuSir/p/13859103.html)
------------
## how to limit the adaptive height of a picture in a cell?
**<span style="font-size:20px;">A</span>**: First of all, you need to move the picture and adjust the cell size, and then there are the following situations:
- if the cell contains a picture and you expand the cell, the picure will not be expanded.
- if the cell contains a picture and you shorten the cell to the edge of the picture, the picture will shrink.
- When the picture exceeds the border of the cell, the size of this picture will change with the size of the cell.
if you want to get the position of the picture, you can overlap the picture with the border of the cell.(in the source code, it needs to overlap more than 2px.)The following demo video shows how to limit the image to the adaptive width and height of the cell.
<iframe frameborder="0" src="https://v.qq.com/txp/iframe/player.html?vid=y3163ya0q6c" allowFullScreen="true"></iframe>
------------
## How to get the default row height and column width of the worksheet?
**<span style="font-size:20px;">A</span>**: There are two ways to get it
- 1. use `luckysheet.getLuckysheetfile()` to get all configuration data, so you can get the `defaultRowHeight` and `defaultColWidth` in the sheet configuration data。
- 2. use API to get the default row height [getDefaultRowHeight](/guide/api.html#getdefaultrowheight-setting) and column width.[getDefaultColWidth](/guide/api.html#getdefaultcolwidth-setting)
------------
## How to hide the add row button and the back to top button below the worksheet?
**<span style="font-size:20px;">A</span>**: Configuration is open
- Allow adding rows [enableAddRow](/guide/config.html#enableaddrow)
- Allow back to top [enableAddBackTop](/guide/config.html#enableAddBackTop)
------------
## How to hide the row and column headings of the worksheet?
**<span style="font-size:20px;">A</span>**: Configuration is open
- The width of the row header area [rowHeaderWidth](/guide/config.html#rowheaderwidth)
- The height of the column header area [columnHeaderHeight](/guide/config.html#columnHeaderHeight)
------------
## What method can be called to set `config.merge`?
**<span style="font-size:20px;">A</span>**: Three methods
- Interface operation
- Use API: [setRangeMerge](/guide/api.html#setrangemerge-type-setting)
- Manually assemble merge parameters
------------
## Why is the official new feature ineffective?
**<span style="font-size:20px;">A</span>**: The first step is to check whether you have used CDN to import,
The CDN link used in the Luckysheet tutorial is the service provided by [jsdelivr](https://www.jsdelivr.com/package/npm/luckysheet), and the code is from [npmjs.com](https://www.npmjs.com/) automatically sync the past, not from [Github](https://github.com/mengshukeji/Luckysheet/). Because our newly submitted code still needs to be tested for a period of time, it will not be released to npm immediately, causing the npm code to lag behind Github.
If you need to try the latest code, we strongly recommend that you pull the code from the [Luckysheet Github](https://github.com/mengshukeji/Luckysheet/) main repository. After our version is stable, we will consider releasing the npm package in real time.
The second step, if it is to import the packaged code of the github repository, test to determine whether there is a bug, you can find the problem and try to fix it, and then [submit a PR](https://github.com/mengshukeji/Luckysheet/pulls), if can't fix it, please [submit issues](https://github.com/mengshukeji/Luckysheet/issues).
------------
## `npm run dev` reported an error: ʻError: Cannot find module'rollup'`?
**<span style="font-size:20px;">A</span>**: It may be a problem with the npm package installation, try the following steps:
1. `npm cache clean --force`
2. `npm i rimraf -g`
3. `rimraf node_modules`
4. Delete the package-lock.json file
5. `npm i`
6. `npm run dev`
Tip: Most other npm installation problems can also be solved by trying above steps.
------------
## How to carry out secondary development of Luckysheet in Vue project?
**<span style="font-size:20px;">A</span>**: The [luckysheet-vue](https://github.com/mengshukeji/luckysheet-vue) case is to provide an application integration solution.
If directly developed locally:
1. Start both the Luckysheet project and your own Vue project. For example, the Luckysheet project is at http://localhost:3001
2. Import Luckysheet to use in the Vue project through `http://localhost:3001`
In this case, after Luckysheet is modified in real time, the changes can be seen in the Vue project
------------
## Error reporting `Store.createChart` when creating chart?
**<span style="font-size:20px;">A</span>**: You need to introduce a chart plugin to use it. You should configure the chart plugin to use when the workbook is initialized. Refer to
- Plugins configuration [plugins](/guide/config.html#plugins)
- 或 官方demo [src/index.html](https://github.com/mengshukeji/Luckysheet/blob/master/src/index.html)
------------
## Can cells add custom attributes?
**<span style="font-size:20px;">A</span>**: The custom attributes directly assigned to the cell object will be filtered. To make the custom attributes take effect, you need to edit the code to remove the filter attributes.
------------
## How to enter text starting with `'='`? For example, `=currentDate('YYYY-MM-DD')`, it will remove the function by default, how to prohibit the function?
**<span style="font-size:20px;">A</span>**: Just add a single quotation mark in front of it, and it will be forcibly recognized as a string, which is consistent with excel. For example: `'=currentDate('YYYY-MM-DD')`
------------
## Why does the create callback have no effect?
**<span style="font-size:20px;">A</span>**: The API method `luckysheet.create()` does not have a callback, but Luckysheet provides a hook function to execute the callback method at a specified location, such as:
- Triggered before the workbook is created [workbookCreateBefore](/guide/config.html#workbookcreatebefore)
- Triggered after the workbook is created [workbookCreateAfter](/guide/config.html#workbookcreateafter)
------------
## When create, the first cell is selected by default, how to remove it?
**<span style="font-size:20px;">A</span>**: When the cell is selected, it is highlighted by default, just remove the highlight, use API: [setRangeShow](/guide/api.html#setrangeshow-range-setting)
```js
luckysheet.setRangeShow("A2",{show:false})
```
------------
## Where is the right-click event bound?
**<span style="font-size:20px;">A</span>**: In the source code [src/controllers/hander.js](https://github.com/mengshukeji/Luckysheet/blob/master/src/controllers/handler.js), search for `event.which == "3"` to find the code executed by the right-click event.
------------
## How to add a custom toolbar?
**<span style="font-size:20px;">A</span>**: No configuration is currently provided, you can refer to the implementation of the print button in the toolbar to modify the source code:
1. Search for `luckysheet-icon-print` globally to find the implementation of the print button, in [src/controllers/constant.js](https://github.com/mengshukeji/Luckysheet/blob/master/src/controllers/constant.js) add a similar template string, you need to customize a unique id
2. Modify [src/controllers/resize.js](https://github.com/mengshukeji/Luckysheet/blob/master/src/controllers/resize.js) and add a new record in the toobarConfig object
3. Modify [src/controllers/menuButton.js](https://github.com/mengshukeji/Luckysheet/blob/master/src/controllers/menuButton.js) to add an event listener
------------
## How to add custom formulas?
**<span style="font-size:20px;">A</span>**: Two source codes need to be modified:
1. Add a formula to the `functionImplementation` object in the [src/function/functionImplementation.js](https://github.com/mengshukeji/Luckysheet/blob/master/src/function/functionImplementation.js) file, format refer to formulas such as `SUM`/`AVERAGE`
2. Modify all the language packs in the [src/locale](https://github.com/mengshukeji/Luckysheet/blob/master/src/locale) file directory, and add the new formula description to the `functionlist` array in. Among them, `t` is the category of the function, `m` is the number of parameters, the minimum number of parameters and the maximum number of parameters.
------------
## Is there a similar loadData interface, I want to load 10 records first, and then dynamically load the data, these data are appended to the table?
**<span style="font-size:20px;">A</span>**: Yes. Our `loadSheetUrl` provides this function, which can be turned on by initializing `options.enablePage = true`.
Searching for `enablePage` in the source code, you can see that there is a `method.addDataAjax` method, which contains an ajax request to dynamically load data, which will be appended to the worksheet.
This function is now hidden in the document, because when we made this interface, the interface parameters were matched according to our actual business, which may not be universal. We are going to abstract and release it for everyone to use. If you want to use it yourself you can change it based on this.
It is recommended that you consider writing your own interface to load the data, and then use `setRangeValue` to append the data at the specified location, which has a higher degree of customization.
------------
================================================
FILE: docs/guide/README.md
================================================
# Luckysheet is no longer maintained, please use [Univer](https://github.com/dream-num/univer) instead!
# Get started
## Introduction
Luckysheet is an online spreadsheet like excel that is powerful, simple to configure, and completely open source.
## Demo
[Online demo](https://dream-num.github.io/LuckysheetDemo/)

## Online Case
- [Cooperative editing demo](http://luckysheet.lashuju.com/demo/)(Note: The official Java backend will also be open source after finishing,using OT algorithm. Please do not operate frequently to prevent the server from crashing)
## Features
### 🛠️Formatting
+ **Styling** (Change font style, size, color, or apply effects)
+ **Conditional formatting** (highlight interesting cells or ranges of cells, emphasize unusual values, and visualize data by using data bars, color scales, and icon sets that correspond to specific variations in the data)
+ **Align or rotate text**
+ **Support text truncation, overflow, automatic line wrapping**
+ **Data types**
+ **currency, percentages, decimals, dates**
+ **Custom** (E.g `##,###0.00` , `$1,234.56$##,###0.00_);[Red]($##,###0.00)`, `_($* ##,###0.00_);_(...($* "-"_);_(@_)`, `08-05 PM 01:30MM-dd AM/PM hh:mm` )
+ **Cell segmentation style** (Alt+Enter line break, sub,super, in-cell style)
### 🧬Cells
+ **Move cells by drag and dropping** (Operate on selection)
+ **Fill handle** (For a series like 1, 2, 3, 4, 5..., type 1 and 2 in the first two cells. For the series 2, 4, 6, 8..., type 2 and 4. Support arithmetic sequence, geometric sequence,date, week,chinese numbers)
+ **Auto Fill Options** (Fill copy, sequence, only format, no format, day, month, year)
+ **Multiple selection** (Hold Ctrl Selecting multiple cells, copy and paste)
+ **Find and replace** (Such as a particular number or text string, Support regular expression, whole word, case sensitive)
+ **Location** (Cells can be selected according to the data type)
+ **Merge cells**
+ **Data validation** (Checkbox, drop-down list, datePicker)
### 🖱️Row & columns
+ **Hide, Insert, Delete rows and columns**
+ **Frozen rows and columns** (First row, first column, Frozen to selection, freeze adjustment lever can be dragged)
+ **Split text** (Split text into different columns with the Convert Text to Columns Wizard)
### 🔨Operation
+ **Undo/Redo**
+ **Copy/Paste/Cut** (Copy from excel to Luckysheet with format, vice versa)
+ **Hot key** (The operating experience is consistent with excel, if there are differences or missing, please feedback to us)
+ **Format Painter** (Similar to google sheet)
+ **Selection by drag and dropping** (Change the parameters of formula and chart through selection)
### ⚙️Formulas & functions
+ **Built-in formulas**
+ Math (SUMIFS, AVERAGEIFS, SUMIF, SUM, etc.)
+ Text (CONCATENATE, REGEXMATCH, MID)
+ Date (DATEVALUE, DATEDIF, NOW, WEEKDAY, etc.)
+ Financial (PV, FV, IRR, NPV, etc.)
+ Logical (IF, AND, OR, IFERROR, etc.)
+ Lookup (VLOOKUP, HLOOkUP, INDIRECT, OFFSET, etc.)
+ Dynamic Array (Excel2019 new formulas, SORT,FILTER,UNIQUE,RANDARRAY,SEQUENCE)
+ **Array** (={1,2,3,4,5,6}, Crtl+Shift+Enter)
+ **Remote formulas** (DM_TEXT_TFIDF, DM_TEXT_TEXTRANK,DATA_CN_STOCK_CLOSE etc. Need remote interface, can realize complex calculation)
+ **Custom** (Some formula suitable for use in China have been added. AGE_BY_IDCARD, SEX_BY_IDCARD, BIRTHDAY_BY_IDCARD, PROVINCE_BY_IDCARD, CITY_BY_IDCARD, etc. You can define any formula you want)
### 📐Tables
+ **Filters** (Support color , numerical, date, text filtering)
+ **Sort** (Sort multiple fields simultaneously)
### 📈Pivot table
+ **Arrange fields** (Add fileds to rows, columns, values, area, it is similar to excel)
+ **Aggregation** (Surport Sum,Count,CountA,CountUnique,Average,Max,Min,Median,Product,Stdev,Stdevp,Var,VarP etc.)
+ **Filter data** (Add fileds to filters area and analyze the desired data )
+ **Drill down** (Double click pivot table cell to drill down for detail data )
+ **Create a PivotChart** (Pivot table can create a chart )
### 📊Chart
+ **Support types** (Line, Column, Area, Bar, Pie, comming soon Scatter, Radar, Gauge, Funnel etc.)
+ **Chart Plugins** (Link to another project [ChartMix](https://github.com/mengshukeji/chartMix)(MIT): ECharts is currently supported,Highcharts, Ali G2, amCharts, googleChart, chart.js are being developed gradually)
+ **Sparklines** (Support by formula : Line, Pie, Box, Pie etc.)
### ✍️Share
+ **Comments** (Add, delete, update)
+ **Collaborate** (Simultaneous editing by multiple users)
### 📚Insert object
+ **Insert picture** (JPG,PNG,SVG and so on)
### ⚡Luckysheet
+ **Matrix operation** (Operate selection through the right-click menu: transpose, rotate, numerical calculation)
+ **Screenshot** (Take a screenshot with selection)
+ **Copy to** (In the right-click menu, copy selection to json, array etc.)
+ **EXCEL import/export** (Specially adapted to Luckysheet, export is under development)
### ⏱️Coming soon
+ **Print** (Like excel print option, save to PDF)
+ **Tree menu** (Just like the outline (group) function of excel)
+ **Table new Features** (filter, slicer)
+ **CSV,TXT import/export** (Specially adapted to Luckysheet)
+ **Insert Shapes** ([Pen tool](https://github.com/mengshukeji/Pentool) Shapes)
+ **Documentation** (Improve documentation and API)
+ **More...** (Please advise us)
## Development model
### Requirements
[Node.js](https://nodejs.org/en/) Version >= 6
### Installation
```shell
npm install
npm install gulp -g
```
### Development
```shell
npm run dev
```
### Package
```shell
npm run build
```
## Steps for usage
### First step
There are two ways to introduce dependencies
#### CDN
```html
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/css/pluginsCss.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/plugins.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/css/luckysheet.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/assets/iconfont/iconfont.css' />
<script src="https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/js/plugin.js"></script>
<script src="https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/luckysheet.umd.js"></script>
```
Note that the path of `https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/luckysheet.umd.js` means that the latest luckysheet code will be pulled, but if Luckysheet has just been released, the jsdelivr website may not have time Synchronize from npm, so using this path will still pull to the previous version. We recommend that you directly specify the latest version.
To specify the Luckysheet version, please add the version number after all CDN dependent files, such as: `https://cdn.jsdelivr.net/npm/luckysheet@2.1.12/dist/luckysheet.umd.js`.
> How do I know which version is the latest version? View the latest [release record](https://github.com/mengshukeji/Luckysheet/releases) or [package.json](https://github.com/mengshukeji/Luckysheet/blob/master/package.json)` version` field.
If it is not convenient to access jsdelivr.net, you can also import it locally
#### Import locally
After `npm run build`, all files in the `dist` folder are copied to the project directory
```html
<link rel='stylesheet' href='./plugins/css/pluginsCss.css' />
<link rel='stylesheet' href='./plugins/plugins.css' />
<link rel='stylesheet' href='./css/luckysheet.css' />
<link rel='stylesheet' href='./assets/iconfont/iconfont.css' />
<script src="./plugins/js/plugin.js"></script>
<script src="./luckysheet.umd.js"></script>
```
### Second step
Specify a table container
```html
<div id="luckysheet" style="margin:0px;padding:0px;position:absolute;width:100%;height:100%;left: 0px;top: 0px;"></div>
```
### Third step
Create a table
```javascript
<script>
$(function () {
//Configuration item
var options = {
container: 'luckysheet' //luckysheet is the container id
}
luckysheet.create(options)
})
</script>
```
## Structure
### Format
The data format of a complete Luckysheet table file is: luckysheetfile, a table file contains several sheet files, corresponding to excel sheet0, sheet1, etc.
An example of a Luckysheet file is as follows, the table contains 3 sheets:`
luckysheetfile = [{sheet1 settings}, {sheet2 settings}, {sheet3 settings}]`
Equivalent to 3 sheets of excel

An example of a sheet in the file is as follows:
```javascript
luckysheetfile[0] =
{
"name": "Cell", //Worksheet name
"color": "", //Worksheet color
"config": {}, //Table row height, column width, merged cells, borders, hidden rows and other settings
"index": "0", //Worksheet index
"chart": [], //Chart configuration
"status": "1", //Activation status
"order": "0", //The order of the worksheet
"hide": 0,//whether to hide
"column": 18, //Number of columns
"row": 36, //number of rows
"celldata": [], //Original cell data set
"visibledatarow": [], //The position of all rows
"visibledatacolumn": [], //The position of all columns
"ch_width": 2322, //The width of the worksheet area
"rh_height": 949, //The height of the worksheet area
"scrollLeft": 0, //Left and right scroll bar position
"scrollTop": 315, //Up and down scroll bar position
"luckysheet_select_save": [], //selected area
"luckysheet_conditionformat_save": {},//Conditional format
"calcChain": [],//Formula chain
"isPivotTable":false,//Whether to pivot table
"pivotTable":{},//Pivot table settings
"filter_select": null,//Filter range
"filter": null,//Filter configuration
"luckysheet_alternateformat_save": [], //Alternate colors
"luckysheet_alternateformat_save_modelCustom": []//Customize alternate colors
}
```
### View method
View in chrome's console
`luckysheet.getluckysheetfile()`
You can see the complete settings
`[{shee1}, {sheet2}, {sheet3}]`
## Keyboard shortcuts
| Keyboard shortcuts | Features |
| ------------ | ------------ |
| CTRL + C | Copy cell |
| CTRL + V | Paste cell |
| CTRL + X | Cut cell |
| CTRL + Z | Undo |
| CTRL + Y | Redo |
| CTRL + A | Select all |
| CTRL + B | Bold |
| CTRL + F | Find |
| CTRL + H | Replace |
| CTRL + I | Italic |
| CTRL + UP/DOWN/LEFT/RIGHT | Quickly adjust cell marquee |
| SHIFT + UP/DOWN/LEFT/RIGHT | Adjust selection area |
| CTRL + Left mouse click | Multiple selection cell |
| SHIFT + Left mouse click | Adjust selection area |
| UP/DOWN/LEFT/RIGHT | Move cell selection box |
| ENTER | Edit cell |
| TAB | Move cell selection box to the right |
| DELETE | Clear cell data |
## Guide
If you encounter problems with Luckysheet, follow the steps below to find the answer
1. Use Doge or Google to search for common technical issues
2. For Luckysheet related issues, please view [Luckysheet Official Document](https://dream-num.github.io/LuckysheetDocs/)(Note that the function of marking TODO has not yet been implemented)
3. Search [FAQ List](https://dream-num.github.io/LuckysheetDocs/guide/FAQ.html)
4. Search [Official Forum](https://groups.google.com/g/luckysheet) to see if anyone has encountered it
5. Try to check or experiment by yourself to find the answer
6. Please try to read the source code to find the answer,
If none of the above methods solve your problem, you can consider:
- Go to [Official Forum](https://groups.google.com/g/luckysheet) to ask questions
- Go to [Gitter](https://gitter.im/mengshukeji/Luckysheet) to ask questions
- If there are obvious problems or the needs cannot be met, please submit [issues](https://github.com/mengshukeji/Luckysheet/issues)
> Recommended reading [How To Ask Questions The Smart Way](http://www.catb.org/~esr/faqs/smart-questions.html)
At the same time, we strongly recommend you to help us enrich the Luckysheet community
- If you find a problem with the documentation or code, you can contribute by submitting a PR. All reasonable changes, optimizations, amendments, or document amendments or updates related to submissions will be accepted
- When you have some experience in using or secondary developing Luckysheet, we encourage you to share it through blog posts
================================================
FILE: docs/guide/api.md
================================================
# API
Luckysheet has opened up the main function API for common data operation requirements, and developers can do any docking development according to their needs.
Use note:
1. When script is introduced globally, all APIs are mounted under the window.luckysheet object, which can be printed and seen in the browser console; when npm is introduced, all APIs are also mounted under the luckysheet object
2. The first parameter of the `success` callback function is the return value of the API method
3. If you need a new API, please submit it to github [Issues](https://github.com/mengshukeji/Luckysheet/issues/new/choose), and decide whether to open the new API according to the number of likes
4. The required `order` parameter in the API method is the value of `order` in the worksheet object, not `index`
## Cell operation
### getCellValue(row, column [,setting])<div id='getCellValue'></div>
- **Parameter**:
- {Number} [row]: The row number of the cell; an integer starting from 0, 0 means the first row
- {Number} [column]: The number of the column where the cell is located; an integer starting from 0, 0 means the first column
- {PlainObject} [setting]: optional parameters
+ {String} [type]: The value type of the cell, which can be set to the original value `v` or the display value `m`; the default value is `v`, which means to get the actual value of the cell
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
- **Explanation**:
Get the value of the cell.
In special cases, the cell format is `yyyy-MM-dd`, when `type` is `'v'`, the display value of `'m'` will be forced
- **Usage**:
- Returns the v value of the data in the first row and first column of the current worksheet
`luckysheet.getCellValue(0, 0)`
- Returns the original value of the cell in the second row and second column of the specified data.
`luckysheet.getCellValue(1, 1, {type:"m"})`
------------
### setCellValue(row, column, value [,setting])
- **Parameter**:
- {Number} [row]: The row number of the cell; an integer starting from 0, 0 means the first row
- {Number} [column]: The number of the column where the cell is located; an integer starting from 0, 0 means the first column
- {Object| String| Number} [value]: The value to be set; it can be a string or a number, or an object conforming to the Luckysheet cell format, refer to [cell attribute table](/zh/guide/cell.html )
- {PlainObject} [setting]: Optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Boolean} [isRefresh]: Whether to refresh the interface; the default is `true`; used to control throttling when multiple cells are assigned, the previous cell should be set to `false`, and the last cell is set Is `true`.
+ {Function} [success]: The callback function for the end of the operation
- **Explanation**:
Set the value of a cell, you can also set the entire cell object, which is used to set multiple cell properties at the same time.
If you need to update the formula, you can also assign a value here. Luckysheet will actively calculate this formula internally and add it to the formula chain, and finally refresh the interface.
- **Usage**:
- Set the value of cell "A1" in the current worksheet to "1"
`luckysheet.setCellValue(0, 0, 1);`
- Set the current worksheet "B1" cell value to the formula "=sum(A1)"
`luckysheet.setCellValue(0, 1, "=sum(A1)");`
- Set the cell "C1" of the current worksheet to the formula "=sum(A1:B1" with a red background. The cell object can have no `v` and `m` values. Luckysheet will automatically calculate the result according to the formula information. With `v` and `m` values that have not been updated or are non-formula results, Luckysheet will still calculate the prepared results based on the data actually associated with the formula.
`luckysheet.setCellValue(0, 2, {f: "=sum(A1:B1)", bg:"#FF0000"})`
Set the "C1" cell again and the new formula can still take effect
`luckysheet.setCellValue(0, 2, {f: "=sum(A1)", bg:"#00FF00"})`
------------
### clearCell(row, column [,setting])
- **Parameter**:
- {Number} [row]: The row number of the cell; an integer starting from 0, 0 means the first row
- {Number} [column]: The number of the column where the cell is located; an integer starting from 0, 0 means the first column
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Clear the contents of the specified cell of the specified worksheet, return the cleared data, which is different from the function of deleting the cell, no need to set the cell movement
- **Usage**:
- Clear the contents of cell `B2`
`luckysheet.clearCell(1,1)`
------------
### deleteCell(move, row, column [,setting])
- **Parameter**:
- {String} [move]: After deleting, whether the cells on the right or below move
Possible values of `move` are:
+ `"left"`: Move the right cell to the left
+ `"up"`: Move the lower cell up
- {Number} [row]: The row number of the cell; an integer starting from 0, 0 means the first row
- {Number} [column]: The number of the column where the cell is located; an integer starting from 0, 0 means the first column
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Delete the specified cell of the specified worksheet, return the deleted data, and at the same time, specify whether to move the right cell to the left or the bottom cell to move up
- **Usage**:
- Delete the current cell and after deleting, the right cell moves to the left
`luckysheet.deleteCell('left')`
------------
### setCellFormat(row, column, attr, value [,setting])
- **Parameter**:
- {Number} [row]: The row number of the cell; an integer starting from 0, 0 means the first row
- {Number} [column]: The number of the column where the cell is located; an integer starting from 0, 0 means the first column
- {String} [attr]: attribute type, refer to attribute value of [cell attribute table](/zh/guide/cell.html)
- {String | Number | Object} [value]: Specific setting value, one attribute will correspond to multiple values, refer to the value example of [cell attribute table](/zh/guide/cell.html), if the attribute type is ` Attr` is the cell format `ct`, then the setting value `value` should provide a ct object, such as: `{fa:"General", t:"g"}`, for example, set the format of cell A1 to percentage format:
`luckysheet.setCellFormat(0, 0, "ct", {fa:"0.00%", t:"n"})`
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Set the properties of a cell. If you want to set the value of a cell or set multiple cell properties at the same time, it is recommended to use `setCellValue`
Special settings
When setting the border, attr is `"bd"`, value is a key/value object, and the border type: `borderType`/border thickness:`style`/border color:`color` need to be set at the same time, such as setting A1 unit The border of the grid is all/red/thin:
`luckysheet.setCellFormat(0, 0, "bd", {borderType: "border-right",style: "1", color: "#ff0000"})`
The complete optional setting parameters are as follows:
+ Border Type `borderType: "border-left" | "border-right" | "border-top" | "border-bottom" | "border-all" | "border-outside" | "border-inside" | "border -horizontal" | "border-vertical" | "border-none"`,
+ Border thickness `style: 1 Thin | 2 Hair | 3 Dotted | 4 Dashed | 5 DashDot | 6 DashDotDot | 7 Double | 8 Medium | 9 MediumDashed | 10 MediumDashDot | 11 MediumDashDotDot | 12 SlantedDashDot | 13 Thick`
+ Border color `color: hexadecimal color value`
- **Usage**:
- Set the current worksheet A1 cell text bold
`luckysheet.setCellFormat(0, 0, "bl", 1)`
- Set the B2 cell background of the second worksheet to red
`luckysheet.setCellFormat(1, 1, "bg", "#ff0000", {order:1})`
- Set the value of cell "A1" of the current worksheet to "abc"
`luckysheet.setCellFormat(0, 0,'v','abc');`
------------
### find(content [,setting])
- **Parameter**:
- {String} [content]: the content to find
- {PlainObject} [setting]: optional parameters
+ {Boolean} [isRegularExpression]: Whether to match the regular expression; the default is `false`
+ {Boolean} [isWholeWord]: Whether to match the whole word; the default is `false`
+ {Boolean} [isCaseSensitive]: Whether to match case sensitively; the default is `false`
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {String} [type]: cell attribute; the default value is `"m"`
- **Explanation**:
Find the specified content in a worksheet and return a one-bit array of cells composed of the found content, the data format is the same as `celldata`.
- **Usage**:
- Find the string `"value"` in the current worksheet
`luckysheet.find("value")`
- Find cells in the current worksheet whose formula contains `"SUM"`
`luckysheet.find("SUM",{type:"f"})`
------------
### replace(content, replaceContent [,setting])
- **Parameter**:
- {String} [content]: the content to find
- {String} [replaceContent]: The content to be replaced
- {PlainObject} [setting]: optional parameters
+ {Boolean} [isRegularExpression]: Whether to match the regular expression; the default is `false`
+ {Boolean} [isWholeWord]: Whether to match the whole word; the default is `false`
+ {Boolean} [isCaseSensitive]: Whether to match case sensitively; the default is `false`
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Find the specified content in a worksheet and replace it with new content, and return a one-bit array of cells composed of the replaced content. The data format is the same as `celldata`.
- **Usage**:
- Find the string `"value"` in the current worksheet and replace it with `"out"`
`luckysheet.replace("value", "out")`
------------
### exitEditMode([,setting])
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Exit edit mode. After double-clicking the cell with the mouse, it will enter the cell editing mode. After the editing is completed, when the mouse clicks on the input box elsewhere to lose focus, the editing mode will be exited, and the value of the cell will be saved. This Api is the operation of automatically exiting the editing mode, mainly to trigger the automatic saving of cells.
- **Usage**:
- Manually trigger to exit edit mode
`luckysheet.exitEditMode()`
------------
## Row and column operations
### setHorizontalFrozen(isRange [,setting])
- **Parameter**:
- {Boolean} [isRange]: Whether to freeze rows to selection
Possible values of `isRange` are:
+ `"false"`: Freeze the first line
+ `"true"`: freeze line to selection
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: Set when `isRange` is `true`, open the frozen cell position, the format is `{ row_focus:0, column_focus:0 }`, which means the currently activated cell The number of rows and columns of the grid; the default is obtained from the last selection of the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Freeze row operation
Pay special attention to the setting of `range` in `setting` only when `isRange` is set to `true`, which is different from the general range format.
- **Usage**:
- Freeze the first row
`luckysheet.setHorizontalFrozen(false)`
- Frozen to `B5` selection
`luckysheet.setHorizontalFrozen(true, { range: 'B5' })`
------------
### setVerticalFrozen(isRange [,setting])
- **Parameter**:
- {Boolean} [isRange]: Whether to freeze the selection
Possible values of `isRange` are:
+ `"false"`: Freeze the first column
+ `"true"`: Freeze column to selection
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: Set when `isRange` is `true`, open the frozen cell position, the format is `{ row_focus:0, column_focus:0 }`, which means the currently activated cell The number of rows and columns of the grid; the default is obtained from the last selection of the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Freeze column operation
Pay special attention to the setting of `range` in `setting` only when `isRange` is set to `true`, which is different from the general range format.
- **Usage**:
- Freeze the first column
`luckysheet.setVerticalFrozen(false)`
------------
### setBothFrozen(isRange [,setting])
- **Parameter**:
- {Boolean} [isRange]: Whether to freeze the ranks to the selection
Possible values of `isRange` are:
+ `"false"`: Freeze ranks
+ `"true"`: Freeze ranks to selection
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: Set when `isRange` is `true`, open the frozen cell position, the format is `{ row_focus:0, column_focus:0 }`, which means the currently activated cell The number of rows and columns of the grid; the default is obtained from the last selection of the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Freeze rank operation
Pay special attention to the setting of `range` in `setting` only when `isRange` is set to `true`, which is different from the general range format.
If you want to use this API to set the freeze after the workbook is initialized, you can execute it in the hook function after the workbook is created, such as:
```js
luckysheet.create({
hook:{
workbookCreateAfter:function(){
luckysheet.setBothFrozen(false);
}
}
});
- **Usage**:
- Frozen ranks
`luckysheet.setBothFrozen(false)`
------------
### cancelFrozen([setting])
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Cancel freeze operation
- **Usage**:
- Cancel freeze
`luckysheet.cancelFrozen()`
------------
### insertRow(row [,setting])
- **Parameter**:
- {Number} [row]: Insert a blank row in the first few rows, starting from 0
- {PlainObject} [setting]: optional parameters
+ {Number} [number]: The number of blank rows inserted; the default is 1
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Insert a blank line in the `number` line at the position of the `row` line
- **Usage**:
- Insert a blank line at the position of line 2
`luckysheet.insertRow(1)`
------------
### insertColumn( column [,setting])
- **Parameter**:
- {Number} [column]: Insert a blank column in the first column
- {PlainObject} [setting]: optional parameters
+ {Number} [number]: The number of blank columns to insert; the default is 1
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Insert a blank column in column `number` at the position of column `column`
- **Usage**:
- Insert 3 blank rows in column 1
`luckysheet.insertRow(0, { number: 3 })`
------------
### deleteRow(rowStart, rowEnd [,setting])
- **Parameter**:
- {Number} [rowStart]: the starting row to delete
- {Number} [rowEnd]: the end row to be deleted
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Delete the specified row
Special reminder, after deleting the row, the serial number of the row will not change, the following row will be added to the above, pay attention to observe whether the data is deleted correctly.
- **Usage**:
- Delete 2-4 lines
`luckysheet.deleteRow(1, 3)`
------------
### deleteColumn(columnStart, columnEnd [,setting])
- **Parameter**:
- {Number} [columnStart]: the starting column to be deleted
- {Number} [columnEnd]: the end column to be deleted
To
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Delete the specified column
Special reminder, after deleting the column, the serial number of the column will not change, the right column will be added to the left, pay attention to whether the data is deleted correctly.
- **Usage**:
- Delete 2-4 columns
`luckysheet.deleteColumn(1, 3)`
------------
### hideRow(rowStart, rowEnd [,setting])
- **Parameter**:
- {Number} [rowStart]: The starting row to be hidden
- {Number} [rowEnd]: the end row to be hidden
To
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Hide the specified row
Special reminder, after the row is hidden, the row number will change.
- **Usage**:
- Hide 2-4 rows
`luckysheet.hideRow(1, 3)`
------------
### hideColumn(columnStart, columnEnd [,setting])(TODO)
- **Parameter**:
- {Number} [columnStart]: the starting column to be hidden
- {Number} [columnEnd]: the end column to be hidden
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Hide the specified column
Special reminder, after hiding the column, the sequence number of the column will change.
- **Usage**:
- Hide 2-4 columns
`luckysheet.hideColumn(1, 3)`
------------
### showRow(rowStart, rowEnd [,setting])
- **Parameter**:
- {Number} [rowStart]: the starting row to be displayed
- {Number} [rowEnd]: the end row to be displayed
To
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Show the specified row
- **Usage**:
- Display 2-4 lines
`luckysheet.showRow(1, 3)`
------------
### showColumn(columnStart, columnEnd [,setting])(TODO)
- **Parameter**:
- {Number} [columnStart]: the starting column to be displayed
- {Number} [columnEnd]: the end column to be displayed
To
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Show the specified column
- **Usage**:
- Display 2-4 columns
`luckysheet.showColumn(1, 3)`
------------
### setRowHeight(rowInfo [,setting])
(TODO)
- **Parameter**:
- {Object} [rowInfo]: Correspondence between number of rows and height
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Set the height of the specified ~~row~~
- **Usage**:
- Set the height of the first row to 50px and the height of the second row to 60px
`luckysheet.setRowHeight({0:50,1:60})`
------------
### setColumnWidth(columnInfo [,setting])
(TODO)
- **Parameter**:
- {Object} [columnInfo]: Correspondence between the number of columns and the width
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Set the width of the specified column
- **Usage**:
- Set the width of the first column to 50px and the width of the second column to 60px
`luckysheet.setColumnWidth({0:50,1:60})`
------------
### getRowHeight(rowInfo [,setting])
(TODO)
- **Parameter**:
- {Array} [rowInfo]: The number of rows
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Get the height of the specified row, get the object corresponding to the number of rows and height
- **Usage**:
- The height of the first row is 50px, the height of the second row is 60px, get these values
`luckysheet.getRowHeight([0,1])`
Return to get
`{0:50,1:60}`
------------
### getColumnWidth(columnInfo [,setting])
(TODO)
- **Parameter**:
- {Array} [columnInfo]: The number of columns
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Get the width of the specified column, get the object of the corresponding relationship between the number of columns and the width
- **Usage**:
- The width of the first column is 50px, the width of the second column is 60px, get these values
`luckysheet.getColumnWidth([0,1])`
Return to get
`{0:50,1:60}`
------------
### getDefaultRowHeight([,setting])
(TODO)
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Get the default row height of the specified worksheet
- **Usage**:
- Returns the default row height of the current worksheet
`luckysheet.getDefaultRowHeight()`
Return to get
`19`
------------
### getDefaultColWidth([,setting])
(TODO)
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Get the default column width of the specified worksheet
- **Usage**:
- Returns the default column width of the current worksheet
`luckysheet.getDefaultColWidth()`
Return to get
`73`
------------
## Selection operation
### getRange()
- **Explanation**:
Returns an array of current selection objects, there may be multiple selections. The format of each selection area is an object composed of row/column information `{row:[0,1],column:[0,1]}`
- **Usage**:
- The current selection is "A1:B2" and "B4:C5", execute
`luckysheet.getRange()`
The returned result is:
```json
[
{ "row": [0,1], "column": [0,1] },
{ "row": [3,4], "column": [1,2] }
]
```
------------
### getRangeWithFlatten()
- **Explanation**:
Returns an array representing the positions of all cells in the specified area, which is different from the getrange method, which organizes the data of the selection by cell (rather than a continuous area).
- **Usage**:
- Select the specified area in the table, and then execute
`luckysheet.getRange()`
The returned result is:
```json
[
{"row":[0,0],"column":[0,2]},
{"row":[1,1],"column":[0,0]},
{"row":[3,3],"column":[0,0]}
]
```
Where,{"row":[0,0],"column":[0,2]} denote a whole continuous region.
- Select the area above in the table and execute
`luckysheet.getRangeWithFlatten()`
The returned result is:
```json
[
{"r":0,"c":0},
{"r":0,"c":1},
{"r":0,"c":2},
{"r":1,"c":0},
{"r":3,"c":0}
]
```
------------
### getRangeValuesWithFlatte()
- **Explanation**:
Returns an array of objects representing the contents of all cells in a specified range
- **Usage**:
- Select the specified area in the table, and then execute
`luckysheet.getRange()`
The returned result is:
```json
[
{"row":[0,0],"column":[0,2]},
{"row":[1,1],"column":[0,0]},
{"row":[3,3],"column":[0,0]}
]
```
Where,{"row":[0,0],"column":[0,2]} denote a whole continuous region.
- Select the area above in the table and execute
`luckysheet.getRangeValuesWithFlatte()`
The returned result is:
```json
[
{
"bg": null,
"bl": 0,
"it": 0,
"ff": 0,
"fs": 11,
"fc": "rgb(51, 51, 51)",
"ht": 1,
"vt": 1,
"v": 1,
"ct": {
"fa": "General",
"t": "n"
},
"m": "1"
},
{
"bg": null,
"bl": 0,
"it": 0,
"ff": 0,
"fs": 11,
"fc": "rgb(51, 51, 51)",
"ht": 1,
"vt": 1,
"v": 2,
"ct": {
"fa": "General",
"t": "n"
},
"m": "2"
},
{
"bg": null,
"bl": 0,
"it": 0,
"ff": 0,
"fs": 11,
"fc": "rgb(51, 51, 51)",
"ht": 1,
"vt": 1,
"v": 3,
"ct": {
"fa": "General",
"t": "n"
},
"m": "3"
},
{
"v": "Background",
"ct": {
"fa": "General",
"t": "g"
},
"m": "Background",
"bg": null,
"bl": 1,
"it": 0,
"ff": 0,
"fs": 11,
"fc": "rgb(51, 51, 51)",
"ht": 1,
"vt": 1
},
{
"v": "Border",
"ct": {
"fa": "General",
"t": "g"
},
"m": "Border",
"bg": null,
"bl": 1,
"it": 0,
"ff": 0,
"fs": 11,
"fc": "rgb(51, 51, 51)",
"ht": 1,
"vt": 1
}
]
```
------------
### getRangeAxis()
- **Explanation**:
Returns an array of coordinate strings corresponding to the current selection. Multiple selections may exist. Each selection may be a single cell (such as A1) or a rectangular region of multiple cells (such as D9: E12)
- **Usage**:
- The current selection is"E10:E14"、"A7:B13"、"C4"、 "A3" and "C6:D9", execute
`luckysheet.getRangeAxis()`
The returned result is:
```json
["E10:E14", "A7:B13", "C4", "A3", "C6:D9"]
```
------------
### getRangeValue([setting])
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Object | String} [range]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column:[0 ,1]}`, can only be a single selection; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
- **Explanation**:
Returns the data of a two-dimensional array of cells in the specified range of the specified worksheet, each cell is an object.
[Cell Object Format Reference](/zh/guide/cell.html)
- **Usage**:
- The current selection is "A1:B2", execute
`luckysheet.getRangeValue()`
The returned result is:
```json
[
[
{
"v": "vaule1",
"ct": { "fa": "General", "t": "g" },
"m": "vaule1",
"bg": "rgba(255,255,255)",
"bl": 0,
"it": 0,
"ff": 1,
"fs": 11,
"fc": "rgb(51, 51, 51)",
"ht": 1,
"vt": 0
},
{
"v": "value3",
"ct": { "fa": "General", "t": "g" },
"m": "value3",
"bg": "rgba(255,255,255)",
"bl": 0,
"it": 0,
"ff": 1,
"fs": 11,
"fc": "rgb(51, 51, 51)",
"ht": 1,
"vt": 0
}
],
[
{
"v": "vaule2",
"ct": { "fa": "General", "t": "g" },
"m": "vaule2",
"bg": "rgba(255,255,255)",
"bl": 0,
"it": 0,
"ff": 1,
"fs": 11,
"fc": "rgb(51, 51, 51)",
"ht": 1,
"vt": 0
},
{
"v": "value4",
"ct": { "fa": "General", "t": "g" },
"m": "value4",
"bg": "rgba(255,255,255)",
"bl": 0,
"it": 0,
"ff": 1,
"fs": 11,
"fc": "rgb(51, 51, 51)",
"ht": 1,
"vt": 0
}
]
]
```
------------
### getRangeHtml([setting])
[todo]
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, allows an array of multiple selections; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
- **Explanation**:
Copy the data in the specified cell area of the specified worksheet and return the data containing the `<table>`html format, which can be used to paste into excel to maintain the cell style.
Note that if you copy multiple selections, these selections must have the same row or the same column to copy, and the copied results will also be automatically merged into a concatenated array, for example, multiple selections `"C18:C20"` / `"E18:E20"` / `"G18:H20"` is allowed, but multiple selections of `"C18:C20"` / `"E18:E21"` are not allowed
- **Usage**:
- The current selection is "A1:B2", execute
`luckysheet.getRangeHtml()`
The returned result is:
```html
<table data-type="luckysheet_copy_action_table">
<colgroup width="72px">
</colgroup>
<colgroup width="72px">
</colgroup>
<tr>
<td style="height:19px;">
value1
</td>
<td style="">
value3
</td>
</tr>
<tr>
<td style="height:19px;">
value2
</td>
<td style="">
value4
</td>
</tr>
</table>
```
------------
### getRangeJson(title [,setting])
- **Parameter**:
- {Boolean} [title]: Whether the first line is the title
Possible values of `title` are:
+ `"true"`: first row is title
+ `"false"`: The first row is not title
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, can only be a single selection; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
- **Explanation**:
Copy the data in the specified cell area of the specified worksheet and return the data in `json` format
- **Usage**:
- The current selection is "A1:B2", the first row is the title to get json
`luckysheet.getRangeJson(true)`
The returned result is:
```json
[
{ "value1": "value2", "value3": "value4" }
]
```
- The current selection is "A1:B2", the first row is not title to get json
`luckysheet.getRangeJson(false)`
The returned result is:
```json
[
{ "A": "value1", "B": "value3" },
{ "A": "value2", "B": "value4" }
]
```
------------
### getRangeArray(dimensional [,setting])
[todo]
- **Parameter**:
- {String} [dimensional]: array dimension
Possible values of `dimensional` are:
+ `"oneDimensional"`: one-dimensional array
+ `"twoDimensional"`: two-dimensional array
+ `"custom"`: a two-dimensional array of custom rows and columns
- {PlainObject} [setting]: optional parameters
+ {Number} [row]: Set when `dimensional` is `custom`, the number of rows in the multidimensional array
+ {Number} [column]: Set when `dimensional` is `custom`, the number of columns in the multidimensional array
+ {Array | Object | String} [range]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, can only be a single selection; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
- **Explanation**:
Copy the data in the specified cell area of the specified worksheet, and return the data in a one-dimensional, two-dimensional, or two-dimensional array of custom rows and columns.
Pay special attention to the setting of `row` and `column` in `setting` only when `dimensional` is set to `custom`
- **Usage**:
- The current selection is "A1:B2", a one-dimensional array
`luckysheet.getRangeArray('oneDimensional')`
The returned result is:
```json
["value1","value3","value2","value4"]
```
- The current selection is "A1:B2", a two-dimensional array
`luckysheet.getRangeArray('twoDimensional')`
The returned result is:
```json
[
[ "value1", "value3" ],
[ "value2", "value4" ]
]
```
- The current selection area is "A1:C5", which is composed of values from'value1' to'value15', and obtains a two-dimensional array data with 3 rows and 2 columns
`luckysheet.getRangeArray('custom', { row: 3, column: 2 })`
The returned result is:
```json
[
[
{
"m": "value1",
"ct": { "fa": "General", "t": "g" },
"v": "value1"
},
{
"ct": { "fa": "General", "t": "g" },
"v": "value6",
"m": "value6"
}
],
[
{
"ct": { "fa": "General", "t": "g" },
"v": "value11",
"m": "value11"
},
{
"m": "value2",
"ct": { "fa": "General", "t": "g" },
"v": "value2"
}
],
[
{
"ct": { "fa": "General", "t": "g" },
"v": "value7",
"m": "value7"
},
{
"ct": { "fa": "General", "t": "g" },
"v": "value12",
"m": "value12"
}
]
]
```
------------
### getRangeDiagonal(type [,setting])
- **Parameter**:
- {String} [type]: diagonal or diagonal offset
Possible values of `type` are:
+ `"normal"`: diagonal
+ `"anti"`: anti-diagonal
+ `"offset"`: diagonal offset
- {PlainObject} [setting]: optional parameters
- {Number} [column]: Set when `type` is `offset`, the number of columns for diagonal offset
+ {Array | Object | String} [range]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, can only be a single selection; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
- **Explanation**:
Copy the data in the specified cell area of the specified worksheet, and return the diagonal or diagonal offset data from the `column` column.
Pay special attention to the setting of `column` in `setting` only when `type` is set to `offset`.
- **Usage**:
- The current selection is "A1:B2", diagonal
`luckysheet.getRangeDiagonal('normal')`
The returned result is:
```json
[
{
"m": "value1",
"ct": { "fa": "General", "t": "g" },
"v": "value1"
},
{
"m": "value4",
"ct": { "fa": "General", "t": "g" },
"v": "value4"
}
]
```
- The current selection is "A1:B2", against the diagonal
`luckysheet.getRangeDiagonal('anti')`
The returned result is:
```json
[
{
"m": "value3",
"ct": { "fa": "General", "t": "g" },
"v": "value3"
},
{
"m": "value2",
"ct": { "fa": "General", "t": "g" },
"v": "value2"
}
]
```
- The current selection is "A1:B2", and the diagonal is offset by 1 column
`luckysheet.getRangeDiagonal('offset', { column: 1 })`
The returned result is:
```json
[
{
"m": "value3",
"ct": { "fa": "General", "t": "g" },
"v": "value3"
}
]
```
------------
### getRangeBoolean([setting])
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, can only be a single selection; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
- **Explanation**:
Copy the data in the specified cell area of the specified worksheet, and return the data of Boolean value
- **Usage**:
- The current selection is "A1:B2"
`luckysheet.getRangeBoolean()`
The returned result is:
```json
[
[ false, false ],
[ false, false ]
]
```
------------
### setRangeShow(range [,setting])<div id='setRangeShow'></div>
- **Parameter**:
- {Array | Object | String} [range]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, allows an array of multiple selections; the default is the current selection
- {PlainObject} [setting]: optional parameters
+ {Boolean} [show]: Whether to show the highlight selection effect; the default value is `true`
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Specify one or more selection areas in the worksheet to be selected and choose whether to highlight or not. Multiple format settings are supported.
Special reminder, the selection range setting involved in Luckysheet can refer to this setting
- **Usage**:
+ Set the current worksheet selection area `A1:B2`:
`luckysheet.setRangeShow("A1:B2")`
+ Set selection range `A1:B2`:
`luckysheet.setRangeShow(["A1:B2"])`
+ Set selection range `A1:B2`:
`luckysheet.setRangeShow({row:[0,1],column:[0,1]})`
+ Set selection range `A1:B2`:
`luckysheet.setRangeShow([{row:[0,1],column:[0,1]}])`
+ Set the selection range `A1:B2` and `C3:D4`:
`luckysheet.setRangeShow(["A1:B2","C3:D4"])`
+ Set the selection range `A1:B2` and `D3`:
`luckysheet.setRangeShow([{row:[0,1],column:[0,1]},{row:[2,2],column:[3,3]}])`
------------
### setRangeValue(data [,setting])
- **Parameter**:
- {Array} [data]: The data of a two-dimensional array of cells to be assigned. The value of each cell can be a string or a number, or an object conforming to the Luckysheet format. Refer to [cell attribute table](/zh /guide/cell.html)
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, can only be a single selection; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Boolean} [isRefresh]: Whether to refresh the interface; the default is `true`; used to control throttling when multiple cells are assigned, the previous cell should be set to `false`, and the last cell is set Is `true`.
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Assign a cell array data to the specified area, the data format is the same as the data obtained by the `getRangeValue` method.
Note that usually the `getRangeValue` method only obtains the selection data, but does not include the border and merged cell information. When the `setRangeValue` is executed, it will dynamically determine whether the previous step has executed the `getRangeValue`, if executed, the border will be Obtained from Luckysheet configuration together with the merged cell information.
- **Usage**:
+ Assign value to current selection
```js
const data = [
[
{
"m": "value1",
"ct": {
"fa": "General",
"t": "g"
},
"v": "value1"
},
{
"m": "value3",
"ct": {
"fa": "General",
"t": "g"
},
"v": "value3"
}
],
[
{
"m": "value2",
"ct": {
"fa": "General",
"t": "g"
},
"v": "value2"
},
{
"m": "value4",
"ct": {
"fa": "General",
"t": "g"
},
"v": "value4"
}
]
]
luckysheet.setRangeValue(data,{range:"A1:B2"})
```
------------
### setRangeFormat(attr, value [,setting])
- **Parameter**:
- {String} [attr]: attribute type,
Refer to the attribute value of [cell attribute table](/zh/guide/cell.html)
- {String | Number | Object} [value]: Specific setting value, one attribute will correspond to multiple values, refer to the value example of [cell attribute table](/zh/guide/cell.html), special case: if The attribute type `attr` is the cell format `ct`, then the setting value `value` should provide `ct.fa`, for example, set the cell format of `"A1:B2"` to percentage format:
To
`luckysheet.setRangeFormat("ct", "0.00%", {range:"A1:B2"})`
- {PlainObject} [setting]: optional parameters
+ {Object | String} [range]: Set the target selection range of the parameter. The supported selection format is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1], column:[0,1]}`, allows an array of multiple selections; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Set the cell format of the specified range, generally used as a processing format, the assignment operation recommends using the `setRangeValue` method
When setting the border, attr is `"bd"`, value is a key/value object, and the border type: `borderType`/border thickness:`style`/border color:`color` need to be set at the same time, such as setting `" A1:B2"`The border of the cell is all/red/thin:
`luckysheet.setRangeFormat("bd", {borderType: "border-right",style: "1", color: "#ff0000"}, {range:["A1:B2"]})`
The complete optional setting parameters are as follows:
+ Border Type `borderType: "border-left" | "border-right" | "border-top" | "border-bottom" | "border-all" | "border-outside" | "border-inside" | "border -horizontal" | "border-vertical" | "border-none"`,
+ Border thickness `style: 1 Thin | 2 Hair | 3 Dotted | 4 Dashed | 5 DashDot | 6 DashDotDot | 7 Double | 8 Medium | 9 MediumDashed | 10 MediumDashDot | 11 MediumDashDotDot | 12 SlantedDashDot | 13 Thick`
+ Border color `color: hexadecimal color value`
- **Usage**:
- Set the cell text in the current worksheet `"A1:B2"` range to be bold
`luckysheet.setRangeFormat("bl", 1, {range:"A1:B2"})`
- Set the background of the cells in the range of `"B2"` and `"C4:D5"` of the second worksheet to red
`luckysheet.setRangeFormat("bg", "#ff0000", {range:["B2","C4:D5"], order:1})`
------------
### setRangeFilter(type [,setting])
[todo]
- **Parameter**:
- {String} [type]: Turn on or off the filtering function
Possible values of `type` are:
+ `"open"`: Open the filter function and return the current filtered range object
+ `"close"`: Close the filter function and return to the scope of the filter before closing
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, can only be a single selection; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
For the worksheet of the specified subscript, the filter function is turned on or off for the selected range
- **Usage**:
- Open the filter function of the second worksheet "A1:B2"
`luckysheet.setRangeFilter("open",{range:"A1:B2",order:1})`
------------
### setRangeMerge(type [,setting])
- **Parameter**:
- {String} [type]: merge cell type
Possible values of `type` are:
+ `"all"`: Merge all, all cells in the area are merged into one large cell
+ `"horizontal"`: merge horizontally, cells in the same row in the area are merged into one cell
+ `"vertical"`: merge vertically, the cells in the same column in the area are merged into one cell
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, allows an array of multiple selections; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Set the merged cells for the worksheet with the specified subscript and the selected range
- **Usage**:
- The current selection'A1:B2' is set to merge cells, the type is merge all
`luckysheet.setRangeMerge("all")`
The data of'A1:B1' is:
```json
[
[
{
"m": "value1",
"ct": { "fa": "General", "t": "g" },
"v": "value1",
"mc": { "r": 0, "c": 0, "rs": 2, "cs": 2 }
},
{
"mc": { "r": 0, "c": 0 }
}
],
[
{
"mc": { "r": 0, "c": 0 }
},
{
"mc": { "r": 0, "c": 0 }
}
]
]
```
------------
### cancelRangeMerge( [setting])
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, allows an array of multiple selections; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Unmerge cells in the selected range for the worksheet with the specified subscript
- **Usage**:
- The current selection'A1:B2' is already a merged cell, now you want to cancel the merge
`luckysheet.cancelRangeMerge()`
------------
### setRangeSort(type [,setting])
- **Parameter**:
- {String} [type]: sort type
Possible values of `type` are:
+ `"asc"`: ascending order
+ `"des"`: descending order
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, can only be a single selection; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
For the worksheet of the specified subscript, the sort function is turned on for the selected range, and the sorted data of the selected range is returned.
- **Usage**:
- Set the current selection of the current worksheet to ascending order
`luckysheet.setRangeSort("asc")`
------------
### setRangeSortMulti(title, sort [,setting])
- **Parameter**:
- {Boolean} [title]: Does the data have a title row
- {Array} [sort]: Column setting, set the column index and sort method to be sorted, the format is like: `[{ i:0,sort:'asc' },{ i:1,sort:'des' }] `
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, can only be a single selection; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
For the worksheet of the specified subscript, the selected range enables the multi-column custom sorting function to return the sorted data of the selected range.
- **Usage**:
- Set the current selection of the current worksheet to a custom sort, the data has a header row, and it is sorted according to the rules of the first column ascending order and the second column descending order
`luckysheet.setRangeSortMulti(true,[{ i:0,sort:'asc' },{ i:1,sort:'des' }])`
------------
### setRangeConditionalFormatDefault(conditionName, conditionValue [,setting])
- **Parameter**:
- {String} [conditionName]: Conditional format rule type
Possible values of `conditionName` are:
+ `"greaterThan"`: greater than (conditionValue value is numeric or cell range)
+ `"lessThan"`: Less than (conditionValue value is numeric value or cell range)
+ `"betweenness"`: between (conditionValue value is numeric value or cell range)
+ `"equal"`: equal to (conditionValue value is numeric value or cell range)
+ `"textContains"`: text contains (conditionValue value is text or cell range)
+ `"occurrenceDate"`: date of occurrence (conditionValue value is date)
+ `"duplicateValue"`: Duplicate value (conditionValue value is '0': duplicate value, '1': unique value)
+ `"top10"`: the first N items (conditionValue value is 1~1000)
+ `"top10%"`: Top N% (conditionValue value is 1~1000)
+ `"last10"`: the last N items (conditionValue is 1~1000)
+ `"last10%"`: Last N% (conditionValue value is 1~1000)
+ `"AboveAverage"`: above average (conditionValue can be an empty array)
+ `"SubAverage"`: below average (conditionValue can be an empty array)
- {Array} [conditionValue]: You can set condition cells or condition values
Value rules (at least one value in the condition value array and at most two values)
```js
[2]
```
Or (if the value is the cell range, take the cell value in the upper left corner)
```js
['A1']
```
- {PlainObject} [setting]: optional parameters
+ {Object} [format]: color setting
* Set the text color and cell color; the default value is `{
"textColor": "#000000",
"cellColor": "#ff0000"
}`
+ {Array | Object | String} [cellrange]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, allows an array of multiple selections; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
For the worksheet of the specified subscript, the conditional formatting is enabled for the selected range, and some cells are highlighted according to the set conditional formatting rules, and the data after the conditional formatting is enabled is returned.
- **Usage**:
- Highlight cells with content greater than the number 2
`luckysheet.setRangeConditionalFormatDefault("greaterThan",{ type: 'value', content: [2] })`
- Highlight the cells whose content is less than the content of cell A1
`luckysheet.setRangeConditionalFormatDefault("lessThan",{ type: 'range', content: ['A1'] })`
- Highlight cells with content between 2 and 10
`luckysheet.setRangeConditionalFormatDefault("betweenness",{ type: 'value', content: [2,10] })`
- Highlight the cell whose content is equal to the content of cell A1
`luckysheet.setRangeConditionalFormatDefault("equal",{ type: 'range', content: ['A1'] })`
- Highlight the cell that contains the content of cell A1
`luckysheet.setRangeConditionalFormatDefault("textContains",{ type: 'range', content: ['A1'] })`
- Highlight cells with dates between `2020/09/24-2020/10/15`
`luckysheet.setRangeConditionalFormatDefault("occurrenceDate",{ type: 'value', content: ['2020/09/24 - 2020/10/15'] })`
- Highlight cells with repeated values, content is 0
`luckysheet.setRangeConditionalFormatDefault("duplicateValue",{ type: 'value', content: [0] })`
- Highlight the cell with unique value, content is 1
`luckysheet.setRangeConditionalFormatDefault("duplicateValue",{ type: 'value', content: [1] })`
- Highlight the top 20 cells
`luckysheet.setRangeConditionalFormatDefault("top",{ type: 'value', content: [20] })`
- Highlight the top 30% of cells
`luckysheet.setRangeConditionalFormatDefault("topPercent",{ type: 'value', content: [30] })`
- Highlight the bottom 15 cells
`luckysheet.setRangeConditionalFormatDefault("last",{ type: 'value', content: [15] })`
- Highlight the bottom 15% of cells
`luckysheet.setRangeConditionalFormatDefault("lastPercent",{ type: 'value', content: [15] })`
- Highlight cells that are above average
`luckysheet.setRangeConditionalFormatDefault("AboveAverage",{ type: 'value', content: ['AboveAverage'] })`
- Highlight cells below average
`luckysheet.setRangeConditionalFormatDefault("SubAverage",{ type: 'value', content: ['SubAverage'] })`
------------
### setRangeConditionalFormat(type [,setting])
- **Parameter**:
- {String} [type]: Conditional formatting rule type
Possible values of `type` are:
+ `"dataBar"`: data bar
+ `"icons"`: icon set
+ `"colorGradation"`: Color Gradation
- {PlainObject} [setting]: optional parameters
+ {Array | String} [format]: Color setting
* When `type` is `dataBar`, the gradient color should be set; the default value is blue-white gradient` ["#638ec6", "#ffffff"]`
Recommended shortcut value:
```js
["#638ec6", "#ffffff"], //Blue-white gradient data bar
["#63c384", "#ffffff"], //Green-white gradient data bar
["#ff555a", "#ffffff"], //Red-white gradient data bar
["#ffb628", "#ffffff"], //Orange-white gradient data bar
["#008aef", "#ffffff"], //Light blue-white gradient data bar
["#d6007b", "#ffffff"], //Purple-white gradient data bar
["#638ec6"], //Blue data bar
["#63c384"], //green data bar
["#ff555a"], //Red data bar
["#ffb628"], //Orange data bar
["#008aef"], //Light blue data bar
["#d6007b"] //Purple data bar
```
* When `type` is `icons`, the icon type should be set; the default value is "threeWayArrowMultiColor": the three-way arrow color,
Possible values are:
`threeWayArrowMultiColor`: three-way arrow (color),
`threeTriangles`: 3 triangles,
`fourWayArrowMultiColor`: four-way arrow (color),
`fiveWayArrowMultiColor`: five-way arrow (color),
`threeWayArrowGrayColor`: three-way arrow (gray),
`fourWayArrowGrayColor`: four-way arrow (gray),
`fiveWayArrowGrayColor`: five-way arrow (gray),
`threeColorTrafficLightRimless`: three-color traffic light (no border),
`threeSigns`: three signs,
`greenRedBlackGradient`: green-red-black gradient,
`threeColorTrafficLightBordered`: three-color traffic light (with border),
`fourColorTrafficLight`: Four-color traffic light,
`threeSymbolsCircled`: three symbols (with a circle),
`tricolorFlag`: tricolor flag,
`threeSymbolsnoCircle`: three symbols (no circle),
`threeStars`: 3 stars,
`fiveQuadrantDiagram`: five-quadrant diagram,
`fiveBoxes`: 5 boxes,
`grade4`: Four grades,
`grade5`: Five grades,
* When `type` is `colorGradation`, the color value of the color scale should be set; the default value is green-yellow-red scale` ["rgb(99, 190, 123)", "rgb(255, 235, 132)", "rgb(248, 105, 107)"]`
Recommended shortcut value:
```js
["rgb(99, 190, 123)", "rgb(255, 235, 132)", "rgb(248, 105, 107)"], //green-yellow-red level
["rgb(248, 105, 107)", "rgb(255, 235, 132)", "rgb(99, 190, 123)"], //red-yellow-green level
["rgb(99, 190, 123)", "rgb(252, 252, 255)", "rgb(248, 105, 107)"], //green-white-red level
["rgb(248, 105, 107)", "rgb(252, 252, 255)", "rgb(99, 190, 123)"], //red-white-green level
["rgb(90, 138, 198)", "rgb(252, 252, 255)", "rgb(248, 105, 107)"], //blue-white-red level
["rgb(248, 105, 107)", "rgb(252, 252, 255)", "rgb(90, 138, 198)"], //red-white-blue level
["rgb(252, 252, 255)", "rgb(248, 105, 107)"], //white-red level
["rgb(248, 105, 107)", "rgb(252, 252, 255)"], //red-white level
["rgb(99, 190, 123)", "rgb(252, 252, 255)"], //green-white level
["rgb(252, 252, 255)", "rgb(99, 190, 123)"], //white-green level
["rgb(99, 190, 123)", "rgb(255, 235, 132)"], //green-yellow level
["rgb(255, 235, 132)", "rgb(99, 190, 123)"] //Yellow-green level
```
+ {Array | Object | String} [cellrange]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, allows an array of multiple selections; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
For the worksheet of the specified subscript, the conditional format is turned on for the selected range, and the data after the conditional format is turned on is returned.
- **Usage**:
- Conditional formatting is enabled for the current selection area, showing gradient
`luckysheet.setRangeConditionalFormat("dataBar", { format: ["#63c384", "#ffffff"] })`
------------
### deleteRangeConditionalFormat(itemIndex [,setting])
[todo]
- **Parameter**:
- {Number} [itemIndex]: Conditional format rule index
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
For the worksheet of the specified subscript, delete the conditional format rule, and return the deleted conditional format rule.
- **Usage**:
- Delete the third conditional formatting rule
`luckysheet.deleteRangeConditionalFormat(2)`
------------
### clearRange([setting])
[todo]
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: The range of the selection to be cleared. The format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1] ,column:[0,1]}`, allows an array of multiple selections; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Clear the contents of the specified cell area of the specified worksheet, return the cleared data, which is different from the function of deleting the selection area, no need to set the cell movement
- **Usage**:
- Clear the content of the current selection
`luckysheet.clearRange()`
------------
### deleteRange(move [,setting])
[todo]
- **Parameter**:
- {String} [move]: After deleting, whether the cells on the right or below move
Possible values of `move` are:
+ `"left"`: Move the right cell to the left
+ `"up"`: Move the lower cell up
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: The range of the selection to be deleted, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1] ,column:[0,1]}`, allows an array composed of multiple selections; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Delete the specified cell range of the specified worksheet, return the deleted data, and at the same time, specify whether to move the right cell to the left or the bottom cell to move up
- **Usage**:
- Delete the current selection and after deleting, the right cell moves to the left
`luckysheet.deleteRange('left')`
------------
### insertRange(move [,setting])
[todo]
- **Parameter**:
- {String} [move]: Move the active cell right or down
Possible values of `move` are:
+ `"right"`: Move the active cell to the right
+ `"bottom"`: move the active cell down
- {PlainObject} [setting]: optional parameters
+ {Array} [data]: The data of a two-dimensional array of cells assigned to the range area, [Cell Object Format Reference](/zh/guide/cell.html); the default value is an empty array, that is, a blank area is inserted
+ {Array | Object | String} [range]: The position to be inserted, the range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0, 1],column:[0,1]}`, the default is the current selection
When data data is not set, an array composed of multiple selections is allowed, and the blank area inserted is the area of these selections.
When the data data is set, it can only be a single selection, and the data data will be inserted into the first cell position of the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
In the specified cell area of the specified worksheet, assign cell data, or create a new blank area, return data data, and at the same time, specify the active cell to move right or down
- **Usage**:
- Insert a blank cell at the current selection position, and move the current selection cell to the right after inserting
`luckysheet.insertRange('right')`
------------
### matrixOperation(type [,setting])
[todo]
- **Parameter**:
- {String} [type]: the type of matrix operation
Possible values of `type` are:
+ `"flipUpDown"`: flip up and down
+ `"flipLeftRight"`: flip left and right
+ `"flipClockwise"`: rotate clockwise
+ `"flipCounterClockwise"`: rotate counterclockwise
+ `"transpose"`: Transpose
+ `"deleteZeroByRow"`: delete 0 values at both ends by row
+ `"deleteZeroByColumn"`: delete zero values at both ends by column
+ `"removeDuplicateByRow"`: delete duplicate values by row
+ `"removeDuplicateByColumn"`: remove duplicate values by column
+ `"newMatrix"`: Produce a new matrix
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, can only be a single selection; the default is the current selection
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Specify the data in the specified cell area of the worksheet to perform matrix operations, and return the result data after the operation is successful
- **Usage**:
- Flip current selection upside down
`luckysheet.matrixOperation('flipUpDown')`
Copy the original selection as a two-dimensional array:
`[["value1","value3"],["value2","value4"]]`
After flipping up and down, the selection is copied as a two-dimensional array:
`[["value2","value4"],["value1","value3"]]`
------------
### matrixCalculation(type, number [,setting])
[todo]
- **Parameter**:
- {String} [type]: calculation method
Possible values of `type` are:
+ `"plus"`: add
+ `"minus"`: subtract
+ `"multiply"`: multiply
+ `"divided"`: Divide
+ `"power"`: power
+ `"root"`: power root
+ `"log"`: log
- {Number} [number]: Calculate the number, such as: 2
- {PlainObject} [setting]: optional parameters
+ {Array | Object | String} [range]: The range of the selection, the format of the supported selection is `"A1:B2"`, `"sheetName!A1:B2"` or `{row:[0,1],column: [0,1]}`, can only be a single selection; the default is the current selection
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Specify the data in the specified cell area of the worksheet for matrix calculation, and return the result data after the calculation is successful
- **Usage**:
- Add 2 to the value of all cells in the current selection
`luckysheet.matrixCalculation('plus', 2)`
Copy the original selection as a two-dimensional array:
`[[1,2],[3,4]]`
After adding 2, the selection is copied as a two-dimensional array:
`[[3,4],[5,6]]`
------------
## Worksheet operations
### getAllSheets()
- **Explanation**:
Return all worksheet configurations, the format is the same as the worksheet configuration, and the results obtained can be used as options.data when the form is initialized.
Therefore, this API is suitable for manually operating and configuring a table, and then taking out all the worksheet information to save it, and then use it for table creation in other places. If you want to get all the workbook data including the workbook configuration, it is recommended to use [toJson](#toJson()), and it can be directly used to initialize Luckysheet.
- **Usage**:
- Get all the basic information of the first worksheet
`luckysheet.getAllSheets()[0]`
------------
### getLuckysheetfile()
- **Explanation**:
Returns a one-dimensional array `luckysheetfile` of all table data structures. Unlike the `getAllSheets` method, the worksheet parameters obtained by this method will contain many internal variables. The most obvious difference is that the table data operation will maintain `luckysheetfile[i]. data`, and the initialization data uses `options.data[i].celldata`, so `luckysheetfile` can be used for debugging, but the initialization table is not applicable.
In addition, a `load = 1` will be added to the loaded worksheet parameters, this parameter needs to be set to 0 when initializing the data. Therefore, to initialize the workbook with the data obtained by `getLuckysheetfile()`, two tasks need to be done:
- Convert celldata to data, refer to: [transToData](/zh/guide/api.html#transtodata-celldata-setting)
- Load reset to 0 or delete this field
Now there is `getAllSheets` to complete this work, no need to manually convert the data.
- **Usage**:
- Get all the debugging information of the first worksheet
`luckysheet.getLuckysheetfile()[0]`
------------
### getSheet([setting])
[todo]
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Number} [index]: worksheet index; the default value is the current worksheet index
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Number} [name]: Worksheet name; the default value is the current worksheet name
- **Explanation**:
According to index/order/name, quickly return the configuration of the specified worksheet, same as `luckysheetfile[i]`. If multiple parameters are set, the priority is: index> order> name.
------------
### getSheetData([setting])
[todo]
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
- **Explanation**:
Quickly return the data of the specified worksheet, same as `luckysheetfile[i].data`
------------
### getConfig([setting])
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
- **Explanation**:
Quickly return to the config configuration of the specified worksheet, same as `luckysheetfile[i].config`
------------
### setConfig([setting])
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Quickly set the current worksheet config configuration
------------
### updataSheet([setting])
- **参数**:
- {PlainObject} [setting]: optional parameters
+ {Array} [data]: Worksheet Configuration
+ {Function} [success]: callback function for the end of the operation
- **说明**:
Update the corresponding sheet according to the set sheet configuration
------------
### setSheetAdd([setting])
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Object} [sheetObject]: The data of the newly added worksheet; the default value is an empty object.Worksheet data format reference [options.data](/guide/sheet.html#initial)
+ {Number} [order]: New worksheet subscript; the default value is the last subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Add a sheet and return the newly added worksheet object. The optional setting data in `setting` is `sheetObject`, and a blank worksheet will be added if `sheetObject` is not passed.
- **Usage**:
- Add a blank worksheet at the subscript position of the last worksheet
`luckysheet.setSheetAdd()`
------------
### setSheetDelete([setting])
[todo]
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Number} [order]: Worksheet subscript; the default value is the current worksheet subscript
+ {Function} [success]: callback function for the end of the operation
- **Explanation**:
Delete the worksheet of the specified subscript and return the deleted worksheet object
- **Usage**:
- Delete current worksheet
`luckysheet.setSheetDelete()`
------------
### setSheetCopy([setting])
[todo]
- **Parameter**:
- {PlainObject} [setting]: optional parameters
+ {Number} [targetOrder]: The target index position of the newly copied worksheet; the default value is the next index position of the current worksheet index (incremental)
+ {Number} [order]: The subscr
gitextract_wgvkz2_0/
├── .eslintignore
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── bug_report_zh.md
│ │ ├── feature_request.md
│ │ └── feature_request_zh.md
│ └── workflows/
│ ├── gitee-mirror.yml
│ ├── github-demo.yml
│ └── github-doc.yml
├── .gitignore
├── .prettierignore
├── .prettierrc.json
├── CHANGELOG.md
├── LICENSE
├── README-zh.md
├── README.md
├── commitlint.config.js
├── deploy.bat
├── docs/
│ ├── .vuepress/
│ │ └── config.js
│ ├── README.md
│ ├── about/
│ │ ├── README.md
│ │ ├── company.md
│ │ └── sponsor.md
│ ├── guide/
│ │ ├── FAQ.md
│ │ ├── README.md
│ │ ├── api.md
│ │ ├── cell.md
│ │ ├── config.md
│ │ ├── contribute.md
│ │ ├── data.md
│ │ ├── operate.md
│ │ ├── resource.md
│ │ └── sheet.md
│ └── zh/
│ ├── README.md
│ ├── about/
│ │ ├── README.md
│ │ ├── company.md
│ │ └── sponsor.md
│ └── guide/
│ ├── FAQ.md
│ ├── README.md
│ ├── api.md
│ ├── cell.md
│ ├── config.md
│ ├── contribute.md
│ ├── operate.md
│ ├── resource.md
│ └── sheet.md
├── gulpfile.js
├── package.json
└── src/
├── assets/
│ └── iconfont/
│ ├── demo.css
│ ├── demo_index.html
│ ├── iconfont.css
│ ├── iconfont.js
│ └── iconfont.json
├── config.js
├── controllers/
│ ├── alternateformat.js
│ ├── cellDatePickerCtrl.js
│ ├── cellFormat.js
│ ├── conditionformat.js
│ ├── constant.js
│ ├── controlHistory.js
│ ├── dataVerificationCtrl.js
│ ├── dropCell.js
│ ├── expendPlugins.js
│ ├── filter.js
│ ├── formulaBar.js
│ ├── freezen.js
│ ├── handler.js
│ ├── hyperlinkCtrl.js
│ ├── ifFormulaGenerator.js
│ ├── imageCtrl.js
│ ├── imageUpdateCtrl.js
│ ├── inlineString.js
│ ├── insertFormula.js
│ ├── keyboard.js
│ ├── listener.js
│ ├── locationCell.js
│ ├── luckysheetConfigsetting.js
│ ├── matrixOperation.js
│ ├── menuButton.js
│ ├── mobile.js
│ ├── moreFormat.js
│ ├── orderBy.js
│ ├── pivotTable.js
│ ├── postil.js
│ ├── protection.js
│ ├── resize.js
│ ├── rowColumnOperation.js
│ ├── searchReplace.js
│ ├── select.js
│ ├── selection.js
│ ├── server.js
│ ├── sheetBar.js
│ ├── sheetMove.js
│ ├── sheetSearch.js
│ ├── sheetmanage.js
│ ├── sparkline.js
│ ├── splitColumn.js
│ ├── toolbar.js
│ ├── updateCell.js
│ └── zoom.js
├── core.js
├── css/
│ ├── iconCustom.css
│ ├── luckysheet-cellFormat.css
│ ├── luckysheet-core.css
│ ├── luckysheet-protection.css
│ └── luckysheet-zoom.css
├── data/
│ └── chartJson.js
├── demoData/
│ ├── chat.js
│ ├── demoFeature.js
│ ├── getTargetData.js
│ ├── sheetCell.js
│ ├── sheetChart.js
│ ├── sheetComment.js
│ ├── sheetConditionFormat.js
│ ├── sheetDataVerification.js
│ ├── sheetFormula.js
│ ├── sheetPicture.js
│ ├── sheetPivotTable.js
│ ├── sheetPivotTableData.js
│ ├── sheetSparkline.js
│ └── sheetTable.js
├── expendPlugins/
│ ├── chart/
│ │ ├── chartmix.css
│ │ └── plugin.js
│ ├── exportXlsx/
│ │ └── plugin.js
│ └── print/
│ ├── plugin.js
│ └── print.css
├── fonts/
│ └── FontAwesome.otf
├── function/
│ ├── func.js
│ ├── functionImplementation.js
│ ├── functionListDescriptor.js
│ ├── functionlist.js
│ ├── getLocalizedFunctionList.js
│ ├── luckysheet_function.js
│ └── matrix_methods.js
├── global/
│ ├── analysis.js
│ ├── api.js
│ ├── array.js
│ ├── border.js
│ ├── browser.js
│ ├── cleargridelement.js
│ ├── count.js
│ ├── createdom.js
│ ├── createsheet.js
│ ├── cursorPos.js
│ ├── datecontroll.js
│ ├── draw.js
│ ├── dynamicArray.js
│ ├── editor.js
│ ├── extend.js
│ ├── format.js
│ ├── formula.js
│ ├── func_methods.js
│ ├── getRowlen.js
│ ├── getdata.js
│ ├── json.js
│ ├── loading.js
│ ├── location.js
│ ├── method.js
│ ├── refresh.js
│ ├── rhchInit.js
│ ├── scroll.js
│ ├── setdata.js
│ ├── sort.js
│ ├── tooltip.js
│ └── validate.js
├── index.html
├── index.js
├── locale/
│ ├── en.js
│ ├── es.js
│ ├── locale.js
│ ├── zh.js
│ └── zh_tw.js
├── methods/
│ ├── get.js
│ └── set.js
├── plugins/
│ └── jquery.sPage.css
├── store/
│ └── index.js
└── utils/
├── chartUtil.js
├── math.js
├── polyfill.js
└── util.js
SYMBOL INDEX (522 symbols across 72 files)
FILE: gulpfile.js
function clean (line 128) | function clean() {
function serve (line 140) | function serve(done) {
function watcher (line 151) | function watcher(done) {
function reloadBrowser (line 173) | function reloadBrowser(done) {
function core_rollup (line 180) | async function core_rollup() {
function core (line 218) | async function core() {
function pluginsCss (line 234) | function pluginsCss() {
function plugins (line 242) | function plugins() {
function css (line 249) | function css() {
function pluginsJs (line 256) | function pluginsJs() {
function copyStaticHtml (line 264) | function copyStaticHtml(){
function copyStaticFonts (line 268) | function copyStaticFonts(){
function copyStaticAssets (line 272) | function copyStaticAssets(){
function copyStaticImages (line 276) | function copyStaticImages(){
function copyStaticExpendPlugins (line 280) | function copyStaticExpendPlugins(){
function copyStaticDemoData (line 284) | function copyStaticDemoData(){
function copyStaticCssImages (line 292) | function copyStaticCssImages(){
FILE: src/assets/iconfont/iconfont.js
function e (line 1) | function e(){t||(t=!0,v())}
FILE: src/controllers/cellDatePickerCtrl.js
method onClose (line 86) | onClose() {
FILE: src/controllers/cellFormat.js
function initialCellFormatModelEvent (line 14) | function initialCellFormatModelEvent(){
function recycleSeletion (line 50) | function recycleSeletion(cycleFunction, dataIsNullFunction){
function initialCellFormatModel (line 106) | function initialCellFormatModel(){
function openCellFormatModel (line 146) | function openCellFormatModel(){
FILE: src/controllers/constant.js
function rightclickHTML (line 346) | function rightclickHTML() {
function sheetconfigHTML (line 928) | function sheetconfigHTML() {
function filtermenuHTML (line 1073) | function filtermenuHTML() {
function filtersubmenuHTML (line 1080) | function filtersubmenuHTML() {
function luckysheetAlternateformatHtml (line 1087) | function luckysheetAlternateformatHtml() {
function menuToolBar (line 1196) | function menuToolBar() {
function customLoadingConfig (line 1200) | function customLoadingConfig() {
function show (line 1286) | function show() {
function close (line 1292) | function close() {
function customCellRightClickConfig (line 1454) | function customCellRightClickConfig() {
function customSheetRightClickConfig (line 1491) | function customSheetRightClickConfig() {
FILE: src/controllers/controlHistory.js
function formulaHistoryHanddler (line 29) | function formulaHistoryHanddler(ctr, type="redo"){
FILE: src/controllers/dataVerificationCtrl.js
function validateIdCard (line 1676) | function validateIdCard(idCard) {
FILE: src/controllers/dropCell.js
function getAverage (line 2671) | function getAverage(arr){
FILE: src/controllers/expendPlugins.js
function initPlugins (line 22) | function initPlugins(plugins , options){
FILE: src/controllers/filter.js
function labelFilterOptionState (line 30) | function labelFilterOptionState($top, optionstate, rowhidden, caljs, not...
function orderbydatafiler (line 81) | function orderbydatafiler(str, stc, edr, edc, index, asc) {
function createFilter (line 140) | function createFilter() {
function createFilterOptions (line 220) | function createFilterOptions(luckysheet_filter_save, filterObj) {
function initialFilterHandler (line 296) | function initialFilterHandler(){
FILE: src/controllers/formulaBar.js
function formulaBarInitial (line 20) | function formulaBarInitial(){
FILE: src/controllers/handler.js
function luckysheetHandler (line 75) | function luckysheetHandler() {
function hideUsername (line 6417) | function hideUsername() {
FILE: src/controllers/imageCtrl.js
method getImgItemParam (line 582) | getImgItemParam(imgItem){
FILE: src/controllers/imageUpdateCtrl.js
function customImageUpdate (line 2) | function customImageUpdate(method, url, obj) {
FILE: src/controllers/inlineString.js
function isInlineStringCell (line 9) | function isInlineStringCell(cell){
function isInlineStringCT (line 14) | function isInlineStringCT(ct){
function updateInlineStringFormat (line 19) | function updateInlineStringFormat(cell, attr, value, $input){
function enterKeyControll (line 234) | function enterKeyControll(cell){
function updateInlineStringFormatOutside (line 339) | function updateInlineStringFormatOutside(cell, key, value){
function convertSpanToShareString (line 353) | function convertSpanToShareString($dom){
function convertCssToStyleList (line 378) | function convertCssToStyleList(cssText){
function getClassWithcss (line 468) | function getClassWithcss(cssText, ukey){
function upsetClassWithCss (line 488) | function upsetClassWithCss(cssText, ukey, uvalue){
function removeClassWidthCss (line 516) | function removeClassWidthCss(cssText, ukey){
function getCssText (line 547) | function getCssText(cssText, attr, value){
function extendCssText (line 575) | function extendCssText(origin, cover, isLimit=true){
FILE: src/controllers/keyboard.js
function formulaMoveEvent (line 37) | function formulaMoveEvent(dir, ctrlKey, shiftKey, event){
function keyboardInitial (line 266) | function keyboardInitial(){
FILE: src/controllers/listener.js
function undoAccessible (line 11) | function undoAccessible(len) {
function redoAccessible (line 17) | function redoAccessible(len) {
FILE: src/controllers/locationCell.js
method getRangeArr (line 402) | getRangeArr(minR, maxR, minC, maxC, cellSave, rangeArr){
method deleteCellInSave (line 486) | deleteCellInSave(cellSave, range){
FILE: src/controllers/matrixOperation.js
function initialMatrixOperation (line 15) | function initialMatrixOperation(){
FILE: src/controllers/mobile.js
function mobileinit (line 8) | function mobileinit(){
FILE: src/controllers/orderBy.js
function orderByInitial (line 25) | function orderByInitial(){
FILE: src/controllers/protection.js
function addRangeItem (line 35) | function addRangeItem(item){
function initialEvent (line 67) | function initialEvent(file){
function initialProtectionRangeModal (line 465) | function initialProtectionRangeModal(file){
function initialProtectionRIghtBar (line 524) | function initialProtectionRIghtBar(file){
function restoreProtectionConfig (line 629) | function restoreProtectionConfig(aut){
function openProtectionModal (line 686) | function openProtectionModal(file){
function clearProtectionModalEditContent (line 734) | function clearProtectionModalEditContent() {
function closeProtectionModal (line 739) | function closeProtectionModal(){
function checkProtectionLockedSqref (line 748) | function checkProtectionLockedSqref(r, c, aut, local_protection, isOpenA...
function openRangePasswordModal (line 805) | function openRangePasswordModal(rangeAut) {
function checkProtectionNotEnable (line 885) | function checkProtectionNotEnable(sheetIndex){
function checkProtectionLocked (line 917) | function checkProtectionLocked(r, c, sheetIndex, isOpenAlert=true, isLoc...
function checkProtectionCellHidden (line 945) | function checkProtectionCellHidden(r, c, sheetIndex){
function checkProtectionLockedRangeList (line 969) | function checkProtectionLockedRangeList(rangeList, sheetIndex){
function checkProtectionSelectLockedOrUnLockedCells (line 1013) | function checkProtectionSelectLockedOrUnLockedCells(r, c, sheetIndex){
function checkProtectionAllSelected (line 1065) | function checkProtectionAllSelected(sheetIndex){
function checkProtectionFormatCells (line 1101) | function checkProtectionFormatCells(sheetIndex){
function checkProtectionAuthorityNormal (line 1150) | function checkProtectionAuthorityNormal(sheetIndex, type="formatColumns"...
FILE: src/controllers/resize.js
function luckysheetsizeauto (line 14) | function luckysheetsizeauto(isRefreshCanvas=true) {
function changeSheetContainerSize (line 269) | function changeSheetContainerSize(gridW, gridH){
function menuToolBarWidth (line 329) | function menuToolBarWidth() {
function customSheetbarConfig (line 478) | function customSheetbarConfig() {
function customStatisticBarConfig (line 549) | function customStatisticBarConfig() {
FILE: src/controllers/rowColumnOperation.js
function rowColumnOperationInitial (line 31) | function rowColumnOperationInitial() {
function luckysheetcolsdbclick (line 2450) | function luckysheetcolsdbclick() {
function deleteRows (line 2609) | function deleteRows(type, st_index, ed_index) {
function deleteColumns (line 2614) | function deleteColumns() {}
FILE: src/controllers/select.js
function seletedHighlistByindex (line 14) | function seletedHighlistByindex(id, r1, r2, c1, c2) {
function selectHightlightShow (line 29) | function selectHightlightShow(isRestore = false) {
function selectTitlesShow (line 201) | function selectTitlesShow(rangeArr, isRestore = false) {
function selectTitlesMap (line 247) | function selectTitlesMap(rangeMap, range1, range2) {
function selectTitlesRange (line 260) | function selectTitlesRange(map) {
function selectIsOverlap (line 314) | function selectIsOverlap(range) {
function collaborativeEditBox (line 345) | function collaborativeEditBox() {
function selectionCopyShow (line 456) | function selectionCopyShow(range) {
function luckysheet_count_show (line 487) | function luckysheet_count_show(left, top, width, height, rowseleted, col...
function selectHelpboxFill (line 541) | function selectHelpboxFill() {
FILE: src/controllers/sheetBar.js
function showsheetconfigmenu (line 26) | function showsheetconfigmenu() {
function refreshProtectionContent (line 178) | function refreshProtectionContent() {
function initialSheetBar (line 190) | function initialSheetBar(){
FILE: src/controllers/sheetMove.js
function luckysheetMoveEndCell (line 11) | function luckysheetMoveEndCell(postion, type, isScroll, terminal, onlyva...
function luckysheetMoveHighlightCell (line 337) | function luckysheetMoveHighlightCell(postion, index, type, isScroll) {
function luckysheetMoveHighlightCell2 (line 635) | function luckysheetMoveHighlightCell2(postion, type, isScroll) {
function luckysheetMoveHighlightRange (line 869) | function luckysheetMoveHighlightRange(postion, index, type, isScroll) {
function luckysheetMoveHighlightRange2 (line 1287) | function luckysheetMoveHighlightRange2(postion, type, isScroll) {
function rowHasMerge (line 1619) | function rowHasMerge(r, c1, c2){
function colHasMerge (line 1633) | function colHasMerge(c, r1, r2){
function getRowMerge (line 1647) | function getRowMerge(rIndex, c1, c2){
function getColMerge (line 1706) | function getColMerge(cIndex, r1, r2){
function getNextIndex (line 1765) | function getNextIndex(direction, focusIndex, strIndex, endIndex) {
FILE: src/controllers/sheetSearch.js
function luckysheetbinary_search (line 1) | function luckysheetbinary_search(arr, key) {
function luckysheetorder_search (line 22) | function luckysheetorder_search(arr, y) {
function luckysheet_searcharray (line 65) | function luckysheet_searcharray(arr, y) {
FILE: src/controllers/sheetmanage.js
method getCustomSheet (line 203) | getCustomSheet() {
method setCustomSheet (line 208) | setCustomSheet(luckysheet_custom_sheet) {
method sheetArrowShowAndHide (line 1710) | sheetArrowShowAndHide() {
method sheetBarShowAndHide (line 1727) | sheetBarShowAndHide(index) {
FILE: src/controllers/toolbar.js
function createToolbarHtml (line 106) | function createToolbarHtml() {
FILE: src/controllers/updateCell.js
function luckysheetupdateCell (line 21) | function luckysheetupdateCell(row_index1, col_index1, d, cover, isnotfoc...
function setCenterInputPosition (line 264) | function setCenterInputPosition(row_index, col_index, d){
function getColumnAndRowSize (line 310) | function getColumnAndRowSize(row_index, col_index, d){
FILE: src/controllers/zoom.js
function zoomChange (line 15) | function zoomChange(ratio){
function zoomRefreshView (line 65) | function zoomRefreshView(){
function zoomInitial (line 81) | function zoomInitial(){
function positionToRatio (line 255) | function positionToRatio(pos){
function zoomSlierDomBind (line 267) | function zoomSlierDomBind(ratio){
function zoomNumberDomBind (line 278) | function zoomNumberDomBind(ratio){
FILE: src/core.js
function initialWorkBook (line 188) | function initialWorkBook() {
FILE: src/demoData/chat.js
function initChat (line 1) | function initChat() {
function isNeedChat (line 343) | function isNeedChat() {
function setFormuala (line 353) | function setFormuala(sentence = '') {
function setASK_AI (line 365) | function setASK_AI(sentence = '') {
function setGET_AIRTABLE (line 380) | function setGET_AIRTABLE(link) {
function getLink (line 391) | function getLink(sentence = '') {
function getRange (line 403) | function getRange(text) {
FILE: src/demoData/demoFeature.js
function language (line 7) | function language(params) {
function supportButton (line 16) | function supportButton() {
function getRequest (line 28) | function getRequest() {
FILE: src/demoData/getTargetData.js
function excelToLuckyArray (line 5169) | function excelToLuckyArray(excelData) {
function excelToArray (line 5176) | function excelToArray(excelData) {
function pivotTable (line 5184) | function pivotTable(data, config) {
function sortTable (line 5250) | function sortTable(data) {
function addSalesTargetToTable (line 5270) | function addSalesTargetToTable(table, salesTargetData) {
function summary (line 5296) | function summary(data) {
function summaryAll (line 5316) | function summaryAll(data) {
function summaryArea (line 5336) | function summaryArea(data) {
function targetRate (line 5369) | function targetRate(data, title = '达成率(销售额/销售目标)') {
function askAIData (line 5383) | function askAIData(data, salesTargetData) {
function getAjax (line 5430) | function getAjax(url, data = {}, success, error) {
function getAirTable (line 5447) | function getAirTable(url, columnId = 0, sort = 1, success,fail) {
FILE: src/expendPlugins/chart/plugin.js
function chart (line 40) | function chart(options, config, isDemo) {
function renderCharts (line 107) | function renderCharts(chartLists, isDemo) {
function jfrefreshchartall (line 294) | function jfrefreshchartall(flowdata1, r_st, r_ed, c_st, c_ed) {
function chart_selection (line 346) | function chart_selection() {
function createLuckyChart (line 1028) | function createLuckyChart(width, height, left, top) {
function setChartMoveableEffect (line 1302) | function setChartMoveableEffect($container) {
function delChart (line 1322) | function delChart(chart_id) {
function showNeedRangeShow (line 1338) | function showNeedRangeShow(chart_id) {
function hideAllNeedRangeShow (line 1357) | function hideAllNeedRangeShow() {
function selectRangeBorderShow (line 1371) | function selectRangeBorderShow(chart_id) {
function selectRangeBorderHide (line 1408) | function selectRangeBorderHide(settingShow) {
function showChartSettingComponent (line 1426) | function showChartSettingComponent(refresh, chart_id) {
function hideChartSettingComponent (line 1442) | function hideChartSettingComponent(refresh) {
function renderChartShow (line 1465) | function renderChartShow(index) {
FILE: src/expendPlugins/exportXlsx/plugin.js
function exportXlsx (line 10) | function exportXlsx(options, config, isDemo) {
function downloadXlsx (line 14) | function downloadXlsx(data, filename) {
function fetchAndDownloadXlsx (line 30) | function fetchAndDownloadXlsx({url,order}, success, fail) {
function createExportDialog (line 65) | function createExportDialog(url) {
FILE: src/expendPlugins/print/plugin.js
function print (line 17) | function print(options, config, isDemo) {
FILE: src/function/func.js
function luckysheet_compareWith (line 14) | function luckysheet_compareWith() {
function luckysheet_getarraydata (line 1551) | function luckysheet_getarraydata() {
function luckysheet_calcADPMM (line 1572) | function luckysheet_calcADPMM(fp, sp, tp){
function luckysheet_getcelldata (line 1592) | function luckysheet_getcelldata(txt) {
function luckysheet_parseData (line 1748) | function luckysheet_parseData(value) {
function luckysheet_getValue (line 1782) | function luckysheet_getValue() {
function luckysheet_indirect_check (line 1824) | function luckysheet_indirect_check() {
function luckysheet_indirect_check_return (line 1832) | function luckysheet_indirect_check_return(txt) {
function luckysheet_offset_check (line 1836) | function luckysheet_offset_check() {
function luckysheet_getSpecialReference (line 1923) | function luckysheet_getSpecialReference(isCellFirst, param1, param2) {
FILE: src/function/functionImplementation.js
function compute (line 3108) | function compute(function_num){
function getCriteriaResult (line 3295) | function getCriteriaResult(range, criter){
function pdf (line 5174) | function pdf(x, n, M, N) {
function cdf (line 5182) | function cdf(x, n, M, N) {
function rest (line 7570) | function rest(array, idx) {
function initial (line 7578) | function initial(array, idx) {
function sortNum (line 11390) | function sortNum(a,b){ //用于排序
function convert (line 20695) | function convert(num) {
function leastSquare (line 22721) | function leastSquare(arr_x, arr_y){
function leastSquare (line 23084) | function leastSquare(arr_x, arr_y){
function Ma (line 23240) | function Ma(a, n){
FILE: src/function/matrix_methods.js
function inverse (line 337) | function inverse(els){
FILE: src/global/api.js
function getCellValue (line 56) | function getCellValue(row, column, options = {}) {
function setCellValue (line 115) | function setCellValue(row, column, value, options = {}) {
function clearCell (line 270) | function clearCell(row, column, options = {}) {
function deleteCell (line 324) | function deleteCell(move, row, column, options = {}) {
function setCellFormat (line 366) | function setCellFormat(row, column, attr, value, options = {}) {
function find (line 450) | function find(content, options = {}) {
function replace (line 529) | function replace(content, replaceContent, options = {}) {
function exitEditMode (line 570) | function exitEditMode(options = {}){
function enterEditMode (line 608) | function enterEditMode(options = {}){
function frozenFirstRow (line 632) | function frozenFirstRow(order) {
function frozenFirstColumn (line 685) | function frozenFirstColumn(order) {
function frozenRowRange (line 739) | function frozenRowRange(range, order) {
function frozenColumnRange (line 801) | function frozenColumnRange(range, order) {
function cancelFrozen (line 862) | function cancelFrozen(order) {
function setHorizontalFrozen (line 886) | function setHorizontalFrozen(isRange, options = {}) {
function setVerticalFrozen (line 916) | function setVerticalFrozen(isRange, options = {}) {
function setBothFrozen (line 946) | function setBothFrozen(isRange, options = {}) {
function insertRowOrColumn (line 1091) | function insertRowOrColumn(type, index = 0, options = {}) {
function insertRowBottomOrColumnRight (line 1147) | function insertRowBottomOrColumnRight(type, index = 0, options = {}) {
function insertRow (line 1202) | function insertRow(row = 0, options = {}) {
function insertRowBottom (line 1213) | function insertRowBottom(row = 0, options = {}) {
function insertColumn (line 1224) | function insertColumn(column = 0, options = {}) {
function insertColumnRight (line 1235) | function insertColumnRight(column = 0, options = {}) {
function deleteRowOrColumn (line 1247) | function deleteRowOrColumn(type, startIndex, endIndex, options = {}) {
function deleteRow (line 1280) | function deleteRow(rowStart, rowEnd, options = {}) {
function deleteColumn (line 1292) | function deleteColumn(columnStart, columnEnd, options = {}) {
function hideRowOrColumn (line 1305) | function hideRowOrColumn(type, startIndex, endIndex, options = {}) {
function showRowOrColumn (line 1367) | function showRowOrColumn(type, startIndex, endIndex, options = {}) {
function hideRow (line 1428) | function hideRow(startIndex, endIndex, options = {}) {
function showRow (line 1440) | function showRow(startIndex, endIndex, options = {}) {
function hideColumn (line 1452) | function hideColumn(startIndex, endIndex, options = {}) {
function showColumn (line 1464) | function showColumn(startIndex, endIndex, options = {}) {
function setRowHeight (line 1476) | function setRowHeight(rowInfo, options = {}) {
function setColumnWidth (line 1533) | function setColumnWidth(columnInfo, options = {}) {
function getRowHeight (line 1590) | function getRowHeight(rowInfo, options = {}) {
function getColumnWidth (line 1635) | function getColumnWidth(columnInfo, options = {}) {
function getDefaultRowHeight (line 1679) | function getDefaultRowHeight(options = {}) {
function getDefaultColWidth (line 1702) | function getDefaultColWidth(options = {}) {
function getRange (line 1724) | function getRange() {
function getRangeWithFlatten (line 1746) | function getRangeWithFlatten(range){
function getRangeValuesWithFlatte (line 1770) | function getRangeValuesWithFlatte(range){
function getRangeAxis (line 1788) | function getRangeAxis() {
function getRangeValue (line 1807) | function getRangeValue(options = {}) {
function getRangeHtml (line 1834) | function getRangeHtml(options = {}) {
function getRangeArray (line 2354) | function getRangeArray(dimensional, options = {}) {
function getRangeJson (line 2449) | function getRangeJson(isFirstRowTitle, options = {}) {
function getRangeDiagonal (line 2538) | function getRangeDiagonal(type, options = {}) {
function getRangeBoolean (line 2646) | function getRangeBoolean(options = {}) {
function setRangeShow (line 2732) | function setRangeShow(range, options = {}) {
function setRangeValue (line 2836) | function setRangeValue(data, options = {}) {
function setSingleRangeFormat (line 2908) | function setSingleRangeFormat(attr, value, options = {}) {
function setRangeFormat (line 2961) | function setRangeFormat(attr, value, options = {}) {
function setRangeFilter (line 3032) | function setRangeFilter(type, options = {}) {
function setRangeMerge (line 3104) | function setRangeMerge(type, options = {}) {
function cancelRangeMerge (line 3320) | function cancelRangeMerge(options = {}) {
function setRangeSort (line 3460) | function setRangeSort(type, options = {}) {
function setRangeSortMulti (line 3555) | function setRangeSortMulti(hasTitle, sort, options = {}) {
function setRangeConditionalFormatDefault (line 3662) | function setRangeConditionalFormatDefault(conditionName, conditionValue,...
function setRangeConditionalFormat (line 3955) | function setRangeConditionalFormat(type, options = {}) {
function deleteRangeConditionalFormat (line 4224) | function deleteRangeConditionalFormat(itemIndex, options = {}) {
function clearRange (line 4288) | function clearRange(options = {}) {
function deleteRange (line 4407) | function deleteRange(move, options = {}) {
function matrixOperation (line 4467) | function matrixOperation(type, options = {}) {
function matrixCalculation (line 4787) | function matrixCalculation(type, number, options = {}) {
function setSheetAdd (line 4892) | function setSheetAdd(options = {}) {
function setSheetDelete (line 5015) | function setSheetDelete(options = {}) {
function setSheetCopy (line 5050) | function setSheetCopy(options = {}) {
function setSheetHide (line 5143) | function setSheetHide(options = {}) {
function setSheetShow (line 5173) | function setSheetShow(options = {}) {
function setSheetActive (line 5203) | function setSheetActive(order, options = {}) {
function setSheetName (line 5236) | function setSheetName(name, options = {}) {
function setSheetColor (line 5284) | function setSheetColor(color, options = {}) {
function setSheetMove (line 5333) | function setSheetMove(type, options = {}) {
function setSheetOrder (line 5425) | function setSheetOrder(orderList, options = {}) {
function setSheetZoom (line 5484) | function setSheetZoom(zoom, options = {}) {
function showGridLines (line 5528) | function showGridLines(options = {}){
function hideGridLines (line 5566) | function hideGridLines(options = {}){
function refresh (line 5603) | function refresh(options = {}) {
function scroll (line 5626) | function scroll(options = {}){
function resize (line 5683) | function resize(options = {}){
function getScreenshot (line 5701) | function getScreenshot(options = {}) {
function setWorkbookName (line 5805) | function setWorkbookName(name, options = {}) {
function getWorkbookName (line 5827) | function getWorkbookName(options = {}) {
function undo (line 5860) | function undo(options = {}) {
function redo (line 5885) | function redo(options = {}) {
function getAllSheets (line 5908) | function getAllSheets() {
function getAllChartsBase64 (line 5923) | function getAllChartsBase64(cb) {
function getSheet (line 5971) | function getSheet(options = {}){
function getSheetData (line 5996) | function getSheetData(options = {}) {
function getConfig (line 6021) | function getConfig(options = {}) {
function setConfig (line 6043) | function setConfig(cfg, options = {}) {
function getLuckysheetfile (line 6081) | function getLuckysheetfile(){
function setDataVerification (line 6103) | function setDataVerification(optionItem, options = {}) {
function deleteDataVerification (line 6328) | function deleteDataVerification(options = {}) {
function insertImage (line 6393) | function insertImage(src, options = {}){
function deleteImage (line 6590) | function deleteImage(options = {}){
function getImageOption (line 6648) | function getImageOption(options = {}){
function transToCellData (line 6677) | function transToCellData(data, options = {}){
function transToData (line 6699) | function transToData(celldata, options = {}){
function toJson (line 6719) | function toJson(){
function changLang (line 6747) | function changLang(lang = 'zh'){
function closeWebsocket (line 6761) | function closeWebsocket(){
function getRangeByTxt (line 6773) | function getRangeByTxt(txt){
function getTxtByRange (line 6796) | function getTxtByRange(range=Store.luckysheet_select_save){
function pagerInit (line 6813) | function pagerInit (config) {
function refreshFormula (line 6839) | function refreshFormula (success) {
function updataSheet (line 6856) | function updataSheet (options = {}) {
function refreshMenuButtonFocus (line 6903) | function refreshMenuButtonFocus(data ,r,c , success){
function checkTheStatusOfTheSelectedCells (line 6927) | function checkTheStatusOfTheSelectedCells(type,status){
function openSearchDialog (line 6947) | function openSearchDialog(source = 1){
FILE: src/global/border.js
function getBorderInfoComputeRange (line 6) | function getBorderInfoComputeRange(dataset_row_st,dataset_row_ed,dataset...
function getBorderInfoCompute (line 1083) | function getBorderInfoCompute(sheetIndex) {
FILE: src/global/browser.js
method detectOS (line 129) | detectOS() {
FILE: src/global/cleargridelement.js
function cleargridelement (line 4) | function cleargridelement(event) {
FILE: src/global/count.js
function countfunc (line 8) | function countfunc() {
FILE: src/global/createdom.js
function luckysheetcreatedom (line 23) | function luckysheetcreatedom(colwidth, rowheight, data, menu, title) {
FILE: src/global/createsheet.js
function luckysheetcreatesheet (line 9) | function luckysheetcreatesheet(colwidth, rowheight, data, cfg, active) {
FILE: src/global/cursorPos.js
function luckysheetRangeLast (line 3) | function luckysheetRangeLast(obj) {
function getCursortPosition (line 34) | function getCursortPosition(textDom){
function hideMenuByCancel (line 50) | function hideMenuByCancel(event){
function selectTextDom (line 70) | function selectTextDom(ele){
function selectTextContent (line 86) | function selectTextContent(ele){
function selectTextContentCross (line 104) | function selectTextContentCross(sEle, eEle){
function selectTextContentCollapse (line 117) | function selectTextContentCollapse(sEle, index){
function isInPage (line 137) | function isInPage(node) {
FILE: src/global/datecontroll.js
function isdatetime (line 4) | function isdatetime(s) {
function diff (line 52) | function diff(now, then) {
function isdatatypemulti (line 56) | function isdatatypemulti(s) {
function isdatatype (line 70) | function isdatatype(s) {
FILE: src/global/draw.js
function luckysheetDrawgridRowTitle (line 23) | function luckysheetDrawgridRowTitle(scrollHeight, drawHeight, offsetTop) {
function luckysheetDrawgridColumnTitle (line 207) | function luckysheetDrawgridColumnTitle(scrollWidth, drawWidth, offsetLef...
function luckysheetDrawMain (line 384) | function luckysheetDrawMain(
function getCellOverflowMap (line 1956) | function getCellOverflowMap(canvas, col_st, col_ed, row_st, row_end) {
function cellOverflow_trace (line 2082) | function cellOverflow_trace(r, curC, traceC, traceDir, horizonAlign, tex...
function cellOverflow_colIn (line 2169) | function cellOverflow_colIn(map, r, c, col_st, col_ed) {
function cellTextRender (line 2214) | function cellTextRender(textInfo, ctx, option) {
FILE: src/global/dynamicArray.js
function dynamicArrayCompute (line 6) | function dynamicArrayCompute(dynamicArray) {
function dynamicArraySpillEditCompute (line 53) | function dynamicArraySpillEditCompute(computeObj, r, c) {
function dynamicArrayRangeIsAllNull (line 70) | function dynamicArrayRangeIsAllNull(range, data) {
function dynamicArrayHightShow (line 88) | function dynamicArrayHightShow(r, c) {
FILE: src/global/extend.js
function luckysheetextendtable (line 24) | function luckysheetextendtable(type, index, value, direction, sheetIndex) {
function luckysheetextendData (line 928) | function luckysheetextendData(rowlen, newData) {
function luckysheetdeletetable (line 967) | function luckysheetdeletetable(type, st, ed, sheetIndex) {
function luckysheetDeleteCell (line 1736) | function luckysheetDeleteCell(type, str, edr, stc, edc, sheetIndex) {
function getMoveRange (line 2263) | function getMoveRange(type, str, edr, stc, edc, r1, r2, c1, c2, rlen, cl...
FILE: src/global/format.js
function _strrev (line 10) | function _strrev(x) {
function fill (line 17) | function fill(c, l) {
function pad0 (line 23) | function pad0(v, d) {
function pad_ (line 28) | function pad_(v, d) {
function rpad_ (line 33) | function rpad_(v, d) {
function pad0r1 (line 38) | function pad0r1(v, d) {
function pad0r2 (line 43) | function pad0r2(v, d) {
function pad0r (line 49) | function pad0r(v, d) {
function isgeneral (line 55) | function isgeneral(s, i) {
function init_table (line 83) | function init_table(t) {
function frac (line 161) | function frac(x, D, mixed) {
function parse_date_code (line 196) | function parse_date_code(v, opts, b2) {
function datenum_local (line 256) | function datenum_local(v, date1904) {
function general_fmt_int (line 263) | function general_fmt_int(v) {
function strip_decimal (line 272) | function strip_decimal(o) {
function normalize_exp (line 279) | function normalize_exp(o) {
function small_exp (line 284) | function small_exp(v) {
function large_exp (line 293) | function large_exp(v) {
function general_fmt_num_base (line 298) | function general_fmt_num_base(v) {
function general_fmt (line 318) | function general_fmt(v, opts) {
function fix_hijri (line 336) | function fix_hijri(date, o) {
function write_date (line 345) | function write_date(type, fmt, val, ss0) {
function commaify (line 468) | function commaify(s) {
function write_num_pct (line 479) | function write_num_pct(type, fmt, val) {
function write_num_cm (line 485) | function write_num_cm(type, fmt, val) {
function write_num_exp (line 491) | function write_num_exp(fmt, val) {
function write_num_f1 (line 522) | function write_num_f1(r, aval, sign) {
function write_num_f2 (line 531) | function write_num_f2(r, aval, sign) {
function hashq (line 538) | function hashq(str) {
function rnd (line 556) | function rnd(val, d) {
function dec (line 561) | function dec(val, d) {
function carry (line 568) | function carry(val, d) {
function flr (line 575) | function flr(val) {
function write_num_flt (line 580) | function write_num_flt(type, fmt, val) {
function write_num_cm2 (line 680) | function write_num_cm2(type, fmt, val) {
function write_num_pct2 (line 686) | function write_num_pct2(type, fmt, val) {
function write_num_exp2 (line 692) | function write_num_exp2(fmt, val) {
function write_num_int (line 718) | function write_num_int(type, fmt, val) {
function split_fmt (line 817) | function split_fmt(fmt) {
function fmt_is_date (line 841) | function fmt_is_date(fmt) {
function eval_fmt (line 936) | function eval_fmt(fmt, v, opts, flen) {
function chkcond (line 1363) | function chkcond(v, rr) {
function choose_fmt (line 1389) | function choose_fmt(f, v) {
function format (line 1419) | function format(fmt, v, o) {
function load_entry (line 1571) | function load_entry(fmt, idx) {
function xlml_format (line 1639) | function xlml_format(format, value) {
function datenum (line 1649) | function datenum(v, date1904) {
function datenum_local (line 1655) | function datenum_local(v, date1904) {
function numdate (line 1664) | function numdate(v) {
function parse_isodur (line 1670) | function parse_isodur(s) {
function parseDate (line 1704) | function parseDate(str, fixdate) {
function fuzzynum (line 1725) | function fuzzynum(s) {
function fuzzydate (line 1745) | function fuzzydate(s) {
function genarate (line 1759) | function genarate(value) {//万 单位格式增加!!!
function update (line 1985) | function update(fmt, v) {
function is_date (line 1989) | function is_date(fmt, v) {
function valueShowEs (line 1993) | function valueShowEs(r, c, d) {
FILE: src/global/getRowlen.js
function rowlenByRange (line 19) | function rowlenByRange(d, r1, r2, cfg) {
function computeRowlenByContent (line 100) | function computeRowlenByContent(d, r) {
function computeCellWidth (line 149) | function computeCellWidth(cell, col_index) {
function computeColWidthByContent (line 158) | function computeColWidthByContent(d, c, rh) {
function computeRowlenArr (line 193) | function computeRowlenArr(rowHeight, cfg) {
function getCellTextSplitArr (line 220) | function getCellTextSplitArr(strValue, strArr, cellWidth, canvas){
function getMeasureText (line 244) | function getMeasureText(value, ctx, fontset){
function isSupportBoundingBox (line 340) | function isSupportBoundingBox(ctx){
function getCellTextInfo (line 352) | function getCellTextInfo(cell , ctx, option){
function drawLineInfo (line 1641) | function drawLineInfo(wordGroup, cancelLine,underLine,option){
FILE: src/global/getdata.js
function getdatabyselection (line 13) | function getdatabyselection(range, sheetIndex) {
function getdatabyselectionD (line 56) | function getdatabyselectionD(d, range) {
function getdatabyselectionNoCopy (line 98) | function getdatabyselectionNoCopy(range) {
function getcellvalue (line 129) | function getcellvalue(r, c, data, type) {
function datagridgrowth (line 183) | function datagridgrowth(data, addr, addc, iscallback) {
function getcellFormula (line 236) | function getcellFormula(r, c, i, data) {
function getOrigincell (line 254) | function getOrigincell(r, c, i) {
function getRealCellValue (line 276) | function getRealCellValue(r, c){
function getInlineStringNoStyle (line 291) | function getInlineStringNoStyle(r, c){
function getInlineStringStyle (line 307) | function getInlineStringStyle(r, c, data){
function getFontStyleByCell (line 328) | function getFontStyleByCell(cell,checksAF,checksCF, isCheck=true){
function checkstatusByCell (line 383) | function checkstatusByCell(cell, a){
function textTrim (line 562) | function textTrim(x) {
FILE: src/global/loading.js
function showloading (line 1) | function showloading(txt) {
function hideloading (line 5) | function hideloading() {
FILE: src/global/location.js
function rowLocationByIndex (line 4) | function rowLocationByIndex(row_index) {
function rowLocation (line 18) | function rowLocation(y) {
function colLocationByIndex (line 31) | function colLocationByIndex(col_index){
function colSpanLocationByIndex (line 45) | function colSpanLocationByIndex(col_index, span){
function colLocation (line 59) | function colLocation(x) {
function mouseposition (line 72) | function mouseposition(x, y) {
FILE: src/global/refresh.js
function runExecFunction (line 25) | function runExecFunction(range, index, data){
function jfrefreshgrid (line 39) | function jfrefreshgrid(data, range, allParam, isRunExecFunction = true, ...
function jfrefreshgridall (line 212) | function jfrefreshgridall(colwidth, rowheight, data, cfg, range, ctrlTyp...
function jfrefreshrange (line 355) | function jfrefreshrange(data, range, cdformat) {
function jfrefreshgrid_adRC (line 398) | function jfrefreshgrid_adRC(data, cfg, ctrlType, ctrlValue, calc, filter...
function jfrefreshgrid_deleteCell (line 627) | function jfrefreshgrid_deleteCell(data, cfg, ctrl, calc, filterObj, cf, ...
function jfrefreshgrid_pastcut (line 832) | function jfrefreshgrid_pastcut(source, target, RowlChange){
function jfrefreshgrid_rhcw (line 999) | function jfrefreshgrid_rhcw(rowheight, colwidth, isRefreshCanvas=true){
function luckysheetrefreshgrid (line 1161) | function luckysheetrefreshgrid(scrollWidth, scrollHeight) {
FILE: src/global/rhchInit.js
function rhchInit (line 5) | function rhchInit(rowheight, colwidth) {
function zoomSetting (line 98) | function zoomSetting(){
FILE: src/global/scroll.js
function execScroll (line 9) | function execScroll(){
function luckysheetscrollevent (line 17) | function luckysheetscrollevent(isadjust) {
FILE: src/global/setdata.js
function setcellvalue (line 9) | function setcellvalue(r, c, d, v) {
function setAccuracy (line 219) | function setAccuracy(autoFormatw, accuracy) {
FILE: src/global/sort.js
function orderbydata (line 14) | function orderbydata(data, index, isAsc) {
function orderbydata1D (line 99) | function orderbydata1D(data, isAsc) {
function sortSelection (line 185) | function sortSelection(isAsc) {
function sortColumnSeletion (line 295) | function sortColumnSeletion(colIndex, isAsc) {
FILE: src/global/validate.js
function isRealNull (line 16) | function isRealNull(val) {
function isRealNum (line 26) | function isRealNum(val) {
function valueIsError (line 44) | function valueIsError(value) {
function hasChinaword (line 58) | function hasChinaword(s) {
function isEditMode (line 70) | function isEditMode() {
function checkIsAllowEdit (line 84) | function checkIsAllowEdit(){
function hasPartMC (line 94) | function hasPartMC(cfg, r1, r2, c1, c2) {
function checkWordByteLength (line 206) | function checkWordByteLength(value) {
FILE: src/locale/locale.js
function locale (line 9) | function locale(){
FILE: src/methods/get.js
function getSheetIndex (line 4) | function getSheetIndex(index) {
function getRangetxt (line 14) | function getRangetxt(sheetIndex, range, currentIndex) {
function getluckysheet_select_save (line 54) | function getluckysheet_select_save() {
function getluckysheet_scroll_status (line 58) | function getluckysheet_scroll_status() {
function getluckysheetfile (line 62) | function getluckysheetfile(plugin) {
function getconfig (line 78) | function getconfig() {
function getvisibledatarow (line 82) | function getvisibledatarow() {
function getvisibledatacolumn (line 86) | function getvisibledatacolumn() {
function getConditionFormatCells (line 90) | function getConditionFormatCells() {
FILE: src/methods/set.js
function setluckysheet_select_save (line 4) | function setluckysheet_select_save(v) {
function setluckysheet_scroll_status (line 8) | function setluckysheet_scroll_status(v) {
function setluckysheetfile (line 12) | function setluckysheetfile(d) {
function setconfig (line 16) | function setconfig(v) {
function setvisibledatarow (line 24) | function setvisibledatarow(v) {
function setvisibledatacolumn (line 32) | function setvisibledatacolumn(v) {
FILE: src/utils/chartUtil.js
function generateRandomKey (line 4) | function generateRandomKey(prefix) {
function deepCopy (line 24) | function deepCopy(obj) {
function isObject (line 67) | function isObject(o) {
function isMap (line 79) | function isMap(obj) {
function replaceHtml (line 89) | function replaceHtml(temp, dataarry) {
function hasChinaword (line 93) | function hasChinaword(s) {
FILE: src/utils/math.js
function isInteger (line 6) | function isInteger(obj) {
function toInteger (line 16) | function toInteger(floatNum) {
function operation (line 46) | function operation(a, b, op) {
function fixed (line 98) | function fixed(num, precision) {
FILE: src/utils/polyfill.js
function __firefox (line 4) | function __firefox(){
function __element_style (line 10) | function __element_style(){
function __window_event (line 14) | function __window_event(){
function __event_srcElement (line 18) | function __event_srcElement(){
function __window_event_constructor (line 22) | function __window_event_constructor(){
FILE: src/utils/util.js
function isJsonString (line 18) | function isJsonString(str) {
function common_extend (line 32) | function common_extend(jsonbject1, jsonbject2) {
function replaceHtml (line 52) | function replaceHtml(temp, dataarry) {
function getObjType (line 64) | function getObjType(obj) {
function getNowDateTime (line 88) | function getNowDateTime(format) {
function hexToRgb (line 120) | function hexToRgb(hex) {
function rgbTohex (line 145) | function rgbTohex(color) {
function ABCatNum (line 170) | function ABCatNum(a) {
function chatatABC (line 215) | function chatatABC(n) {
function ceateABC (line 272) | function ceateABC(index) {
function createABCdim (line 297) | function createABCdim(x, count) {
function getByteLen (line 348) | function getByteLen(val, subLen) {
function ArrayUnique (line 376) | function ArrayUnique(dataArr) {
function luckysheetfontformat (line 392) | function luckysheetfontformat(format) {
function showrightclickmenu (line 461) | function showrightclickmenu($menu, x, y) {
function luckysheetactiveCell (line 485) | function luckysheetactiveCell() {
function luckysheetContainerFocus (line 498) | function luckysheetContainerFocus() {
function numFormat (line 511) | function numFormat(num, type) {
function numfloatlen (line 552) | function numfloatlen(n) {
function mouseclickposition (line 570) | function mouseclickposition($menu, x, y, p) {
function $$ (line 598) | function $$(selector, context) {
function seriesLoadScripts (line 614) | function seriesLoadScripts(scripts, options, callback) {
function parallelLoadScripts (line 663) | function parallelLoadScripts(scripts, options, callback) {
function loadLink (line 701) | function loadLink(url) {
function loadLinks (line 720) | function loadLinks(urls) {
function transformRangeToAbsolute (line 731) | function transformRangeToAbsolute(txt1) {
function openSelfModel (line 778) | function openSelfModel(id, isshowMask = true) {
function defineObjectReactive (line 832) | function defineObjectReactive(obj, key, value, callback) {
function defineBasicReactive (line 845) | function defineBasicReactive(obj, key, value, callback) {
function arrayRemoveItem (line 870) | function arrayRemoveItem(array, item) {
function camel2split (line 884) | function camel2split(camel) {
Condensed preview — 180 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (9,252K chars).
[
{
"path": ".eslintignore",
"chars": 5,
"preview": "src\r\n"
},
{
"path": ".github/FUNDING.yml",
"chars": 554,
"preview": "# These are supported funding model platforms\r\n\r\ngithub: # [mengshukeji]\r\npatreon: mengshukeji\r\nopen_collective: luckysh"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 1289,
"preview": "---\r\nname: Bug report\r\nabout: Create a report to help us improve\r\ntitle: \"[BUG]Find a bug\"\r\nlabels: ''\r\nassignees: ''\r\n\r"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report_zh.md",
"chars": 697,
"preview": "---\r\nname: '错误报告'\r\nabout: 创建报告帮助我们改进\r\ntitle: '[BUG]发现了个bug'\r\nlabels: ''\r\nassignees: ''\r\n\r\n---\r\n\r\n<!--- 感谢您的关注并发现问题,我们希望除"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 870,
"preview": "---\r\nname: Feature request\r\nabout: Suggest an idea for this project\r\ntitle: \"[Feature request]I have an idea\"\r\nlabels: '"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request_zh.md",
"chars": 404,
"preview": "---\r\nname: 功能要求\r\nabout: 为这个项目提出想法\r\ntitle: \"[Feature request]我有个点子\"\r\nlabels: ''\r\nassignees: ''\r\n\r\n---\r\n\r\n<!--- 感谢您的关注并发现问"
},
{
"path": ".github/workflows/gitee-mirror.yml",
"chars": 1540,
"preview": "# 使用 GitHub Action 来解决手动同步到 Gitee 的问题\r\n# 效果:github repo 代码更新之后,会自动同步至 gitee\r\n# 使用到的 GitHub Action:https://github.com/Yik"
},
{
"path": ".github/workflows/github-demo.yml",
"chars": 888,
"preview": "name: Luckysheet demo github pages deploy\r\n\r\non:\r\n push:\r\n tags:\r\n - 'v*'\r\n\r\njobs:\r\n publish:\r\n runs-on: ub"
},
{
"path": ".github/workflows/github-doc.yml",
"chars": 910,
"preview": "name: Luckysheet docs github pages deploy\r\n\r\non:\r\n push:\r\n tags:\r\n - 'doc*'\r\n\r\njobs:\r\n publish:\r\n runs-on: "
},
{
"path": ".gitignore",
"chars": 147,
"preview": ".DS_Store\r\nnode_modules\r\npackage-lock.json\r\nyarn.lock\r\ndist\r\ndocs/.vuepress/dist\r\nsrc/expendPlugins/print/print.js\r\n\r\n.i"
},
{
"path": ".prettierignore",
"chars": 70,
"preview": "dist\n\n*.css\n*.html\n*.md\n*.yml\n*.min.js\npackage.json\npackage-lock.json\n"
},
{
"path": ".prettierrc.json",
"chars": 132,
"preview": "{\n \"printWidth\": 80,\n \"trailingComma\": \"es5\",\n \"tabWidth\": 2,\n \"semi\": true,\n \"singleQuote\": false,\n \"arrowParens\""
},
{
"path": "CHANGELOG.md",
"chars": 52649,
"preview": "# Changelog\r\n\r\nAll notable changes to this project will be documented in this file. See [standard-version](https://githu"
},
{
"path": "LICENSE",
"chars": 1106,
"preview": "The MIT License (MIT)\r\n\r\nCopyright (c) 2020-present, Mengshukeji\r\n\r\nPermission is hereby granted, free of charge, to any"
},
{
"path": "README-zh.md",
"chars": 8266,
"preview": "<div align=\"center\">\r\n\r\n\r\n\r\n</div>\r\n\r\n简体中文 | [English](./README.md)\r\n\r\n"
},
{
"path": "README.md",
"chars": 10818,
"preview": "<div align=\"center\">\r\n\r\n\r\n\r\n[![Join the chat at https://gitter.im/mengs"
},
{
"path": "commitlint.config.js",
"chars": 73,
"preview": "module.exports = {\r\n extends: ['@commitlint/config-conventional']\r\n}\r\n"
},
{
"path": "deploy.bat",
"chars": 2203,
"preview": "# deploy Demo\r\nnpm run build\r\ncd dist\r\ngit init\r\ngit remote add origin https://github.com/mengshukeji/LuckysheetDemo.git"
},
{
"path": "docs/.vuepress/config.js",
"chars": 3712,
"preview": "module.exports = {\r\n\tbase: '/LuckysheetDocs/',\r\n\tlocales: {\r\n\t\t// 键名是该语言所属的子路径\r\n\t\t// 作为特例,默认语言可以使用 '/' 作为其路径。\r\n\t\t'/': {\r"
},
{
"path": "docs/README.md",
"chars": 507,
"preview": "---\r\nhome: true\r\nheroText: Luckysheet\r\ntagline: Configuration Document · API · Tutorial\r\nactionText: Get Started →\r\nacti"
},
{
"path": "docs/about/README.md",
"chars": 1163,
"preview": "# Meet the Team\r\n\r\nLuckysheet is a project led by an individual and jointly developed by several friends with the same i"
},
{
"path": "docs/about/company.md",
"chars": 1751,
"preview": "# Community case\r\n\r\nWe collected a lot of case feedback from the community, and also discovered Luckysheet usage scenari"
},
{
"path": "docs/about/sponsor.md",
"chars": 3366,
"preview": "# Sponsor\r\n\r\n## Why sponsor\r\n\r\nIf you run a business and is using Luckysheet in a revenue-generating product, it would m"
},
{
"path": "docs/guide/FAQ.md",
"chars": 18129,
"preview": "# FAQ\r\n\r\nThe content of this chapter collects the common problems that everyone has feedback. If the official documents "
},
{
"path": "docs/guide/README.md",
"chars": 12491,
"preview": "# Luckysheet is no longer maintained, please use [Univer](https://github.com/dream-num/univer) instead!\r\n\r\n# Get started"
},
{
"path": "docs/guide/api.md",
"chars": 95871,
"preview": "# API\r\n\r\nLuckysheet has opened up the main function API for common data operation requirements, and developers can do an"
},
{
"path": "docs/guide/cell.md",
"chars": 17131,
"preview": "# Format attributes\r\n\r\n## Cell attributes table\r\n\r\n<table>\r\n <tr>\r\n <td>Attribute value</td>\r\n <td>Full"
},
{
"path": "docs/guide/config.md",
"chars": 45462,
"preview": "# Overall configuration\r\n\r\n## Basic Structure\r\n\r\nWhen initializing the workbook, you can set an object configuration str"
},
{
"path": "docs/guide/contribute.md",
"chars": 8537,
"preview": "\r\n# Contribution guide \r\n\r\nwelcome! We are very happy that you are here and look forward to your interest in participat"
},
{
"path": "docs/guide/data.md",
"chars": 23500,
"preview": "# Table Data\r\n\r\n## Get table data\r\n\r\n- **Configuration**:\r\n\r\n Configure the address of `updateUrl`, Luckysheet will r"
},
{
"path": "docs/guide/operate.md",
"chars": 24857,
"preview": "# Table Operation\r\n`luckysheet` stores all operations in the history to `undo` and `redo`. If `allowupdate` is set to tr"
},
{
"path": "docs/guide/resource.md",
"chars": 2308,
"preview": "# Tutorials and resources\r\n\r\nOpen source software is inseparable from the contribution of the community. Here will be a "
},
{
"path": "docs/guide/sheet.md",
"chars": 52574,
"preview": "# Sheet Configuration\r\n\r\n## Initial\r\nif you want to initial the `options`, you need to arrange every sheet data to `opti"
},
{
"path": "docs/zh/README.md",
"chars": 317,
"preview": "---\r\nhome: true\r\nheroText: Luckysheet\r\ntagline: 配置文档 · API · 教程\r\nactionText: 快速上手 →\r\nactionLink: /zh/guide/\r\nfeatures:\r\n"
},
{
"path": "docs/zh/about/README.md",
"chars": 1047,
"preview": "# 认识团队\r\n\r\nLuckysheet是由个人主导、几个志同道合的小伙伴一同开发的项目。\r\n\r\n## 核心团队活跃成员\r\n- [@wbfsa](https://github.com/wbfsa)\r\n- [@eiji-th](https:/"
},
{
"path": "docs/zh/about/company.md",
"chars": 1537,
"preview": "# 社区案例\r\n\r\n我们搜集到了很多来自社区的案例反馈,还发现了以前我们没有预想到的Luckysheet使用场景。\r\n\r\n积极聆听社区的声音,在大家的支持和反馈中不断更新迭代,已是我们的责任。\r\n\r\n\r\n## 公司案例\r\n\r\n<table>"
},
{
"path": "docs/zh/about/sponsor.md",
"chars": 2557,
"preview": "# 赞助\r\n\r\n## 为什么赞助\r\n\r\n如果您经营一家企业并在盈利产品中使用Luckysheet,那么赞助Luckysheet开发将具有商业意义:它可确保您的产品所依赖的项目保持健康并得到积极维护。 它还可以帮助您在Luckysheet社区"
},
{
"path": "docs/zh/guide/FAQ.md",
"chars": 11268,
"preview": "# 常见问题\r\n\r\n本章内容搜集了大家反馈的常见问题,如果官方文档和此列表都不能解答您的疑问,推荐到[官方论坛](https://github.com/mengshukeji/Luckysheet/discussions)反馈\r\n\r\n## "
},
{
"path": "docs/zh/guide/README.md",
"chars": 8492,
"preview": "# Luckysheet 已不再维护,推荐使用 [Univer](https://github.com/dream-num/univer) 替代\r\n\r\n# 快速上手\r\n\r\n## 基本介绍\r\nLuckysheet ,一款纯前端类似excel的"
},
{
"path": "docs/zh/guide/api.md",
"chars": 59982,
"preview": "# API\r\n\r\nLuckysheet针对常用的数据操作需求,开放了主要功能的API,开发者可以根据需要进行任意对接开发。\r\n\r\n使用注意:\r\n1. script全局引入时,所有API均挂载到window.luckysheet对象下面,可以"
},
{
"path": "docs/zh/guide/cell.md",
"chars": 21990,
"preview": "# 单元格\r\n\r\n## 基本单元格\r\n\r\n单元格是Luckysheet中最基本的单位,每个单元格都会保存为一个对象,一个工作表的数据则会保存为一个由单元格对象组成的二维数组,并存入当前工作表的 `luckysheetfile[i].data"
},
{
"path": "docs/zh/guide/config.md",
"chars": 40542,
"preview": "# 整体配置\r\n\r\n## 基础结构\r\n\r\n初始化表格时,可以设置一个对象配置串`options`来自定义配置Luckysheet表格。\r\n\r\n如下是一个简洁的配置案例:\r\n\r\n```js\r\n// 配置项\r\nconst options = {"
},
{
"path": "docs/zh/guide/contribute.md",
"chars": 4574,
"preview": "\r\n# 贡献指南 \r\n\r\n 欢迎!我们很高兴您能来到这里,并非常期待您能有兴趣参与 Luckysheet 贡献。当然,在您参与 Luckysheet 贡献之前,请确保通读以下全文:\r\n\r\n## 我们的行为准则\r\n\r\n1. 我们保证尊重所"
},
{
"path": "docs/zh/guide/operate.md",
"chars": 30346,
"preview": "# 表格操作\r\n\r\n每一次操作都会保存历史记录,用于撤销和重做,如果在表格初始化的时候开启了[共享编辑](/zh/guide/config.html#updateurl)功能,则会通过websocket将操作实时更新到后台。\r\n\r\n> 源码"
},
{
"path": "docs/zh/guide/resource.md",
"chars": 1531,
"preview": "# 教程与资源\r\n\r\n开源软件离不开社区的贡献,这里将会列举出社区提供的教程、学习资料及配套解决方案。\r\n\r\n如果您写了或者发现了优秀的教程想要推荐给我们,请直接[编辑此页](https://github.com/mengshukeji/L"
},
{
"path": "docs/zh/guide/sheet.md",
"chars": 45987,
"preview": "# 工作表配置\r\n\r\n## 初始化配置\r\n表格初始化配置`options`时,需要配置一个由每个工作表参数组成的一维数组,赋给`options.data`。\r\n\r\n> 表格初始化完成之后,通过方法[`luckysheet.getAllShe"
},
{
"path": "gulpfile.js",
"chars": 9819,
"preview": "const gulp = require('gulp');\r\n// gulp core function\r\nconst { src, dest, series, parallel, watch } = require('gulp');\r\n/"
},
{
"path": "package.json",
"chars": 1968,
"preview": "{\r\n \"name\": \"luckysheet\",\r\n \"version\": \"2.1.13\",\r\n \"main\": \"dist/luckysheet.cjs.js\",\r\n \"module\": \"dist/luckysheet.es"
},
{
"path": "src/assets/iconfont/demo.css",
"chars": 8844,
"preview": "/* Logo 字体 */\r\n@font-face {\r\n font-family: \"iconfont logo\";\r\n src: url('https://at.alicdn.com/t/font_985780_km7mi63cih"
},
{
"path": "src/assets/iconfont/demo_index.html",
"chars": 99405,
"preview": "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n <meta charset=\"utf-8\"/>\r\n <title>IconFont Demo</title>\r\n <link rel=\"shortcut icon\" "
},
{
"path": "src/assets/iconfont/iconfont.css",
"chars": 19900,
"preview": "@font-face {font-family: \"iconfont-luckysheet\";\r\n src: url('iconfont.eot?t=1605236775724'); /* IE9 */\r\n src: url('icon"
},
{
"path": "src/assets/iconfont/iconfont.js",
"chars": 93280,
"preview": "!function(h){var l,a,v,i,t,z,o='<svg><symbol id=\"luckysheet-iconfont-lianjie\" viewBox=\"0 0 1024 1024\"><path d=\"M771.584 "
},
{
"path": "src/assets/iconfont/iconfont.json",
"chars": 17756,
"preview": "{\r\n \"id\": \"1990368\",\r\n \"name\": \"lucksheet\",\r\n \"font_family\": \"iconfont\",\r\n \"css_prefix_text\": \"luckysheet-iconfont-\""
},
{
"path": "src/config.js",
"chars": 3899,
"preview": "/**\r\n * The default luckysheet config object.\r\n */\r\nexport default {\r\n container: \"luckysheet\", //容器的ID\r\n loading:"
},
{
"path": "src/controllers/alternateformat.js",
"chars": 52162,
"preview": "\r\nimport { getSheetIndex, getRangetxt } from '../methods/get';\r\nimport { replaceHtml } from '../utils/util';\r\nimport for"
},
{
"path": "src/controllers/cellDatePickerCtrl.js",
"chars": 3843,
"preview": "import menuButton from './menuButton';\r\nimport formula from '../global/formula';\r\nimport Store from '../store';\r\nimport "
},
{
"path": "src/controllers/cellFormat.js",
"chars": 7289,
"preview": "import Store from '../store';\r\nimport { replaceHtml,transformRangeToAbsolute,openSelfModel } from '../utils/util';\r\nimpo"
},
{
"path": "src/controllers/conditionformat.js",
"chars": 210579,
"preview": "import { getSheetIndex, getRangetxt } from '../methods/get';\r\nimport { replaceHtml, getObjType, chatatABC } from '../uti"
},
{
"path": "src/controllers/constant.js",
"chars": 175208,
"preview": "import locale from \"../locale/locale\";\r\nimport Store from \"../store\";\r\nimport luckysheetConfigsetting from \"./luckysheet"
},
{
"path": "src/controllers/controlHistory.js",
"chars": 32139,
"preview": "import sheetmanage from './sheetmanage';\r\nimport server from './server';\r\nimport pivotTable from './pivotTable';\r\nimport"
},
{
"path": "src/controllers/dataVerificationCtrl.js",
"chars": 74569,
"preview": "import { replaceHtml } from '../utils/util';\r\nimport formula from '../global/formula';\r\nimport { isRealNum, isRealNull }"
},
{
"path": "src/controllers/dropCell.js",
"chars": 109644,
"preview": "import { rowLocationByIndex, colLocationByIndex } from '../global/location';\r\nimport { countfunc } from '../global/count"
},
{
"path": "src/controllers/expendPlugins.js",
"chars": 658,
"preview": "import { chart } from '../expendPlugins/chart/plugin'\r\nimport { print } from '../expendPlugins/print/plugin'\r\nimport { e"
},
{
"path": "src/controllers/filter.js",
"chars": 76585,
"preview": "import { getSheetIndex } from '../methods/get';\r\nimport editor from '../global/editor';\r\nimport { isRealNull, isEditMode"
},
{
"path": "src/controllers/formulaBar.js",
"chars": 11722,
"preview": "import menuButton from './menuButton';\r\nimport {luckysheetupdateCell} from './updateCell';\r\nimport { keycode } from './c"
},
{
"path": "src/controllers/freezen.js",
"chars": 88145,
"preview": "import { getSheetIndex } from '../methods/get';\r\nimport { luckysheet_searcharray } from './sheetSearch';\r\nimport { selec"
},
{
"path": "src/controllers/handler.js",
"chars": 276530,
"preview": "import mobileinit from \"./mobile\";\r\nimport luckysheetConfigsetting from \"./luckysheetConfigsetting\";\r\nimport luckysheetF"
},
{
"path": "src/controllers/hyperlinkCtrl.js",
"chars": 15229,
"preview": "import { replaceHtml } from '../utils/util';\r\nimport { getcellvalue } from '../global/getdata';\r\nimport { luckysheetrefr"
},
{
"path": "src/controllers/ifFormulaGenerator.js",
"chars": 27316,
"preview": "import formula from '../global/formula';\r\nimport editor from '../global/editor';\r\nimport {luckysheetupdateCell} from './"
},
{
"path": "src/controllers/imageCtrl.js",
"chars": 49737,
"preview": "import { mouseposition } from '../global/location';\r\nimport server from './server';\r\nimport luckysheetsizeauto from './r"
},
{
"path": "src/controllers/imageUpdateCtrl.js",
"chars": 702,
"preview": "// 自定义图片的更新方法例如: customImageUpdate(\"POST\", \"http://127.0.0.1:8000/luckysheetimageprocess/\", d)\r\nfunction customImageUpda"
},
{
"path": "src/controllers/inlineString.js",
"chars": 20915,
"preview": "import {getFontStyleByCell, textTrim} from \"../global/getdata\";\r\nimport {selectTextContent,selectTextContentCross,select"
},
{
"path": "src/controllers/insertFormula.js",
"chars": 25959,
"preview": "import { luckysheet_getcelldata } from '../function/func';\r\n// import functionlist from '../function/functionlist';\r\n// "
},
{
"path": "src/controllers/keyboard.js",
"chars": 46879,
"preview": "import luckysheetConfigsetting from './luckysheetConfigsetting';\r\nimport menuButton from './menuButton';\r\nimport conditi"
},
{
"path": "src/controllers/listener.js",
"chars": 1386,
"preview": "/**\r\n * Monitor special variables\r\n */\r\nimport {createProxy} from '../utils/util';\r\nimport Store from '../store/index';\r"
},
{
"path": "src/controllers/locationCell.js",
"chars": 23550,
"preview": "import { replaceHtml } from '../utils/util';\r\nimport { getSheetIndex } from '../methods/get';\r\nimport { isRealNull } fro"
},
{
"path": "src/controllers/luckysheetConfigsetting.js",
"chars": 960,
"preview": "const luckysheetConfigsetting = {\r\n autoFormatw: false,\r\n accuracy: undefined,\r\n total: 0,\r\n\r\n allowCopy: tr"
},
{
"path": "src/controllers/matrixOperation.js",
"chars": 38866,
"preview": "import selection from './selection';\r\nimport { \r\n getObjType,\r\n chatatABC,\r\n numFormat,\r\n luckysheetContaine"
},
{
"path": "src/controllers/menuButton.js",
"chars": 253696,
"preview": "import { selectionCopyShow, selectIsOverlap } from \"./select\";\r\nimport { luckyColor, iconfontObjects } from \"./constant\""
},
{
"path": "src/controllers/mobile.js",
"chars": 8295,
"preview": "import { rowLocation, colLocation, mouseposition } from '../global/location';\r\nimport { selectHightlightShow } from './s"
},
{
"path": "src/controllers/moreFormat.js",
"chars": 42315,
"preview": "import { replaceHtml } from '../utils/util';\r\nimport { modelHTML } from './constant';\r\nimport menuButton from './menuBut"
},
{
"path": "src/controllers/orderBy.js",
"chars": 12069,
"preview": "\r\nimport { modelHTML } from './constant';\r\n\r\nimport { selectHightlightShow } from './select';\r\nimport {checkProtectionAu"
},
{
"path": "src/controllers/pivotTable.js",
"chars": 161935,
"preview": "import { getSheetIndex, getRangetxt } from \"../methods/get\";\r\nimport {\r\n replaceHtml,\r\n getObjType,\r\n ABCatNum,"
},
{
"path": "src/controllers/postil.js",
"chars": 48498,
"preview": "import { rowLocation, colLocation, mouseposition } from '../global/location';\r\nimport editor from '../global/editor';\r\ni"
},
{
"path": "src/controllers/protection.js",
"chars": 45342,
"preview": "import Store from '../store';\r\nimport locale from '../locale/locale';\r\nimport { modelHTML } from './constant';\r\nimport {"
},
{
"path": "src/controllers/resize.js",
"chars": 24040,
"preview": "import luckysheetConfigsetting from './luckysheetConfigsetting';\r\nimport luckysheetFreezen from './freezen';\r\nimport { l"
},
{
"path": "src/controllers/rowColumnOperation.js",
"chars": 102538,
"preview": "import pivotTable from \"./pivotTable\";\r\nimport luckysheetPostil from \"./postil\";\r\nimport imageCtrl from \"./imageCtrl\";\r\n"
},
{
"path": "src/controllers/searchReplace.js",
"chars": 31435,
"preview": "import { replaceHtml, chatatABC } from \"../utils/util\";\r\nimport { getSheetIndex } from \"../methods/get\";\r\nimport { model"
},
{
"path": "src/controllers/select.js",
"chars": 24266,
"preview": "import menuButton from './menuButton';\r\nimport formula from '../global/formula';\r\nimport { dynamicArrayHightShow } from "
},
{
"path": "src/controllers/selection.js",
"chars": 86271,
"preview": "import { selectHightlightShow, selectionCopyShow } from \"./select\";\r\nimport menuButton from \"./menuButton\";\r\nimport cond"
},
{
"path": "src/controllers/server.js",
"chars": 49114,
"preview": "import pako from 'pako'\r\nimport { showloading, hideloading } from '../global/loading';\r\nimport { luckysheetrefreshgrid, "
},
{
"path": "src/controllers/sheetBar.js",
"chars": 24907,
"preview": "\r\nimport sheetmanage from './sheetmanage';\r\nimport server from './server';\r\nimport { sheetselectlistitemHTML, sheetselec"
},
{
"path": "src/controllers/sheetMove.js",
"chars": 61932,
"preview": "import { getObjType } from '../utils/util';\r\nimport formula from '../global/formula';\r\nimport { isRealNull } from '../gl"
},
{
"path": "src/controllers/sheetSearch.js",
"chars": 1633,
"preview": "function luckysheetbinary_search(arr, key) {\r\n let low = 0, high = arr.length - 1;\r\n \r\n while (low <= high) {\r\n"
},
{
"path": "src/controllers/sheetmanage.js",
"chars": 79634,
"preview": "import { isEditMode } from \"../global/validate\";\r\nimport cleargridelement from \"../global/cleargridelement\";\r\nimport { g"
},
{
"path": "src/controllers/sparkline.js",
"chars": 91064,
"preview": "import Store from \"../store\";\r\n\r\n//sparkline设置\r\nlet createClass = function (/* [baseclass, [mixin, ...]], definition */)"
},
{
"path": "src/controllers/splitColumn.js",
"chars": 11874,
"preview": "import { replaceHtml } from '../utils/util';\r\nimport { modelHTML } from './constant';\r\nimport { selectHightlightShow } f"
},
{
"path": "src/controllers/toolbar.js",
"chars": 57961,
"preview": "import locale from '../locale/locale';\r\nimport luckysheetConfigsetting from './luckysheetConfigsetting';\r\n\r\nimport { get"
},
{
"path": "src/controllers/updateCell.js",
"chars": 13259,
"preview": "import pivotTable from './pivotTable';\r\nimport luckysheetFreezen from './freezen';\r\nimport menuButton from './menuButton"
},
{
"path": "src/controllers/zoom.js",
"chars": 8813,
"preview": "import Store from '../store';\r\nimport locale from '../locale/locale';\r\nimport { replaceHtml } from '../utils/util';\r\nimp"
},
{
"path": "src/core.js",
"chars": 10697,
"preview": "import defaultSetting from \"./config.js\";\r\nimport { common_extend } from \"./utils/util\";\r\nimport Store from \"./store\";\r\n"
},
{
"path": "src/css/iconCustom.css",
"chars": 1969,
"preview": ".luckysheet-icon-img-container.iconfont-luckysheet,\r\n.luckysheet-submenu-arrow .iconfont-luckysheet\r\n{\r\n font-size: 2"
},
{
"path": "src/css/luckysheet-cellFormat.css",
"chars": 1286,
"preview": ".luckysheet-cellFormat-config{\r\n display: none;\r\n}\r\n\r\n.luckysheet-cellFormat-config .luckysheet-modal-dialog-content{"
},
{
"path": "src/css/luckysheet-core.css",
"chars": 169835,
"preview": "/* body {\r\n margin: 0px;\r\n height: 100%;\r\n overflow: hidden;\r\n}\r\n */\r\n\r\n::-webkit-scrollbar-track {\r\n backg"
},
{
"path": "src/css/luckysheet-protection.css",
"chars": 5456,
"preview": "\r\n#luckysheet-modal-dialog-slider-protection .luckysheet-modal-dialog-slider-content{\r\n background: #fff;\r\n}\r\n\r\n.luck"
},
{
"path": "src/css/luckysheet-zoom.css",
"chars": 5108,
"preview": ".luckysheet-zoom-content{\r\n position: relative;\r\n float: right;\r\n width:210px;\r\n /* right: 0px; */\r\n heig"
},
{
"path": "src/data/chartJson.js",
"chars": 18131,
"preview": "/**\r\n * 图表的样式结构: 为chartOptions.defaultOption下的所有属性,应该是所有图表类型的并集\r\n * DOM的结构与此对应: DOM操作后修改此处参数,直接存储后台, 渲染图表时候经过一层引擎转换才能使用各"
},
{
"path": "src/demoData/chat.js",
"chars": 9859,
"preview": "export function initChat() {\n if (!isNeedChat()) {\n return\n }\n\n // Your CSS as text\n let styles = `\nb"
},
{
"path": "src/demoData/demoFeature.js",
"chars": 1343,
"preview": "\r\n// Features specially written for demo\r\n\r\n(function () {\r\n\r\n // language\r\n function language(params) {\r\n\r\n "
},
{
"path": "src/demoData/getTargetData.js",
"chars": 276619,
"preview": "export const sourceData2 = `分公司\t中支名称\t业务员代码\t出生日期\t性别\t入司日期\t学历\t销售额\t客户数\r\n福建\t福建泉州\t187565152\t8/12/72\t男\t2007/12/5\t高中\t20163451.32"
},
{
"path": "src/demoData/sheetCell.js",
"chars": 83183,
"preview": "window.sheetCell = {\r\n \"name\": \"Cell\",\r\n \"config\": {\r\n \"merge\": {\r\n \"13_5\": {\r\n \""
},
{
"path": "src/demoData/sheetChart.js",
"chars": 86647,
"preview": "window.sheetChart = {\r\n\t\"name\": \"Chart\",\r\n\t\"color\": \"\",\r\n\t\"status\": 0,\r\n\t\"order\": 8,\r\n\t\"index\": \"Sheet_6az6nei65t1i_1596"
},
{
"path": "src/demoData/sheetComment.js",
"chars": 1044,
"preview": "window.sheetComment = {\r\n\t\"name\": \"Comment\",\r\n\t\"color\": \"\",\r\n\t\"config\": {\r\n\t\t\"columnlen\": {\r\n\t\t\t\"2\": 102\r\n\t\t}\r\n\t},\r\n\t\"in"
},
{
"path": "src/demoData/sheetConditionFormat.js",
"chars": 89150,
"preview": "window.sheetConditionFormat = {\r\n\t\"name\": \"Conditional Format\",\r\n\t\"color\": \"\",\r\n\t\"zoomRatio\":1,\r\n\t\"config\": {\r\n\t\t\"merge\""
},
{
"path": "src/demoData/sheetDataVerification.js",
"chars": 20890,
"preview": "window.sheetDataVerification = {\r\n \"name\": \"Data Verification\",\r\n \"index\": \"Sheet_pdolzzie5xwi_1600927444446\",\r\n "
},
{
"path": "src/demoData/sheetFormula.js",
"chars": 87144,
"preview": " window.sheetFormula = {\r\n\t\"name\": \"Formula\",\r\n\t\"color\": \"\",\r\n\t\"config\": {\r\n\t\t\"merge\": {\r\n\t\t\t\"12_2\": {\r\n\t\t\t\t\"rs\": 1,\r\n\t\t"
},
{
"path": "src/demoData/sheetPicture.js",
"chars": 45004,
"preview": "window.sheetPicture = {\r\n \"name\": \"Picture\",\r\n \"index\": \"Sheet_3e4oe25C757r_1600925108337\",\r\n \"celldata\": [],\r\n"
},
{
"path": "src/demoData/sheetPivotTable.js",
"chars": 2700,
"preview": "window.sheetPivotTable = {\r\n\t\"name\": \"PivotTable\",\r\n\t\"color\": \"\",\r\n\t\"config\": {},\r\n\t\"index\": \"7\",\r\n\t\"chart\": [],\r\n\t\"stat"
},
{
"path": "src/demoData/sheetPivotTableData.js",
"chars": 9445,
"preview": "window.sheetPivotTableData = {\r\n\t\"name\": \"PivotTableData\",\r\n\t\"color\": \"\",\r\n\t\"config\": {\r\n\t\t\"merge\": {}\r\n\t},\r\n\t\"index\": \""
},
{
"path": "src/demoData/sheetSparkline.js",
"chars": 104399,
"preview": "window.sheetSparkline = {\r\n\t\"name\": \"Sparkline\",\r\n\t\"color\": \"\",\r\n\t\"config\": {\r\n\t\t\"merge\": {\r\n\t\t\t\"1_2\": {\r\n\t\t\t\t\"r\": 1,\r\n\t"
},
{
"path": "src/demoData/sheetTable.js",
"chars": 13578,
"preview": "window.sheetTable = {\r\n\t\"name\": \"Table\",\r\n\t\"color\": \"\",\r\n\t\"config\": {\r\n\t\t\"merge\": {\r\n\t\t\t\"0_1\": {\r\n\t\t\t\t\"r\": 0,\r\n\t\t\t\t\"c\": "
},
{
"path": "src/expendPlugins/chart/chartmix.css",
"chars": 2750,
"preview": ".luckysheet-datavisual-quick-menu{width:120px;overflow:auto;margin-top:15px}.luckysheet-datavisual-quick-menu::-webkit-s"
},
{
"path": "src/expendPlugins/chart/plugin.js",
"chars": 66489,
"preview": "import { seriesLoadScripts, loadLinks, $$, arrayRemoveItem } from \"../../utils/util\";\r\nimport { generateRandomKey, repla"
},
{
"path": "src/expendPlugins/exportXlsx/plugin.js",
"chars": 4786,
"preview": "\r\nimport locale from '../../locale/locale';\r\nimport { modelHTML } from \"../../controllers/constant\";\r\nimport { arrayRemo"
},
{
"path": "src/expendPlugins/print/plugin.js",
"chars": 1125,
"preview": "import { seriesLoadScripts, loadLinks, $$, arrayRemoveItem } from \"../../utils/util\";\r\nimport { luckysheetPrint } from \""
},
{
"path": "src/expendPlugins/print/print.css",
"chars": 826,
"preview": ".luckysheet-print span[role=\"heading\"] {\r\n font-size: 30px;\r\n font-weight: bold;\r\n}\r\n\r\n.luckysheet-print-suggest {"
},
{
"path": "src/function/func.js",
"chars": 63431,
"preview": "import func_methods from '../global/func_methods';\r\nimport formula from '../global/formula';\r\nimport tooltip from '../gl"
},
{
"path": "src/function/functionImplementation.js",
"chars": 863366,
"preview": "import luckysheetConfigsetting from '../controllers/luckysheetConfigsetting';\r\nimport { luckysheet_getcelldata, luckyshe"
},
{
"path": "src/function/functionListDescriptor.js",
"chars": 206020,
"preview": "export default [\r\n {\r\n \"n\": \"SUMIF\",\r\n \"t\": 0,\r\n \"m\": [\r\n 2,\r\n 3\r\n "
},
{
"path": "src/function/functionlist.js",
"chars": 1341,
"preview": "import functionImplementation from './functionImplementation';\r\nimport Store from '../store/index'\r\nimport locale from '"
},
{
"path": "src/function/getLocalizedFunctionList.js",
"chars": 396,
"preview": "import functionlist from \"./functionListDescriptor\";\r\n\r\nexport default (localeFunctionList) => {\r\n functionlist.forEa"
},
{
"path": "src/function/luckysheet_function.js",
"chars": 323,
"preview": "import functionlist from './functionlist';\r\n\r\nconst luckysheet_function = {};\r\n\r\nfor (let i = 0; i < functionlist.length"
},
{
"path": "src/function/matrix_methods.js",
"chars": 14428,
"preview": "var matrix = ({});\r\n\r\nvar init = function init(matrix){\r\n var sylvester_matrix = function() {};\r\n\r\n sylvester_matr"
},
{
"path": "src/global/analysis.js",
"chars": 1172,
"preview": "import { numFormat } from '../utils/util';\r\n\r\nconst analysis = {\r\n \"STDEVP\": function (mean, array1d) {\r\n let "
},
{
"path": "src/global/api.js",
"chars": 215851,
"preview": "import Store from \"../store\";\r\nimport { replaceHtml, getObjType, chatatABC, luckysheetactiveCell } from \"../utils/util\";"
},
{
"path": "src/global/array.js",
"chars": 2188,
"preview": "import { getcellvalue } from './getdata';\r\n\r\nconst luckysheetArray = {\r\n transpose: function (getdata, useGetcellValu"
},
{
"path": "src/global/border.js",
"chars": 63459,
"preview": "import { getSheetIndex } from '../methods/get';\r\nimport { getObjType } from '../utils/util';\r\nimport Store from '../stor"
},
{
"path": "src/global/browser.js",
"chars": 8499,
"preview": "const browser = {\r\n mobilecheck: function() {\r\n var a = !1;\r\n return function(b) {\r\n ('onges"
},
{
"path": "src/global/cleargridelement.js",
"chars": 1155,
"preview": "import selection from '../controllers/selection';\r\nimport menuButton from '../controllers/menuButton';\r\n\r\nexport default"
},
{
"path": "src/global/count.js",
"chars": 2052,
"preview": "import Store from '../store';\r\nimport { getdatabyselectionNoCopy } from './getdata';\r\nimport { isRealNull, isRealNum } f"
},
{
"path": "src/global/createdom.js",
"chars": 5868,
"preview": "import { \r\n gridHTML, \r\n menuToolBar, \r\n flow, \r\n columnHeaderHTML,\r\n maskHTML,\r\n colsmenuHTML,\r\n r"
},
{
"path": "src/global/createsheet.js",
"chars": 1677,
"preview": "import { datagridgrowth } from './getdata';\r\nimport editor from './editor';\r\nimport rhchInit from './rhchInit';\r\nimport "
},
{
"path": "src/global/cursorPos.js",
"chars": 5306,
"preview": "import Store from '../store';\r\n\r\nfunction luckysheetRangeLast(obj) {\r\n let range;\r\n \r\n if(document.createRange)"
},
{
"path": "src/global/datecontroll.js",
"chars": 1797,
"preview": "import { hasChinaword } from './validate';\r\nimport dayjs from 'dayjs'\r\n\r\nfunction isdatetime(s) {\r\n if (s == null || "
},
{
"path": "src/global/draw.js",
"chars": 83352,
"preview": "import pivotTable from \"../controllers/pivotTable\";\r\nimport conditionformat from \"../controllers/conditionformat\";\r\nimpo"
},
{
"path": "src/global/dynamicArray.js",
"chars": 4987,
"preview": "import { getObjType } from '../utils/util';\r\nimport { getSheetIndex } from '../methods/get';\r\nimport Store from '../stor"
},
{
"path": "src/global/editor.js",
"chars": 5778,
"preview": "import browser from './browser';\r\nimport formula from './formula';\r\nimport { datagridgrowth } from './getdata';\r\nimport "
},
{
"path": "src/global/extend.js",
"chars": 93704,
"preview": "import editor from \"./editor\";\r\nimport formula from \"./formula\";\r\nimport { jfrefreshgrid_adRC, jfrefreshgrid_deleteCell,"
},
{
"path": "src/global/format.js",
"chars": 79754,
"preview": "import { isRealNum, valueIsError } from './validate';\r\nimport { isdatetime } from './datecontroll';\r\nimport { getcellval"
},
{
"path": "src/global/formula.js",
"chars": 233132,
"preview": "import { replaceHtml, getObjType, chatatABC, ABCatNum, luckysheetfontformat } from \"../utils/util\";\r\nimport { getSheetIn"
},
{
"path": "src/global/func_methods.js",
"chars": 20039,
"preview": "import { getObjType } from '../utils/util';\r\nimport { isRealNum, isRealNull, valueIsError } from './validate';\r\nimport {"
},
{
"path": "src/global/getRowlen.js",
"chars": 68264,
"preview": "import {luckysheetfontformat} from '../utils/util';\r\nimport menuButton from '../controllers/menuButton';\r\nimport {checks"
},
{
"path": "src/global/getdata.js",
"chars": 14490,
"preview": "import { getObjType,rgbTohex } from '../utils/util';\r\nimport { getSheetIndex } from '../methods/get';\r\nimport server fro"
},
{
"path": "src/global/json.js",
"chars": 707,
"preview": "import { getObjType } from '../utils/util';\r\n\r\nconst json = {\r\n parseJsonParm: function(obj){\r\n if(obj == null"
},
{
"path": "src/global/loading.js",
"chars": 192,
"preview": "export function showloading(txt) {\r\n $(\"#luckysheet-cell-loading\").find(\"span\").text(txt).end().show();\r\n};\r\n\r\nexport"
},
{
"path": "src/global/location.js",
"chars": 2154,
"preview": "import { luckysheet_searcharray } from '../controllers/sheetSearch';\r\nimport Store from '../store';\r\n\r\nfunction rowLocat"
},
{
"path": "src/global/method.js",
"chars": 17899,
"preview": "import server from '../controllers/server';\r\nimport { luckysheetlodingHTML, luckyColor } from '../controllers/constant';"
},
{
"path": "src/global/refresh.js",
"chars": 50979,
"preview": "import rhchInit from './rhchInit';\r\nimport formula from './formula';\r\nimport editor from './editor';\r\nimport { setcellva"
},
{
"path": "src/global/rhchInit.js",
"chars": 3810,
"preview": "import Store from '../store';\r\nimport { computeRowlenByContent,computeColWidthByContent } from './getRowlen';\r\nimport lu"
},
{
"path": "src/global/scroll.js",
"chars": 4177,
"preview": "import luckysheetFreezen from '../controllers/freezen';\r\nimport { luckysheet_searcharray } from '../controllers/sheetSea"
},
{
"path": "src/global/setdata.js",
"chars": 8265,
"preview": "import { getObjType } from \"../utils/util\";\r\nimport { isRealNull, isRealNum, valueIsError } from \"./validate\";\r\nimport {"
},
{
"path": "src/global/sort.js",
"chars": 9115,
"preview": "import { getObjType } from '../utils/util';\r\nimport { isRealNull, isRealNum, isEditMode } from './validate';\r\nimport { i"
},
{
"path": "src/global/tooltip.js",
"chars": 13270,
"preview": "import { modelHTML, luckysheetchartpointconfigHTML, luckysheetToolHTML } from '../controllers/constant';\r\nimport browser"
},
{
"path": "src/global/validate.js",
"chars": 5769,
"preview": "import luckysheetConfigsetting from '../controllers/luckysheetConfigsetting';\r\nimport Store from '../store';\r\n\r\nexport c"
},
{
"path": "src/index.html",
"chars": 404617,
"preview": "<!DOCTYPE html>\n<html>\n\n<head lang='zh'>\n\t<meta charset='utf-8'>\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" /"
},
{
"path": "src/index.js",
"chars": 491,
"preview": "import './utils/math'\r\nimport { luckysheet } from './core'\r\nimport __firefox from './utils/polyfill'\r\n// Prevent gulp wa"
},
{
"path": "src/locale/en.js",
"chars": 303016,
"preview": "export default {\r\n functionlist: {\r\n SUMIF: {\r\n d: \"Returns a conditional sum across a range.\",\r\n "
},
{
"path": "src/locale/es.js",
"chars": 301693,
"preview": "export default {\r\n functionlist: {\r\n \"SUMIF\": {\r\n \"d\": \"Returns a conditional sum across a range.\","
},
{
"path": "src/locale/locale.js",
"chars": 254,
"preview": "import en from './en'\r\nimport zh from './zh'\r\nimport es from './es'\r\nimport zh_tw from './zh_tw'\r\nimport Store from '../"
},
{
"path": "src/locale/zh.js",
"chars": 238896,
"preview": "export default {\r\n functionlist: {\r\n SUMIF: {\r\n d: \"对范围中符合指定条件的值求和。\",\r\n a: \"对范围中符合指定条件的值"
},
{
"path": "src/locale/zh_tw.js",
"chars": 246643,
"preview": "export default {\r\n functionlist: {\r\n \"SUMIF\": {\r\n \"d\": \"對範圍中符合指定條件的值求和。\",\r\n \"a\": \"對範圍中符合"
},
{
"path": "src/methods/get.js",
"chars": 2990,
"preview": "import { chatatABC } from '../utils/util';\r\nimport Store from '../store';\r\n\r\nfunction getSheetIndex(index) {\r\n for (l"
},
{
"path": "src/methods/set.js",
"chars": 1099,
"preview": "import { getSheetIndex } from '../methods/get';\r\nimport Store from '../store';\r\n\r\nfunction setluckysheet_select_save(v) "
},
{
"path": "src/plugins/jquery.sPage.css",
"chars": 2487,
"preview": ".spage-total {\r\n display: inline-block;\r\n margin-right: 10px;\r\n line-height: 29px;\r\n color: #666;\r\n font-"
},
{
"path": "src/store/index.js",
"chars": 4850,
"preview": "const Store = {\r\n container: null, \r\n loadingObj:{},\r\n luckysheetfile: null, \r\n defaultcolumnNum: 60, \r\n "
},
{
"path": "src/utils/chartUtil.js",
"chars": 2704,
"preview": "/**\r\n * 生成随机图表id\r\n */\r\nfunction generateRandomKey(prefix) {\r\n if (prefix == null) {\r\n prefix = 'chart'\r\n }\r"
},
{
"path": "src/utils/math.js",
"chars": 4251,
"preview": "import { isRealNum } from '../global/validate';\r\n\r\n/*\r\n * 判断obj是否为一个整数\r\n */\r\nfunction isInteger(obj) {\r\n return Math."
},
{
"path": "src/utils/polyfill.js",
"chars": 1175,
"preview": " /**\r\n * polyfill event in firefox\r\n */\r\n\tfunction __firefox(){\r\n HTMLElement.prototype.__defineGetter"
},
{
"path": "src/utils/util.js",
"chars": 24147,
"preview": "import { columeHeader_word, columeHeader_word_index, luckysheetdefaultFont } from \"../controllers/constant\";\r\nimport men"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the dream-num/Luckysheet GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 180 files (7.9 MB), approximately 2.1M tokens, and a symbol index with 522 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.