Скачать / сохранить файл CSV - PapaParse - PullRequest
0 голосов
/ 09 сентября 2018

ПРОБЛЕМА:
Загруженный файл CSV является пустым (unparse() метод для преобразования массива / JSON в CSV).

ДЕТАЛЬ:
Papaparse работает нормально, когда анализирует файл CSV в массив JavaScript. Но когда я передаю данные этого массива или данные JSON в метод unparse(), он не работает.

Угловой метод JS:

$scope.downloadCSV = function(){
    var csv = Papa.unparse($scope.final_array);
    console.log($scope.final_array);
    console.log(csv);
    var csvData = new Blob([csv], {type: 'text/csv;charset=utf-8;'});
    var csvURL =  null;
    if (navigator.msSaveBlob) {
        csvURL = navigator.msSaveBlob(csvData, 'download.csv');
    } else {
        csvURL = window.URL.createObjectURL(csvData);
    }
    var tempLink = document.createElement('a');
    tempLink.href = csvURL;
    tempLink.setAttribute('download', 'download.csv');
    tempLink.click();
}

$scope.final_array содержит данные как:

enter image description here

В приведенном выше коде console.log(csv); на консоли отображается пустым.

Короче говоря: var csv = Papa.unparse($scope.final_array); не работает.

UPDATE
Размещенный массив помогает мне сгенерировать следующую таблицу, и кнопка " Сохранить сгенерированный CSV " не работает, а опубликованный код предназначен для кнопки этого действия. enter image description here

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Ваша ошибка: если мы посмотрим скриншот вашей консоли , мы увидим, что в коде массива есть некоторая путаница из массивов и объектов. В вашем коде у вас есть такие:

var array =
[
    [question1: "A", question2: "A"],
    [question1: "A B", question2: "B"]
];

Но это неверно и должно быть примерно так:

var array =
[
    {question1: "A", question2: "A"},
    {question1: "A B", question2: "B"}
];

Вы должны исправить это.

Рабочий пример

См. Это Демонстрация Codepen , поскольку фрагменты StackOverflow находятся в песочнице и по этой причине не работают.

var array =
[
    {
        question1: "А",
        question2: "А",
        question3: "mike",
        question1_A: "TRUE",
        question1_B: "FALSE",
        question1_C: "FALSE",
        question1_D: "FALSE"
    },
    {
        question1: "A В",
        question2: "В",
        question3: "dan",
        question1_A: "TRUE",
        question1_B: "TRUE",
        question1_C: "FALSE",
        question1_D: "FALSE"
    },
    {
        question1: "B C D",
        question2: "А В С",
        question3: "tango",
        question1_A: "FALSE",
        question1_B: "TRUE",
        question1_C: "TRUE",
        question1_D: "TRUE"
    },
    {
        question1: "A D",
        question2: "С",
        question3: "charlie",
        question1_A: "TRUE",
        question1_B: "FALSE",
        question1_C: "FALSE",
        question1_D: "TRUE"
    },
    {
        question1: "В",
        question2: "А",
        question3: "bob",
        question1_A: "FALSE",
        question1_B: "TRUE",
        question1_C: "FALSE",
        question1_D: "FALSE"
    },
    {
        question1: "C D",
        question2: "А",
        question3: "john",
        question1_A: "FALSE",
        question1_B: "FALSE",
        question1_C: "FALSE",
        question1_D: "FALSE"
    }
];


function downloadCSV()
{
    var csv = Papa.unparse(array);

    var csvData = new Blob([csv], {type: 'text/csv;charset=utf-8;'});
    var csvURL =  null;
    if (navigator.msSaveBlob)
    {
        csvURL = navigator.msSaveBlob(csvData, 'download.csv');
    }
    else
    {
        csvURL = window.URL.createObjectURL(csvData);
    }

    var tempLink = document.createElement('a');
    tempLink.href = csvURL;
    tempLink.setAttribute('download', 'download.csv');
    tempLink.click();
}
<script src="https://www.papaparse.com/resources/js/papaparse.js"></script>
<input type="button" value="download CSV" onclick="downloadCSV()">

Для получения дополнительной информации см. Документацию от Папа unparse функция.

0 голосов
/ 11 сентября 2018

Вы пытаетесь разобрать массив массивов , который представляет собой просто данные без имен столбцов.

Чтобы использовать имена столбцов, вы можете использовать массив объектов версии. Перепиши свой final_array как:

$scope.final_array = [
    { question1: "A", question2: "A", question3: "mike" },
    { question1: "A B", question2: "B", question3: "dan" },
];

В качестве альтернативы вы можете разделить имена столбцов и данные в одном объекте следующим образом:

$scope.final_object = {
    fields: [ "question1", "question2", "question3" ],
    data: [
        [ "A", "A", "mike" ],
        [ "A B", "B", "dan", ],
    ],
};

Если вам нужно конвертировать $scope.final_array, может быть, вам поможет следующий фрагмент:

function convertFinal(arrOfArr) {
    return arrOfArr.map(function(arr) {
        var obj = {};
        for(var key in arr) {
            if(arr.hasOwnProperty(key)) {
                obj[key] = arr[key];
            }
        }
        return obj;
    });
}

var csv = Papa.unparse(convertFinal($scope.final_array));
...