首页 > 解决方案 > 启用以正确导入 csv

问题描述

我创建了以下应用程序 = https://stackblitz.com/edit/angular-ivy-6r12ta?file=src%2Fapp%2Fapp.component.html

这将导入一个 csv 文件。但我有两个问题:

  1. 我不得不在语音字符串周围加上双引号,以逃避放在其中的逗号(我知道这是标准做法)。但是我想在导入时删除它们。
  2. 如果语音字符串中有逗号,则应用程序根本不会导入它。我假设这是我拆分逗号的问题。

Stackoverlow 不允许我上传文件供您测试,但这里有一些您可以复制到 csv 文件中的文本:

id,speechText
84983428,"I can't pick up a person"
51489463,"I don't think you've thought this through properly"
58345,"This line won't import, because it has a comma"

标签: angular

解决方案


您的代码不处理行中存在逗号的情况。以下行是问题所在 -

let curruntRecord = (<string>csvRecordsArray[i]).split(",");
      if (curruntRecord.length == headerLength) {...}

如果其中一个单元格中至少有一个逗号,则此条件不匹配。

您应该使用适当的 csv 解析器。我已经使用ngx-csv-parser修改了您的代码。

安装

npm install --save ngx-csv-parser

app.module.ts

import { NgxCsvParserModule } from "ngx-csv-parser";

imports: [..., NgxCsvParserModule],

app.component.ts

-- 你修改后的 uploadListener 方法 --

uploadListener($event: any): void {
    let text = [];
    let files = $event.srcElement.files;

    if (this.isValidCSVFile(files[0])) {
      this.ngxCsvParser.parse(files[0], { header: false, delimiter: ',' })
      .pipe().subscribe((result: Array<any>) => {
 
        console.log('Result', result);
        this.records = result;
      }, (error) => {
        console.log('Error', error);
      });
    } else {
      alert("Please import valid .csv file.");
      this.fileReset();
    }
  }

推荐阅读