exceljs是一个读取,操作和编写电子表格数据和样式到XLSX和JSON,从Excel电子表格文件逆向工程设计的项目。之所以称它最强,是因为它的功能强大,简直就是专门为Excel打造的前端处理插件,到目前为止,笔者还尚未见过比这个更强大的前端插件,由于其强悍的前端处理能力,这就意味着有很多操作将减轻服务器端压力,而且性能更加出色!
https://github.com/exceljs/exceljs
安装我们当然是首选npm
npm install exceljs
var workbook = new Excel.Workbook();
workbook.creator = 'Me';
workbook.lastModifiedBy = 'Her';
workbook.created = new Date(1985, 8, 30);
workbook.modified = new Date();
workbook.lastPrinted = new Date(2016, 9, 27);
// 将工作簿日期设置为1904日期系统
workbook.properties.date1904 = true;
“工作簿”视图控制Excel在查看工作簿时打开多少个单独的窗口。
workbook.views = [
{
x: 0, y: 0, width: 10000, height: 20000,
firstSheet: 0, activeTab: 1, visibility: 'visible'
}
]
var sheet = workbook.addWorksheet('My Sheet');
用addWorksheet函数的第二个参数设置工作表的选项。
// 创建一个红色标签颜色的工作表
var sheet = workbook.addWorksheet('My Sheet', {properties:{tabColor:{argb:'FFC0000'}}});
// 创建一个隐藏网格线的工作表
var sheet = workbook.addWorksheet('My Sheet', {properties: {showGridLines: false}});
// 创建一个第一行和列冻结的工作表
var sheet = workbook.addWorksheet('My Sheet', {views:[{xSplit: 1, ySplit:1}]});
使用工作表id从工作簿中删除工作表。
// 创建工作表
var sheet = workbook.addWorksheet('My Sheet');
// 使用工作表ID删除工作表
workbook.removeWorksheet(sheet.id)
// 迭代所有sheet
// 注意:workbook.worksheets.forEach仍然可以工作,但这个方式更好
workbook.eachSheet(function(worksheet, sheetId) {
// ...
});
// 按名称获取表格
var worksheet = workbook.getWorksheet('My Sheet');
// 按ID获取表格
var worksheet = workbook.getWorksheet(1);
。。。。。。以上只是部分文档中的介绍,感兴趣的小伙伴可以移步Github直接查看详细的文档,完整功能了解可参考下一个标题
PS:提供了中文文档
虽然以上功能还不能包括了Excel的所有功能,但也已经相当的丰富了!
在之前的文章中曾介绍过另一个不错的前端Excel插件,感兴趣的可以去看一看,exceljs拥有这么丰富的功能,如果你想开发一个功能强大的Web电子表格,不妨多尝试尝试!
val函数的工作原理
eval函数会评估一个给定的含有JavaScript代码的字符串,并且试图去执行包含在字符串里的表达式或者一系列的合法的JavaScript语句。eval函数将把最后一个表达式或者语句所包含的值或引用作为返回值。
举例说明
var bar = 'bar';
var foobar = eval('"foo" + bar');
alert(foobar);
var bar = 'bar';
// if variable bar equals 'bar', foobar is the result of // last executing statement: bar="foo-bar";
var foobar = eval('if(bar == "bar") {bar="foo-bar";} else {bar = "bar-foo";}');
alert(foobar);// change the valuebar = 'foo';
// now our the last executed statement is: bar = "bar-foo";
// therefore the value of variable foobar has been changed
// into 'bar-foo'foobar = eval('if(bar == "bar") {bar="foo-bar";} else {bar = "bar-foo";}');
alert(foobar);
JSON的格式
JSON的格式是由大括号和由冒号(:)构成的名值对所组成的。注意JSON格式与对象字面量 (object literals) 的区别:JSON的名字部分严格用引号+名字来表示。
举例说明
var objectLiteral = { name: "Objector.L", age: "24", special: "JavaScript", sayName: function() { return this.name; }
};
var jsonFormat = { "summary": "Blogs", "blogrolls": [ { "title": "Explore JavaScript", "link": "http://example.com/" }, { "title": "Explore JavaScript", "link": "http://example.com/" } ]
};
eval和JSON
由于Ajax的兴起,JSON这种轻量级的数据格式作为客户端与服务器之间的传输格式逐渐地流行起来,进而出现的问题是如何将服务器端构建好的JSON数据转化为可用的JavaScript对象。利用eval函数无疑是一种简单而直接的方法。在转化的时候需要将JSON字符串的外面包装一层圆括号:
var jsonObject = eval("(" + jsonFormat + ")");
为什么要加括号?
加上圆括号的目的是迫使eval函数在评估JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]
JSON格式的名字部分为什么要加引号?
因为eval函数会将{foo:”bar”}解释成合法的JavaScript语句,而非表达式。但是人们往往想要的是让eval将这段代码解释成一个对象。所以JSON格式会强制你去在名字的外侧加上引号再结合圆括号,这样eval就不会错误的将JSON解释成代码块。
举例说明
alert(eval('{foo:"bar"}')); // return "bar", incorrect
alert(eval('({"foo": "bar"})')); // return JSON object, correct
结论
理解eval的工作原理和json的严格的限定格式,合理结合eval和json应用于JavaScript的数据传递和对象转换。
following this format:
eval('{' + jsonString + ')');
package.json 是一个用于描述和配置项目的重要文件,其中包含了许多字段和选项,可以影响项目的构建、依赖管理、脚本执行等方面。了解这些字段可以帮助开发者更好地理解和控制项目的行为。
package.json对于大部分前端开发者来说,知道dependencies与devDependencies就够了。但对于库开发者或有更高级需求的开发者来说,了解 package.json 的其他字段是非常有必要的。
本文介绍的字段分为官方字段与非官方字段。非官方字段是被主流打包工具(webpack,Rollup)所支持, 旨在提供更高级的配置和功能,以满足特定的构建需求,可能不具备通用性。
目前版本:v7.24.2
定义项目的名称,不能以"."和"_"开头,不能包含大写字母
定义项目的版本号,格式为:大版本号.次版本号.修订号
项目描述
项目关键词
项目作者
项目贡献者
项目主页地址
项目代码仓库地址
项目提交问题的地址
指定项目的资金支持方式和链接
生产环境的依赖包
如果不使用脱字符(^),安装的版本号固定;如果使用,则能安装当前大版本的最新版本,在package-lock.json中可查看当前实际安装的版本。
开发环境的依赖包,例如webpack、vite、babel、ESLint等。
对等依赖的作用:
示例:声明要使用组件库,需在项目中安装大于17.0.1版本的react
将对等依赖标记为可选,如果用户没有安装对等依赖,npm不会发出警告
声明捆绑依赖项(使用情景较少)
声明可选依赖项(使用情景较少)
声明对npm或node的版本要求
目前对NPM来说,engines只是起一个说明的作用,即使用户安装的版本不符合要求,也不影响依赖包的安装。但使用pnpm 和 yarn安装,如果版本不符合要求会导致安装失败。
单个代码库中统一管理多个包(monorepo),在workspaces声明目录下的package会软链到根目录的node_modules中。
表示所有子包都在packages文件夹下
在node_modules/.package-lock.json中可以看到 "link": true 链接符号信息
安装,卸载等命令都是一样的,只是多了"--workspace="参数(简写-w),用来指定在哪个包中执行命令
workspaces功能与lerna类似,如果只需简单地管理多个包,workspaces足够了。lerna具有版本管理,发包提示,简化多包项目发布流程等更多功能。
脚本入口
用于定义项目的配置项,例如设置环境变量
运行 npm run start,终端打印出 example.com
指定 ES 模块入口文件
示例:当其他开发者在他们的项目中导入你的包时,会加载并执行包中的dist/index.esm.js
指定 CommonJS 模块或 ES 模块入口文件。如果不指定该字段,默认是根目录下的index.js
提示:从 Node.js 12.20.0 版本开始,"main" 字段也可以指定 ES 模块的入口文件
指定浏览器使用的入口文件,例如umd模块。
指定 TypeScript 类型声明文件(.d.ts 文件)的路径
当打包工具支持exports字段时(webpack、Rollup 等),以上main,browser,module,types四个字段都被忽略
"." 表示默认导出
"import": 指定了 ES module (ESM) 规范下的导出文件路径
"require": 指定了 CommonJS 规范下的导出文件路径
"browser": 指定了用于浏览器环境的导出文件路径
"types": 指定了类型声明文件的路径
导出其他文件,例如除了导出默认路径,导出源文件
其他项目中使用
指定模块系统的使用方式,"commonjs","module","umd","json"
示例:指定模块系统为ES module模式,使用CommonJS文件时,需显式的定义为 .cjs 文件扩展名,来明确指定这些文件为 CommonJS 模块
指定哪些包被推送到npm服务器中
示例:只推送index.js和dist包到npm服务器
可以在项目根目录新建一个.npmignore文件,说明不需要提交到npm服务器的文件,类似.gitignore。写在这个文件中的文件即便被写在files属性里也会被排除在外
定义在全局安装时可执行的命令,例如构建脚手架
Linux 中的帮助指令(使用情景较少)
定义项目目录结构的字段(使用情景较少)
防止私有包发布到npm服务器,要发布到npm上设为false
当设置 "preferGlobal" 字段为 true 时,它表示你的包更适合以全局方式安装,而不是作为项目的依赖项进行本地安装。
这个字段的设置是为了向用户传达关于你的包的最佳使用方式的建议。它并不会直接影响包的安装方式或包管理器的行为。
在发布包时指定特定的配置
示例:指定包发布的注册表 URL,指定所有用户都可以访问(私有的会收费)
指定你的包适用的操作系统
示例:包只适用于darwin(macOS)和 linux
示例:禁用win32
该配置和OS配置类似,用CPU可以更准确的限制用户的安装环境
指定软件的开源协议:
ISC:在所有副本中保留版权声明和许可证声明,使用者就可以拿你的代码做任何想做的事情,你也无需承担任何责任
MIT:在所有副本或主要部分中保留版权声明和许可证声明,使用者就可以拿你的代码做任何想做的事情,你也无需承担任何责任
开源协议查询地址:opensource.org/licenses/
eslint的配置,更推荐新建 .eslintrc 进行配置
使用参考:新建 .eslintrc
babel的配置,更推荐新建 .babelrc 进行配置
unpkg 是一个基于 CDN 的前端包托管服务,用于在浏览器中直接引用和加载 npm 上发布的包。
无需下载,直接通过 <script> 标签引用
lint-staged是一个在Git暂存文件上运行linters的工具,通常配合gitHooks一起使用。
使用参考:配置 husky、lint-staged、@commitlint/cli
告知支持哪些浏览器及版本,Autoprefixer常用到它
指示包是否具有副作用,协助Webpack,Rollup等进行tree shaking
多数情况下可以直接设置为false,这样打包工具就会自动删除未被import的代码
但是有些情况例外
原文链接:https://juejin.cn/post/7240805459288522808
*请认真填写需求信息,我们会在24小时内与您取得联系。