sheet_to_json生成数组的坏数组



使用Angular 9,我正在构建一个步骤向导,第一步是读取和解析.xlsx文件。

我有一个定义如下的文件输入:

<form [formGroup]="steps[currentStep].form">
<label>Select File to Process</label>
<input accept=".xlsx"
autocomplete="off"
floatPlaceholder="always"
formControlName="input"
placeholder="Input"
type="file"
(change)="fileChanged($event)">
</form>

然后,我有一个接口,它表示与数据表的一对一关系,我会定义整个接口,但大约有100列(在我的控制之外,它们的名称都很糟糕(。但它基本上看起来像:

export interface IRequestItem {
ReqItemId: number;
ReqNum?: string;
_ReqItem?: number;
CatNum?: number;
// ... etc.
}

其想法是,用户将使用输入上传.xlsx文件,然后创建一个IRequestItem数组。为此,以下是fileChanged事件处理程序的设置方式:

fileChanged(e): void {
this.steps[this.currentStep].loading = true;
const reader = new FileReader();
const file = e.target.files[0];
reader.onload = (event) => {
const data = reader.result;
const workBook = XLSX.read(data, { type: 'binary' });
if (workBook.SheetNames.length === 0) {
this.steps[this.currentStep].loading = false;
return;
}
const worksheet = workBook.Sheets[workBook.SheetNames[0]];
this.workSheet = XLSX.utils.sheet_to_json<IRequestItem>(worksheet, {
blankrows: false,
header: 1,
raw: true,
rawNumbers: true
});
this.steps[this.currentStep].loading = false;
};
reader.readAsBinaryString(file);
}

基本上它做以下事情:

  1. 设置当前步骤的loading属性
  2. 使用FileReader获取文件内容
    • 读取文件内容后将执行步骤3
  3. 获取FileReader结果并将其转换为XLSX.WorkBook
    • 如果用户上载了一个空工作簿,则取消设置loading属性并返回
  4. 获取工作簿的第一个工作表
  5. 尝试使用XLSX.utils.sheet_to_json<T>方法将工作表转换为IRequestItem的数组

在第5步之前,一切似乎都运行良好,但如果在那一行设置调试器,控制台中的输出将是数组。

我不明白的是,我正在创建.xlsx文件,方法是查询SSMS中的表,将结果导出为.CSV文件,然后使用.xlsx扩展名(在Microsoft Excel中(保存该文件。所以我知道一个事实,不仅我的文件设置正确,而且我还知道数据代表了一个合法的IRequestItem。

经过长时间的搜索,我意识到我误读了文档。每https://docs.sheetjs.com/#json我在Sheet2JSONOpts中指定了错误的header属性。相反,它应该是:

this.workSheet = XLSX.utils.sheet_to_json<IRequestItem>(worksheet, {
blankrows: false,
header: 'A',
raw: true,
rawNumbers: true
});

相关内容

  • 没有找到相关文章

最新更新