JavaScript 如何创建和下载CSV文件
JavaScript具有处理各种数据并使用不同格式的文件处理它们的强大能力。有时,在使用JavaScript开发Web应用程序时,开发人员需要处理CSV文件中的数据。
例如,我们正在构建一个电子商务平台,用户可以购买和销售产品。此外,我们希望允许用户根据时间跨度下载他们的订单详细信息到CSV文件中。在这种情况下,我们需要与数据和CSV文件进行交互。另一个例子是在线银行网站允许我们将交易详细信息下载为CSV文件。
在本教程中,我们将学习如何从JavaScript或JSON对象格式的给定数据中创建csv文件并下载文件。
语法
用户可以按照以下语法从给定数据中创建和下载CSV文件。
laptops.forEach(function (row) {
csvData += data
});
let anchor = document.createElement('a');
anchor.href = 'data:text/csv;charset=utf-8,' + encodeURI(csvData);
anchor.click();
在上面的语法中,’csvData’是一个数组,它使用数据附加了CSV文件的行。然后,我们使用锚点标签从csvData创建CSV文件,并通过点击锚点元素下载文件。
示例
在下面的示例中,我们首先创建了一个名为’laptops’的对象数组,其中数组的每个对象包含品牌、处理器、价格和内存属性。
在downloadFile()函数中,我们将对象的键用逗号分隔添加到’csvData’变量中。然后,我们遍历给定的对象数组,并通过将逗号作为分隔符连接每个属性值以相同的顺序并将其附加到’CSVData’变量中,以准备一个单独的行。
接下来,我们使用createElement()方法创建锚点元素,并使用encodeURI()方法对’csvData’进行编码后将其作为href属性的值添加。同时,我们设置target和download属性的值。最后,我们点击锚点元素下载CSV文件。
在输出中,用户可以点击按钮将数据下载到CSV文件中。
<html>
<body>
<h3>Creating and dowlonading the CSV file from the given data in JavaScript</h3>
<div id="data"> </div>
<button onclick="downloadFile()"> Download CSV file </button>
<script>
let laptops = [{
brand: 'HP',
processor: 'i3',
price: 30000,
ram: 4
},
{
brand: 'Dell',
processor: 'i5',
price: 50000,
ram: 8
},
{
brand: 'Apple',
processor: 'i7',
price: 70000,
ram: 16
},
{
brand: 'Lenovo',
processor: 'i3',
price: 35000,
ram: 4
},
{
brand: 'Asus',
processor: 'i5',
price: 45000,
ram: 8
},
{
brand: 'Acer',
processor: 'i7',
price: 65000,
ram: 16
}
];
// Function to download data to a CSV file
function downloadFile() {
// Add header
let csvData = 'Brand, Processor, Price, RAM
';
// Add data
laptops.forEach(function (row) {
csvData += row.brand + ',' + row.processor + ',' + row.price + ',' + row.ram + '
';
});
// Download the CSV file
let anchor = document.createElement('a');
anchor.href = 'data:text/csv;charset=utf-8,' + encodeURI(csvData);
anchor.target = '_blank';
anchor.download = 'laptops.csv';
anchor.click();
}
</script>
</body>
</html>
示例
在下面的示例中,我们将从API获取数据,并使用JSON数据创建一个CSV文件。我们在HTML部分创建了一个按钮,当用户点击按钮时,它将执行downloadFile()函数来获取JSON数据并将其下载到CSV文件中。
程序员可以按照以下步骤了解示例代码−
步骤1 − 使用fetch()API从API URL获取数据。
步骤2 − 然后使用res.json()方法将响应转换为JSON对象。
步骤3 − 在then()块中,初始化csvData []数组以存储CSV文件的行。
步骤4 − 从响应中获取第一个对象,并将其作为Object.keys()方法的参数传递,以获取数组中的所有键。然后,使用join()方法将键连接成一个由逗号分隔的字符串,并将其推送到csvData数组中。
步骤5 − 遍历我们在响应中获得的所有对象。在循环中,我们使用map()方法与“heads”数组一起,根据“heads”数组元素(对象键)从当前对象中获取值,并将值映射到“rowValues”数组中。
步骤6 − 接下来,使用join()方法连接“rowValues”数组的所有元素,并将它们推送到“csvData”数组中。
步骤7 − 使用“
”分隔符连接“csvData”数组的所有元素,并将其作为getCSVFile()函数参数传递。
步骤8 − 在getCSVFile()函数中,创建anchor元素的新实例。然后,在编码后将csvData设置为“href”属性值,并设置“target”和“download”属性值。
步骤9 − 单击anchor元素下载文件。
<html>
<body>
<h3>Creating and dowlonading the CSV file </i> after fetching JSON data in JavaScript</h3>
<div id = "data"> </div>
<button onclick = "downloadFile()"> Download CSV file </button>
<script>
function downloadFile() {
let APIURL = "https://dummyjson.com/products";
// Fetch data from API
fetch(APIURL)
.then(response => response.json())
.then(data => {
let csvData = [];
// Get headers
let heads = Object.keys(data.products[0]);
// Add headers to csvData
csvData.push(heads.join(','));
// Traveres through each row
for (let row of data.products) {
// Get values from each row
let rowValues = heads.map(headerData => {
// Get value according to the header
let final = ('' + row[headerData]).replace(/"/g, '"');
return `"${final}"`;
});
// Push values in csvData
csvData.push(rowValues.join(','));
}
// Call function to download CSV file
getCSVFile(csvData.join('
'));
});
}
function getCSVFile(csvData) {
let anchor = document.createElement('a');
anchor.href = 'data:text/csv;charset=utf-8,' + encodeURI(csvData);
anchor.target = '_blank';
anchor.download = 'test.csv';
anchor.click();
}
</script>
</body>
</html>
两个示例代码都包含两个主要部分。第一部分是处理给定数据并将它们与逗号分隔的字符串连接起来,我们将其用于CSV文件数据。下一部分是将数据附加到文件并下载该文件。为了创建CSV文件,我们使用锚元素的虚拟实例。