我有一个角度应用程序,我试图阅读和解析一个.xlsx文件诉诸js-xlsx JavaScript库.但是我在JavaScript端打开文件时遇到问题.
在我的html上,我有一个简单的类型文件输入,它打开一个文件选择器,用户可以在其中选择一个合适的文件.我无法使用angular指令将文件发送到控制器上的函数,因为当用户仅在按下输入按钮时选择文件时,ng-change不会更新.我最终不得不通过添加'onchange ="angular.element(this).scope().handleFile(this)"'到我的输入来使用普通旧JavaScript和一些角度的混合.
附加quotation.html:
<div class="container-fluid" ng-controller="addQuotationController">
...
<input type="file" id="file" class="" onchange="angular.element(this).scope().handleFile(this)">
...
</div>
Run Code Online (Sandbox Code Playgroud)
这解决了我无法将文件从HTML发送到JavaScript方面的问题.但是,我无法打开文件.我从官方文档中尝试了很多例子,但是我还没有成功地使它成功.这是我目前的代码:
附加quotation.component.js:
$scope.handleFile = function(e) {
var files = e.target.files;
var i,f;
for (i = 0, f = files[i]; i != files.length; ++i) {
var reader = new FileReader();
var name = f.name;
reader.onload = function(e) {
var data = e.target.result;
var workbook = XLSX.read(data, {type: 'binary'});
/* DO SOMETHING WITH workbook HERE */
};
reader.readAsBinaryString(f);
}
}
Run Code Online (Sandbox Code Playgroud)
我试图调试并发现该文件确实进入了该方法但是在尝试访问"e.target.files;"时发生了异常.
我完全迷失了如何解决这个问题,我见过的例子没有任何帮助.我究竟做错了什么?
我正在使用 Node.js 和js-xlsx来生成新的 Excel 文件。生成新文件时,我希望将其保存到本地磁盘。
此代码用于生成和下载新的 Excel 文件,如何将其存储到磁盘?
FileManagement.generateExcelFile("xlsx-filtered-list", "error-sheet", finalResult, res);
generateExcelFile(fileName, sheetName, data, res) {
const workSheet = sheet_from_array_of_arrays(data);
const workBook = new Workbook();
workBook.SheetNames.push(sheetName);
workBook.Sheets[sheetName] = workSheet;
const workBookOptions = { bookType:'xlsx', bookSST:false, type:'binary' };
const workBookFile = xlsx.write(workBook, workBookOptions);
res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.setHeader('Content-Disposition', 'attachment; filename='+fileName);
res.end(workBookFile, 'binary');
// Functions work Excel generation (don't touch)
function Workbook() {
if(!(this instanceof Workbook)) return new Workbook();
this.SheetNames = [];
this.Sheets = {};
}
function sheet_from_array_of_arrays(data) {
const workSheet …Run Code Online (Sandbox Code Playgroud) 我正在使用js-xlsx库在JavaScript中创建Excel文件.
这个库使用jszip.我尝试jszip在加载之前在我的JavaScript文件中定义库,jszip但从jszip未定义过:
Uncaught TypeError: jszip is not a function
Run Code Online (Sandbox Code Playgroud)
配置requirejs:
<script type="text/javascript">
requirejs.config({
paths : {
jszip : '../tools/jszip'
}
});
</script>
Run Code Online (Sandbox Code Playgroud)
以下是我在JS文件中使用它的方法:
define(['jszip', '../tools/xlsx'], function(jszip, xlsx) {
...
}
Run Code Online (Sandbox Code Playgroud) 该SheetJS文档显示的方式采取JSON对象,并将其转换为Excel工作表。从他们的例子:
var ws = XLSX.utils.json_to_sheet([
{S:1,h:2,e:3,e_1:4,t:5,J:6,S_1:7},
{S:2,h:3,e:4,e_1:5,t:6,J:7,S_1:8}
], {header:["S","h","e","e_1","t","J","S_1"]});Run Code Online (Sandbox Code Playgroud)
默认情况下,头信息是 Object.keys。
输出在 excel 中如下所示:
我的问题:从 Json_to_sheet 转换时如何省略标题?我不想要输出中的标题,只想要 Object.keys 顺序中的数字。
我很困惑使用writeFile方法编写 .xlsx 文件,因为我得到了一个空文件。
该函数接收一个有效的工作表对象(我检查过),工作表名称显示良好但文件中没有信息。下面是我的代码,在此先感谢您。
function saveToExcel(event, worksheet) {
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, "Lista de Evaporadores");
event.sender.send('verga', workbook);
XLSX.writeFile(workbook, `books/lista-evaporadores.xlsx`, {type: 'file'});
open('books/lista-evaporadores.xlsx');
}
Run Code Online (Sandbox Code Playgroud) js-xlsx ×5
javascript ×3
excel ×2
sheetjs ×2
angularjs ×1
excel-2007 ×1
express ×1
file-upload ×1
html ×1
node.js ×1
requirejs ×1
xlsx ×1
xlsx-js ×1