文章位置:https://github.com/Arnoldnuo/learn-nw/blob/master/node-webkit%E8%A7%A3%E6%9E%90excel%E6%96%87%E6%A1%A3.md

node-webkit可以使用nodejs的那一套的第三方扩展的,所以我们需要先去找一个可以解析excel的第三方扩展去。

由于我的windows系统总是无法编译c++写的第三方扩展,用npm安装c++写的第三方扩展总是报错,所以我找了一个非c++的第三方扩展————excel-parser,安装方法很简单,在cmd下进入你的项目的目录,在项目目录中新建一个node_modules文件夹(和index.html,package.json在同一层次),然后在cmd下输入"npm install excel-parser"安装该扩展。

本来我以为,安装成功以后就可以直接在项目中使用 require("excel-parser")来调用该解析功能了,但是失败了,怎么办,研究一下源码看能不能解决。

首先看excelParser.js中的excelParser.worksheets函数,这个函数是怎么处理excel文件的呢,下面代码是核心:

if(!exists) return cb("File not found");
args = ['-x', path.relative(__dirname, options.inFile), '-W'];
utils.execute(args, function(err, stdout) {
if(err) return cb(err);
worksheets = _.compact(stdout.split(/\n/));
if(worksheets) return cb(null, JSON.parse(worksheets));
else return cb(new Error("Not found any worksheet in given spreadsheet"));
});

然后我们看一看utils.execute()是干什么用的,我们找到utils.js里面关键代码是:

cmd.join(' '),
{cwd: __dirname},
function(err, stdout, stderr) {
if(err) return cb(err);
if(stderr) return cb(stderr);
cb(null, stdout);
}

主要是执行了一个cmd命令,我们看看这个命令执行的是什么呢?python convert.py原来是执行了一个python脚本,看到这里,我们必须要配置python环境了,这个就不多说了,默认你已经搭建好了,没有搭建的话网上有很多教程的,记得要用python2.7的环境,python2和3不兼容。

搭建好了,如果发现报错信息是这样子的:xlrd is required to run this script,我们就需要查查xlrd是什么了。

xlrd是python实现的一个解析excel的文件,我们的扩展中现在没有,所以需要下载下来,下载地址,在这里下载下来以后,解压,把里面的xlrd文件夹复制到convert.py同一目录中,这时候可以执行了。

在解析某些excel的时候可能会报错unknown encoding: unknown_codepage_21010

google一下这个错误就会找到这个网页https://github.com/okfn/messytables/issues/47还有这个网页http://stackoverflow.com/questions/3511743/using-xlrd-to-read-excel-xls-file-containing-chinese-and-or-hindi-characters原来是编码的问题

看convert.py源码,是调用xlrd.open_workbook()函数来解析excel的,我们看看这个函数的实现 在init.py里面有一段代码

open_workbook(filename=None,
logfile=sys.stdout,
verbosity=0,
use_mmap=USE_MMAP,
file_contents=None,
encoding_override=None,
formatting_info=False,
on_demand=False,
ragged_rows=False,
)

看到里面的encoding_override=None了么,调用的时候需要指明编码格式

于是我们把convert.py中的workbook = xlrd.open_workbook(filename=inFile)修改成workbook = xlrd.open_workbook(filename=inFile, encoding_override="cp1252")(至于为什么是cp1252,上面的两个网页中如果仔细看,有解释)。

现在就不会出现unknown encoding: unknown_codepage_21010的问题了。

至此,问题解决。

更多相关文章

  1. 如何在CSS中单独定位此HTML代码?
  2. EL中的fn函数,jstl的fn函数,fn函数,fn函数描述,fn使用举例
  3. 10段实用的HTML5代码
  4. HTML5_旋转轮播-电子相册-新startMove函数写无缝轮播
  5. 用JavaScript实现两种功能:1、切换全选/全不选文字;2、根据选中个
  6. HTML5+学习笔记2-------边看代码边研究貌似还是有点问题...还在
  7. 深入剖析php执行原理(4):函数的调用
  8. PHP代码在不需要时在Javascript中自动运行[重复]
  9. 如何控制html代码中DL标签的颜色?

随机推荐

  1. [Linux] 总结各系统 双网卡绑定
  2. 请问同一软件为什么linux版的要比xp版的
  3. busybox1.19.3编译错误解决办法
  4. linux用户管理及用户权力下放
  5. 如何在windows 10的linux子系统中启动jup
  6. linux环境下,配置eclipse nodejs开发环境
  7. [置顶] Linux 内核学习(1)
  8. linux下crontab 任务不执行的可能原因总
  9. 第四组内部linux比赛命题
  10. 有种生活态度叫 Linux