Экспорт двумерного массива в CSV, данные не отображаются в CSV, Javascript - PullRequest
0 голосов
/ 13 июля 2020

Файл csv загружается правильно, но в нем ничего нет. Я хочу, чтобы перед экспортом каждая новая запись располагалась в отдельной строке. Не знаю, почему данные не регистрируются в CSV, я не получаю никаких ошибок. Спасибо за любую помощь. Это для расширения chrome.

var items = []
var rows = []

function myFunction() {
    items.push(document.getElementById('itemid').value);
    items.push(document.getElementById('itemid1').value);
    items.push(document.getElementById('itemid2').value);
    items.push(document.getElementById('itemid3').value);
    console.log(items);
    const arrayToMatrix = (array, columns) => Array(Math.ceil(array.length / columns)).fill('').reduce((acc, cur, index) => {
        return [...acc, [...array].splice(index * columns, columns)]
    }, []);
    const result = arrayToMatrix(items, 4);
    var rows = result;
    console.log(rows);}

document.getElementById('my-Function').onclick = myFunction;

function exportData() {
    let csvContent = "data:text/csv;charset=utf-8,";

    rows.forEach(function(rowArray) {
        let row = rowArray.join(",");
        csvContent += dataString + "\n";
    });
    var encodedUri = encodeURI(csvContent);
    var link = document.createElement("a");
    link.setAttribute("href", encodedUri);
    link.setAttribute("download", "my_data.csv");
    document.body.appendChild(link);
    link.click();}

document.getElementById('export-Data').onclick = exportData;



Array after user input:

Array(4)
0: (4) ["ROW1", "ROW1", "ROW1", "ROW1"]
1: (4) ["ROW2", "ROW2", "ROW2", "ROW2"]
2: (4) ["ROW3", "ROW3", "ROW3", "ROW3"]
3: (4) ["ROW4", "ROW4", "ROW4", "ROW4"]

Я пробовал все разные ответы в соответствующем сообщении ниже, но, похоже, никто не регистрирует мои данные в csv:

JavaScript массив в CSV

function exportData() {
    rows.forEach(function (infoArray, index) {
        var row = infoArray.join(",");
        rows.push(index == 0 ? "data:text/csv;charset=utf-8," + line : line);
    });
    var csvContent = rows.join("\n");
    var encodedUri = encodeURI(csvContent); ....

этот по какой-то причине экспортирует мой html (всплывающее окно. html) в CSV

и

Как экспортировать информацию о массиве JavaScript в csv (на стороне клиента)?

function exportData() {
    var csvContent = '';
    rows.forEach(function(infoArray, index) {
        dataString = infoArray.join(';');
        csvContent += index < rows.length ? dataString + '\n' : dataString;
    });
    var encodedUri = encodeURI(csvContent);
});

этот экспортирует мой html (всплывающее окно. html) в csv по какой-то причине также

Я также попробовал все другие возможные ответы на эти вопросы выше. Я ценю любую помощь! Спасибо !!

1 Ответ

0 голосов
/ 23 июля 2020

Это сработало для меня в конечном итоге.

'use strict';

var items = []
var rows = []
var cols = []

function myFunction() {
    items.push(document.getElementById('itemid').value);
    items.push(document.getElementById('itemid1').value);
    items.push(document.getElementById('itemid2').value);
    items.push(document.getElementById('itemid3').value);
    console.log(items);
    const arrayToMatrix = (array, columns) => Array(Math.ceil(array.length / columns)).fill('').reduce((acc, cur, index) => {
        return [...acc, [...array].splice(index * columns, columns)]
    }, []);
    const result = arrayToMatrix(items, 7);
    rows = result;
    console.log(rows);}

document.getElementById('my-Function').onclick = myFunction;

function exportData() {
    cols.push(rows);
    console.log(cols);
    let csvContent = "data:text/csv;charset=utf-8," 
        + rows.map(e => e.join(",")).join("\n");

    var encodedUri = encodeURI(csvContent);
    var link = document.createElement("a");
    link.setAttribute("href", encodedUri);
    link.setAttribute("download", "my_data.csv");
    document.body.appendChild(link);
    link.click();}

document.getElementById('export-Data').onclick = exportData;

...