Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 标准化导入Excel表中的列名_Javascript_Excel_Angular_Typescript - Fatal编程技术网

Javascript 标准化导入Excel表中的列名

Javascript 标准化导入Excel表中的列名,javascript,excel,angular,typescript,Javascript,Excel,Angular,Typescript,我的一位朋友接受客户的订单,客户基本上被要求提交一份excel表格,其中包含项目、说明、品牌、数量、,然而,当客户提交这些表格时,他们并不总是带有相同的列描述符,因此有时表格中会有列,如制造商而不是品牌或缩写的数量“数量”,或项目描述而不是仅列举一些变体的描述 我正试图找到一种方法,基本上制作一个webtool,让他能够获取发送给他的表格,并制作一个工具,使这些列标准化,而无需通过复制/粘贴工作作为辅助工具,让我对编程和算法等有更多的了解 基本上我有excel文件导入到网页像这样 从'@angu

我的一位朋友接受客户的订单,客户基本上被要求提交一份excel表格,其中包含项目、说明、品牌、数量、,然而,当客户提交这些表格时,他们并不总是带有相同的列描述符,因此有时表格中会有列,如制造商而不是品牌或缩写的数量“数量”,或项目描述而不是仅列举一些变体的描述

我正试图找到一种方法,基本上制作一个webtool,让他能够获取发送给他的表格,并制作一个工具,使这些列标准化,而无需通过复制/粘贴工作作为辅助工具,让我对编程和算法等有更多的了解

基本上我有excel文件导入到网页像这样

从'@angular/core'导入{Component,ElementRef,ViewChild,OnInit,Output};
从“XLSX”导入*作为XLSX;
类型ArrayOfArray=任意[];
@组成部分({
选择器:“应用程序读取excel”,
templateUrl:'./读取excel.component.html',
样式URL:['./读取excel.component.css']
})
导出类ReadExcelComponent实现OnInit{
构造函数(){}
恩戈尼尼特(){
}
数据:ArrayOfArray=[];
wopts:XLSX.WritingOptions={bookType:'XLSX',type:'array'};
文件名:字符串=“”;
onFileChange(evt:any){
constinputfile:DataTransfer=(evt.target);
如果(inputFile.files.length!==1)抛出新错误(“不能使用多个文件”);
const fileReader:fileReader=newfilereader();
fileReader.onload=(事件:any)=>{
/*阅读工作手册*/
const binaryString:string=event.target.result;
常量工作簿:XLSX.workBook=XLSX.read(二进制字符串,{type:'binary',sheetStubs:true});
console.log(二进制字符串的类型)
/*抢第一张*/
常量工作表名称:string=workBook.SheetNames[0];
console.log(工作表名称)
常量工作表:XLSX.workSheet=workBook.Sheets[workSheetName];
/*保存数据*/
this.data=(XLSX.utils.sheet_to_json(工作表,{header:1,blankrows:true}));
};
fileReader.readAsBinaryString(inputFile.files[0]);
}
}
在html中


文件应该显示在这里
{{val}}
从逻辑上讲,我心里有一个想法,我在下面概述

if columnheader contains ("brand" or "manufacturer" or "mfg") then place the data within the column inside a new table under the column "brand".
if column header contains ("quantity" or "qty" or "#") then place the data within the column inside the new table under the column "quantity"

等等等等。然而,当我以这种方式导入表时,有两件事1)表是逐行导入的,而不是逐列导入的;2)每行作为数组导入,数组中的每个项对应于该行中的一个单元格。有没有办法完成我描述的任务。我并不是真的在寻找一个“握着我的手,为我做”的答案,主要是想知道这是否可能,以及如何实现它的一般想法。

您是否尝试使用专门用于excel文件导入的工具,如

这将允许您设置类型,例如,书籍类型:

interface Book {
  Id: number;
  Title: string;
  Author: string;
}
然后按照以下配置进行导入:

const factory = new ImporterFactory(); 
const importer = await  factory.From(filePath);
const books = importer.GetAllItems<Book>({
    type: 'list',
    worksheet: 'Favourites',
    columns: [
        {index: 1, key: 'Id', mapper: (v: string) => Number.parseInt(v)},
        {index: 2, key: 'Title'},
        {index: 5, key: 'Author'}, 
    ],
    rowOffset: 1, //offset header row
});
const factory=new ImporterFactory();
const importer=wait factory.From(文件路径);
const books=importer.GetAllItems({
键入:“列表”,
工作表:“收藏夹”,
栏目:[
{索引:1,键:'Id',映射器:(v:string)=>Number.parseInt(v)},
{索引:2,键:'Title'},
{索引:5,键:'作者'},
],
rowOffset:1,//偏移标题行
});
我希望这能帮助你:)