Luckysheet is an online spreadsheet like excel that is powerful, simple to configure, and completely open source.

Overview

English| 简体中文

Introduction

🚀 Luckysheet is an online spreadsheet like excel that is powerful, simple to configure, and completely open source.

Links

Source Code Documentation Demo Plugins Demo Forum
Github Online Documentation Online Demo / Cooperative editing demo Import Excel Demo Chinese Forum
Gitee Mirror Gitee Online Documentation Gitee Online Demo Gitee Import Excel Demo Google Group

Demo

Plugins

Ecosystem

Project Description
Luckysheet Vue Luckysheet and Luckyexcel in a vue cli3 project
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

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

📖 Resources

  • Priority reading for new users: User Guide
  • For the tutorials, learning materials and supporting solutions provided by the community, please refer to: Tutorials and Resources

📜 Changelog

Detailed changes for each release are documented in the CHANGELOG.md.

❗️ Issues

Please make sure to read the Issue Reporting Checklist before opening an issue. Issues not conforming to the guidelines may be closed immediately.

TODO

Managed with GitHub Projects

💪 Contribution

Please make sure to read the Contributing Guide 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 Version >= 6

Installation

npm install
npm install gulp -g

Development

npm run dev

Package

npm run build

Partner project

Communication

Chinese community

Sponsor

Luckysheet is an MIT-licensed open source project with its ongoing development made possible entirely by the support of these awesome backers. If you'd like to join them, please consider:

PayPal WeChat Alipay
Paypal Me

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)

  • *勇 ¥ 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

Authors and acknowledgment

Active Core Team Members

Community Partners

License

MIT

Copyright (c) 2020-present, mengshukeji

Comments
  • [BUG]Something is wrong with scaling

    [BUG]Something is wrong with scaling

    I use the snapshot sources. I followed "Get started". So I have put the widget into <div id="luckysheet" style="margin:0px;padding:0px;position:absolute;width:100%;height:100%;left: 0px;top: 0px;"></div>. However, it turned out that the div inside, of the class luckysheet, had dimensions of 100x100 pixels. I needed to resize the browser just to make the div scale. It scaled too large, though. I attach a screenshot with "double" scrollbars. I would expect the external scrollbars to not exist at all. Probably, the widget thinks that is is smaller, when in reality it is larger. One of the reasons might be local cache restored information, which goes beyond the right margin, and also the large branding at the top.

    • is there some resize api, to inform the widget that it should initially resize itself?
    • how to get rid of the info about cache which looks like debugging, and which may cause the scaling problems?
    • how to remove the branding, which may also cause the scaling problems? I would want a clean widget in a div.

    luckysheet

    opened by d01010101 15
  • [BUG]协同编辑时,删除一列后,刷新页面后报错。

    [BUG]协同编辑时,删除一列后,刷新页面后报错。

    [Cannot read properties of undefined (reading '0')](luckysheet.umd.js:9 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading '0'))

    opened by jgs555 9
  • [BUG]jQuery is not defined

    [BUG]jQuery is not defined

    Describe the bug Getting this error in console:

    Uncaught ReferenceError: jQuery is not defined
        at Object.eval (plugin.js?a083:1)
        at eval (plugin.js:12)
        at Object../node_modules/luckysheet/dist/plugins/js/plugin.js (chunk-vendors.js:3364)
        at __webpack_require__ (app.js:854)
        at fn (app.js:151)
        at eval (cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/ts-loader/index.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/Sheet.vue?vue&type=script&lang=ts&:8)
        at Module../node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/ts-loader/index.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/Sheet.vue?vue&type=script&lang=ts& (app.js:1019)
        at __webpack_require__ (app.js:854)
        at fn (app.js:151)
        at eval (Sheet.vue?24b5:1)
    

    To Reproduce

    1. Create a Vue project with vue cli;
    2. yarn add luckysheet;
    3. In an SFC add this code:
    <script lang="ts">
    import { Component, Vue } from 'vue-property-decorator'
    import 'luckysheet/dist/plugins/js/plugin'
    import luckysheet from 'luckysheet'
    
    @Component
    export default class Sheet extends Vue {
      mounted () {
        luckysheet.create({
          container: 'lucky-sheet',
          showinfobar: false,
        })
      }
    }
    </script>
    

    What is expected? An empty sheet. No errors in the console.

    Environment

    • OS: Linux
    • Browser: Chrome
    • Luckysheet Version: latest

    Additional context One must note that if <script src="https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/js/plugin.js"></script> is added to index.html than everything is fine, no errors.

    opened by yerzhant 6
  • [BUG]plugins插件加载不了

    [BUG]plugins插件加载不了

    描述错误 通过gulp编译出来的这几个插件在项目中都加载不了 image

    重现 重现错误的步骤: 1.第一步操作:引入luckysheet image

    2.最后报错:在项目中报错,导致在Excel中有小数类型的数字会加载不出来luckysheet image

    环境: -操作系统:[Windows,Mac,Linux] -浏览器 版本号:[Chrome 版本 84.0.4147.105(正式版本) (64 位),Safari,Firefox,Edge] -Luckysheet版本:[最新]

    opened by heyouquan 5
  • 工具栏中英文切换

    工具栏中英文切换

    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.

    opened by 2447382228 5
  • [BUG]Toolbar does not shorten properly if page width is too small

    [BUG]Toolbar does not shorten properly if page width is too small

    In the current snapshot, even if the label "More..." is properly placed at the right margin, the toolbar icons are still displayed below and to the right of the label: luckysheet

    This makes the whole component too wide. Possibly caused by the spreadsheet being displayed in a div which is smaller than the entire web page.

    opened by d01010101 5
  • [Feature request] Need for protected sheets / locked cells

    [Feature request] Need for protected sheets / locked cells

    PROTECT SHEETS AND CONTENT IN LOCKED CELLS

    Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. It is not possible to protect the spreadsheet and to lock cells so that users of a preconfigured spreadsheet cannot mess up the formulas.

    Describe the solution you'd like A clear and concise description of what you want to happen. to be able to protect sheets and the content of locked cells on these sheets (as in Excel)

    Additional context Add any other context or screenshots about the feature request here. excel equivalent... Screen Shot 2020-09-17 at 16 25 Screen Shot 2020-09-17 at 16 25 1

    opened by mnohn 5
  • 现在是任何PR都合并的么?

    现在是任何PR都合并的么?

    刚同步了官方仓库的主分支,发现一个很严重的错误。

    #977 这个PR,一次修改了22个文件,变动是 $("body") 变成了 $("body").first()

    如下图:

    image

    这个改动一言难尽,怎么会有多个 body 标签呢?一个开源库没必要给非正常的使用买单修改吧。

    opened by cdswyda 4
  • [BUG]CDN引入的时候一直报jQuery的问题

    [BUG]CDN引入的时候一直报jQuery的问题

    描述错误 在通过CDN引入到React项目中,一直报JQuery的错误 重现 重现错误的步骤: 1.第一步操作 在HTML文件中引入 image

    4.最后一直报这个错误 image

    环境: -操作系统:[Mac] -浏览器 版本号:[例如 Chrome 版本 84.0.4147.105(正式版本) (64 位)] -Luckysheet版本:[最新]

    opened by heyouquan 4
  • [Feature request]Open: range to coordinate api

    [Feature request]Open: range to coordinate api

    Is your feature request related to a problem? Please describe. What I get through API: luckysheet.getRange() is the number of visit rows and columns of the current selection, {column: [0, 1], row: [0, 1]}

    But I want to get something like A1:B2

    Describe the solution you'd like Open: range to coordinate api

    enhancement good first issue 
    opened by dream-num 4
  • [Feature request]

    [Feature request] "End-user view"

    Is your feature request related to a problem? Please describe. Context: We would like to embed the luckytable in a simple web interface for end users. Currently end users get confused with menu, toolbar, column and row headers, etc.

    Describe the solution you'd like Thus end users shall NOT have the option (nor need the option) to code/edit/layout the model, with exception of few cells that are preconfigured for user inputs.

    Moreover, we would love a simple and clean representation/view of the coded spreadsheet for end users - without any of the menus, tools (e.g. formatting table) and the column and row headers.

    Related is request #45 about protecting the spreadsheet: in the end user representation, one would only be able to make few inputs in predefined cells and then the model will provide the output.

    Additional context Add any other context or screenshots about the feature request here. Hope it's clear, am available for questions, and would be very happy to get this feature. thank you!

    enhancement 
    opened by mnohn 4
  • [BUG]Link 到其他sheet,在当前sheet增加行后 link 公式的目标会被改变

    [BUG]Link 到其他sheet,在当前sheet增加行后 link 公式的目标会被改变

    描述错误

    在 sheet2 中设置一个单元格 link 到 sheet1,如:=Sheet1!C3,在此单元格向上增加一行,单元格的公式被改变为 =Sheet1!C4

    重现

    1. 第一步操作: sheet2 中设置一个单元格:=Sheet1!C3
    2. 第二步操作: 在此单元格向上增加一行
    3. 最后看到了什么错误: 此单元格公式和值都被改变:=Sheet1!C4

    期望的结果

    期望这个l单元格的link目标保持不变 屏幕截图或演示

    未增加行前: image

    增加一行后: image

    环境:

    • 操作系统:Mac
    • 浏览器 版本号:Chrome
    • Luckysheet版本:最新

    备注

    opened by GloriaCHL 0
  • Feature trigger update hook

    Feature trigger update hook

    1. 通过传入 triggerBeforeUpdatetriggerUpdated 两个参数来决定是否触发hook事件
    2. setRangeConditionalFormatDefault方法支持regExp,正则表达式
    // conditionName string regExp
    // conditionValue array [正则表达式, 0或1] 0表示对正则表达式结果取反,1表示不取反,默认是1
    // option 
    luckysheet.setRangeConditionalFormatDefault('regExp', [/^\d{2,3}$/g, 1], {cellrange: {row:[0,30],column:[0,0]}, "format": {
        "textColor": "#000000",
        "cellColor": "#ff0000"
    }})
    
    opened by weinirumo 0
  • [BUG]插入链接无法清除

    [BUG]插入链接无法清除

    描述错误 在A单元格中插入链接后,拖拽A单元格至B单元格,A单元格的内容虽然清楚了,但链接依旧生效。

    重现

    1. 点击A单元格:
    2. 插入链接至A单元格中:
    3. 拖拽A单元格至B单元格:
    4. A单元格的内容清楚了,但点击A单元格跳转链接了:

    期望的结果 1.清除A单元格的内容及内容的附属功能; 2.插入的链接,使用Ctrl+左键触发,不然无法修改链接内容。

    屏幕截图或演示 image

    环境:

    • 操作系统: Windows10
    • 浏览器 版本号: Chrome
    • Luckysheet版本:最新

    备注 谢谢各位作者

    opened by TuT-UI 0
  • [BUG] rangeCopyAfter not triggering 不触发

    [BUG] rangeCopyAfter not triggering 不触发

    i cannot trigger rangeCopyAfter function as many other "Selected area" functions unless, rangePasteBefore it works fine as this example : 我无法像许多其他“选区操作”函数一样触发 rangeCopyAfter 函数,除非 rangePasteBefore 它工作正常 作为这个例子: rangeCopyAfter : (range,data) => { console.info(range); },

    opened by namrouche993 0
Owner
mengshukeji
MengShu Open Source
mengshukeji
jQuery plugin to export a html table to JSON, XML, CSV, TSV, TXT, SQL, Word, Excel, PNG and PDF

tableExport.jquery.plugin Export HTML Table to CSV DOC JSON PDF PNG SQL TSV TXT XLS (Excel 2000 HTML format) XLSX (Excel 2007 Office Open XML format)

null 918 Dec 29, 2022
A simple, modern and interactive datatable library for the web

Frappe DataTable A modern datatable library for the web Introduction Frappe DataTable is a simple, modern and interactive datatable library for displa

Frappe 836 Dec 24, 2022
A stupidly small and simple jQuery table sorter plugin

Stupid jQuery Table Sort This is a stupid jQuery table sorting plugin. Nothing fancy, nothing really impressive. Overall, stupidly simple. Requires jQ

Joseph McCullough 708 Dec 26, 2022
Nice, sleek and intuitive. A grid control especially designed for bootstrap.

jQuery Bootgrid Plugin Nice, sleek and intuitive. A grid control especially designed for bootstrap. Getting Started jQuery Bootgrid is a UI component

Rafael Staib 976 Dec 16, 2022
Shrinks any large data tables into compact and responsive tables

jquery.table-shrinker A Jquery plugin to make HTML Table responsive across all devices, the right way! Demo Click here to see the demo, remember to re

null 29 Sep 11, 2022
Embed Luckysheet (spreadsheet) into Logseq.

logseq-plugin-luckysheet 在 Logseq 中嵌入电子表格 Luckysheet。你也可以用它来维护一张 markdown 表格。 Embed Luckysheet (spreadsheet) into Logseq. You can also use it to maint

Seth Yuan 49 Jan 1, 2023
Boost is a Microsoft Excel Add-in to help developers import large excel workbooks into their database using SQL queries

Microsoft Excel Add-in for Developers About Us Boost is a Microsoft Excel Add-in to help developers import large excel workbooks into their database u

OSLabs Beta 30 Sep 30, 2022
Mind Mapping to excel, or excel to .xmind file

Mind Mapping To Excel Project setup Prepare project npm install 1、Fetch data and generate excel Open the Mind Mapping like this Process On Mind Mappi

xuzelin995 3 May 5, 2022
FortuneSheet is an online spreedsheet component library that provides out-of-the-box features just like Excel

FortuneSheet FortuneSheet is an online spreedsheet component library that provides out-of-the-box features just like Excel English | 简体中文 Purpose The

Suzhou Ruilisi Technology Co., Ltd 1.6k Jan 3, 2023
Incredible resources (with links) to help up-skill yourselves on various fields. Resources like programming, designing, engineering and much more and completely Open Source.

Shiryoku Incredible resources (with links) to help up-skill yourselves on various fields. Resources like programming, designing, engineering and much

Kunal Keshan 22 Dec 15, 2022
A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever. Try it out today!

A free and open source resume builder. Go to App What is this app all about? Reactive Resume is a free and open source resume builder that’s built to

Reactive Resume 9.7k Jan 3, 2023
Excel-like Experience for Web Apps

DataGridXL 2 Excel-like Experience for Web Apps Built in JavaScript ES6. Made in the 2020s. ✅ Works with JSON ✅ Works with CSV ✅ Works with SQL ✅ Work

DataGridXL 381 Jan 2, 2023
Completely free TS/JS one-file source code snippets with tests, which can be copied to avoid extra dependencies (contributions welcome).

TinySource Completely free TS/JS one-file source code snippets with tests, which can be copied to avoid extra dependencies (contributions welcome). Sn

null 81 Jan 3, 2023
Password Generator - A fast, simple and powerful open-source utility tool for generating strong, unique and random passwords

A fast, simple and powerful open-source utility tool for generating strong, unique and random passwords. Password Generator is free to use as a secure password generator on any computer, phone, or tablet.

Sebastien Rousseau 11 Aug 3, 2022
1KB lightweight, fast & powerful JavaScript templating engine with zero dependencies. Compatible with server-side environments like node.js, module loaders like RequireJS and all web browsers.

JavaScript Templates Contents Demo Description Usage Client-side Server-side Requirements API tmpl() function Templates cache Output encoding Local he

Sebastian Tschan 1.7k Jan 3, 2023
JavaScript data grid with a spreadsheet look & feel. Works for React, Angular, and Vue. Supported by the Handsontable team ⚡

Handsontable is a JavaScript component that combines data grid features with spreadsheet-like UX. It provides data binding, data validation, filtering

Handsontable 17.4k Jan 1, 2023
JavaScript data grid with a spreadsheet look & feel. Works for React, Angular, and Vue. Supported by the Handsontable team ⚡

Handsontable is a JavaScript component that combines data grid features with spreadsheet-like UX. It provides data binding, data validation, filtering

Handsontable 17.4k Dec 31, 2022
JavaScript data grid with a spreadsheet look & feel. Works for React, Angular, and Vue. Supported by the Handsontable team ⚡

Handsontable is a JavaScript component that combines data grid features with spreadsheet-like UX. It provides data binding, data validation, filtering

Handsontable 17.4k Dec 28, 2022
This is a Google Apps Script library for parsing the form object from HTML form and appending the submitted values to the Spreadsheet.

HtmlFormApp Overview This is a Google Apps Script library for parsing the form object from HTML form and appending the submitted values to the Spreads

Kanshi TANAIKE 18 Oct 23, 2022