【发布时间】:2021-07-30 08:33:15
【问题描述】:
我正在使用 Javascript 编写一个程序,该程序可以将数据提取到 csv 文件中。到目前为止,我所做的是创建一个空白文本区域,我们可以在其中粘贴文本,然后程序查找目标公共值并将结果打印到 csv 文件中。更具体地说,这些值对应于产品的特征,我还针对粘贴文本中建立的每个特征的下一个值,以提取特征及其结果。我的目标是通过简单的复制/粘贴将功能产品的所有详细信息放入 csv 文件中,而不是每次都编写。
这是我的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<textarea id="toConvert" name="" id="" cols="30" rows="10"></textarea>
<br>
<button id="submit">Dowload CSV</button>
<script>
let textArea = document.getElementById('toConvert');
let btn = document.getElementById('submit');
btn.addEventListener('click', function(e){
e.preventDefault();
let stack = [];
// features product
var features = [
"Matière",
"Hauteur",
"Longueur",
"Diamètre",
"Profondeur",
"Poids",
"Couleur"
]
textArea.select();
document.execCommand("copy");
let result = textArea.value;
let isFounded = features.filter( item => result.includes(item) );
let values = result.split(' ');
for(let i = 0; i < values.length; i++){
for(let j=0; j < isFounded.length; j++){
if(values[i] === isFounded[j]){
let rows = [
[isFounded[j], values[i+1]]
];
rows.forEach(function(rowArray){
let row = rowArray.join(',');
stack.push(row);
});
var csvString = stack.join("\r\n");
var universalBOM = "\uFEFF";
var a = document.createElement('a');
a.setAttribute('href', 'data:text/csv; charset=utf-8,' + encodeURIComponent(universalBOM+csvString));
a.target = '_blank';
a.download = 'ficheProduit.csv';
document.body.appendChild(a);
a.click();
}
}
}
}, { once: true });
</script>
</body>
</html>
我遇到的问题如下:
- 该程序仅在粘贴的文本看起来像“Matière Métal Poids 300 Dimensions 500”并且单词之间没有换行符时才有效。我一直在寻找一个正则表达式来替换特殊字符,但我在我的程序中找不到如何做到这一点。
- 我只是成功地用“,”将功能与其结果分开,它给了我这个:
Matière, Métal
Poids,300
但是我怎样才能在 csv 文件中创建包含两列而不是只有一列的行。 我期望这个输出:
Matière | Métal
Poids | 300 ..
我很想得到一些帮助,提前谢谢你!!!
【问题讨论】:
标签: javascript arrays regex loops export-to-csv