Мой друг принимает заказы от клиентов, и клиентов в основном просят представить лист Excel с такими полями, как товар, описание, марка, количество и т. Д. c и c. Однако, когда клиенты представляют эти листы, они не всегда приходят с одними и теми же дескрипторами столбцов, поэтому иногда на листе появляются столбцы, например, производитель, а не бренд, или сокращенное «кол-во» для количества или описание товара, а не просто описание, просто чтобы назвать Несколько вариантов.
Я пытаюсь найти способ в основном сделать веб-инструмент, который позволил бы ему взять отправленную ему таблицу и создать инструмент, который будет стандартизировать эти столбцы без необходимости go копировать / paste работа как побочный инструмент для меня, чтобы получить больше понимания о программировании и алгоритмах и т. д. c.
В основном у меня файлы Excel, импортированные на веб-страницу, примерно так:
import { Component, ElementRef, ViewChild, OnInit, Output } from '@angular/core';
import * as XLSX from 'xlsx';
type ArrayOfArray = any[][];
@Component({
selector: 'app-read-excel',
templateUrl: './read-excel.component.html',
styleUrls: ['./read-excel.component.css']
})
export class ReadExcelComponent implements OnInit {
constructor() {}
ngOnInit () {
}
data: ArrayOfArray = [];
wopts: XLSX.WritingOptions = { bookType: 'xlsx', type: 'array' };
fileName: string = ' ';
onFileChange(evt: any) {
const inputFile: DataTransfer = <DataTransfer>(evt.target);
if (inputFile.files.length !== 1) throw new Error('Cannot use multiple files');
const fileReader: FileReader = new FileReader();
fileReader.onload = (event: any) => {
/* read workbook */
const binaryString: string = event.target.result;
const workBook: XLSX.WorkBook = XLSX.read(binaryString, { type: 'binary', sheetStubs: true});
console.log(typeof binaryString)
/* grab first sheet */
const workSheetName: string = workBook.SheetNames[0];
console.log(workSheetName)
const workSheet: XLSX.WorkSheet = workBook.Sheets[workSheetName];
/* save data */
this.data = <ArrayOfArray>(XLSX.utils.sheet_to_json(workSheet, { header: 1, blankrows: true }));
};
fileReader.readAsBinaryString(inputFile.files[0]);
}
}
и в html
<div>
<h3>File Should Show Here</h3>
<input type="file" (change)="onFileChange($event)" multiple="false" />
<table>
<tbody>
<tr *ngFor="let column of data">
<td *ngFor="let val of column">
{{val}}
</td>
</tr>
</tbody>
</table>
</div>
В логическом смысле я имею в виду идею, которую я выделяю ниже
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) каждая строка импортируется как массив с каждым элементом в массиве, соответствующем ячейке. в этом ряду. Есть ли способ выполнить задачу, которую я описал. Я на самом деле не ищу удержания, моя рука делает это для меня, набираю ответ, в основном желая узнать, возможно ли это, и общее представление о том, как это можно сделать.