JavaScript 배열 정보를 CSV로 내보내는 방법 (클라이언트 측)?
나는이 성격에 대한 많은 질문이 있다는 것을 알고 있지만 JavaScript를 사용 하여이 작업을 수행해야합니다. Dojo 1.8
배열에 모든 속성 정보를 사용 하고 있으며 다음과 같습니다.
[["name1", "city_name1", ...]["name2", "city_name2", ...]]
CSV
클라이언트 쪽에서 어떻게 내보낼 수 있습니까?
기본 JavaScript로이를 수행 할 수 있습니다. 질문에 설명 된대로 데이터 배열을 사용한다고 가정하면 데이터를 올바른 CSV 형식으로 구문 분석해야합니다.
const rows = [
["name1", "city1", "some other info"],
["name2", "city2", "more info"]
];
let csvContent = "data:text/csv;charset=utf-8,";
rows.forEach(function(rowArray) {
let row = rowArray.join(",");
csvContent += row + "\r\n";
});
또는 더 짧은 방법 ( 화살표 기능 사용 ) :
const rows = [
["name1", "city1", "some other info"],
["name2", "city2", "more info"]
];
let csvContent = "data:text/csv;charset=utf-8,"
+ rows.map(e => e.join(",")).join("\n");
그런 다음 JavaScript window.open
및 encodeURI
함수를 사용 하여 CSV 파일을 다음과 같이 다운로드 할 수 있습니다 .
var encodedUri = encodeURI(csvContent);
window.open(encodedUri);
편집하다:
파일에 특정 이름을 지정하려면window.open
메소드를 사용하여 데이터 URI에 액세스하는 것이 지원되지 않으므로 약간 다르게 수행해야합니다
. 이를 위해 숨겨진 <a>
DOM 노드를 작성하고 download
다음과 같이 속성을 설정할
수 있습니다
.
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "my_data.csv");
document.body.appendChild(link); // Required for FF
link.click(); // This will download the data file named "my_data.csv".
위의 답변을 기반으로 IE 11, Chrome 36 및 Firefox 29에서 테스트 한이 기능을 만들었습니다.
function exportToCsv(filename, rows) {
var processRow = function (row) {
var finalVal = '';
for (var j = 0; j < row.length; j++) {
var innerValue = row[j] === null ? '' : row[j].toString();
if (row[j] instanceof Date) {
innerValue = row[j].toLocaleString();
};
var result = innerValue.replace(/"/g, '""');
if (result.search(/("|,|\n)/g) >= 0)
result = '"' + result + '"';
if (j > 0)
finalVal += ',';
finalVal += result;
}
return finalVal + '\n';
};
var csvFile = '';
for (var i = 0; i < rows.length; i++) {
csvFile += processRow(rows[i]);
}
var blob = new Blob([csvFile], { type: 'text/csv;charset=utf-8;' });
if (navigator.msSaveBlob) { // IE 10+
navigator.msSaveBlob(blob, filename);
} else {
var link = document.createElement("a");
if (link.download !== undefined) { // feature detection
// Browsers that support HTML5 download attribute
var url = URL.createObjectURL(blob);
link.setAttribute("href", url);
link.setAttribute("download", filename);
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
}
예를 들면 다음과 같습니다. https://jsfiddle.net/jossef/m3rrLzk0/
이 솔루션은 Internet Explorer 10 이상, Edge, 이전 및 새 버전의 Chrome, FireFox, Safari, ++ 와 호환됩니다.
허용 된 답변은 IE 및 Safari에서 작동하지 않습니다.
// Example data given in question text
var data = [
['name1', 'city1', 'some other info'],
['name2', 'city2', 'more info']
];
// Building the CSV from the Data two-dimensional array
// Each column is separated by ";" and new line "\n" for next row
var csvContent = '';
data.forEach(function(infoArray, index) {
dataString = infoArray.join(';');
csvContent += index < data.length ? dataString + '\n' : dataString;
});
// The download function takes a CSV string, the filename and mimeType as parameters
// Scroll/look down at the bottom of this snippet to see how download is called
var download = function(content, fileName, mimeType) {
var a = document.createElement('a');
mimeType = mimeType || 'application/octet-stream';
if (navigator.msSaveBlob) { // IE10
navigator.msSaveBlob(new Blob([content], {
type: mimeType
}), fileName);
} else if (URL && 'download' in a) { //html5 A[download]
a.href = URL.createObjectURL(new Blob([content], {
type: mimeType
}));
a.setAttribute('download', fileName);
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
} else {
location.href = 'data:application/octet-stream,' + encodeURIComponent(content); // only this mime type is supported
}
}
download(csvContent, 'dowload.csv', 'text/csv;encoding:utf-8');
코드 스 니펫을 실행하면 모의 데이터가 csv로 다운로드됩니다.
dandavis의 크레딧 https://stackoverflow.com/a/16377813/1350598
나는 좀 더 RFC 4180 준수를 찾고 여기에 와서 구현을 찾지 못했습니다. 그래서 제 자신의 필요에 따라 비효율적입니다. 나는 그것을 모든 사람과 공유 할 것이라고 생각했다.
var content = [['1st title', '2nd title', '3rd title', 'another title'], ['a a a', 'bb\nb', 'cc,c', 'dd"d'], ['www', 'xxx', 'yyy', 'zzz']];
var finalVal = '';
for (var i = 0; i < content.length; i++) {
var value = content[i];
for (var j = 0; j < value.length; j++) {
var innerValue = value[j]===null?'':value[j].toString();
var result = innerValue.replace(/"/g, '""');
if (result.search(/("|,|\n)/g) >= 0)
result = '"' + result + '"';
if (j > 0)
finalVal += ',';
finalVal += result;
}
finalVal += '\n';
}
console.log(finalVal);
var download = document.getElementById('download');
download.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(finalVal));
download.setAttribute('download', 'test.csv');
희망적으로 이것은 미래에 누군가를 도울 것입니다. CSV 인코딩과 파일 다운로드 기능이 결합되어 있습니다. jsfiddle 에 대한 나의 예제에서 . HTML 5 브라우저를 가정하여 파일을 다운로드하거나 콘솔에서 출력을 볼 수 있습니다.
최신 정보:
Chrome에서 파일 이름을 지정할 수 없었습니다. 어떤 일이 발생했는지 또는 어떻게 해결해야할지 모르겠지만이 코드 (jsfiddle 포함)를 사용할 때마다 다운로드 된 파일의 이름이으로 변경되었습니다 download.csv
.
@Default의 솔루션은 Chrome에서 완벽하게 작동하지만 (고마워요!) IE에 문제가있었습니다.
솔루션은 다음과 같습니다 (IE10에서 작동).
var csvContent=data; //here we load our csv data
var blob = new Blob([csvContent],{
type: "text/csv;charset=utf-8;"
});
navigator.msSaveBlob(blob, "filename.csv")
Chrome 35 업데이트에서 다운로드 속성 동작이 변경되었습니다.
https://code.google.com/p/chromium/issues/detail?id=373182
크롬에서 이것을 사용하려면 이것을 사용하십시오.
var pom = document.createElement('a');
var csvContent=csv; //here we load our csv data
var blob = new Blob([csvContent],{type: 'text/csv;charset=utf-8;'});
var url = URL.createObjectURL(blob);
pom.href = url;
pom.setAttribute('download', 'foo.csv');
pom.click();
function convertToCsv(fName, rows) {
var csv = '';
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
for (var j = 0; j < row.length; j++) {
var val = row[j] === null ? '' : row[j].toString();
val = val.replace(/\t/gi, " ");
if (j > 0)
csv += '\t';
csv += val;
}
csv += '\n';
}
// for UTF-16
var cCode, bArr = [];
bArr.push(255, 254);
for (var i = 0; i < csv.length; ++i) {
cCode = csv.charCodeAt(i);
bArr.push(cCode & 0xff);
bArr.push(cCode / 256 >>> 0);
}
var blob = new Blob([new Uint8Array(bArr)], { type: 'text/csv;charset=UTF-16LE;' });
if (navigator.msSaveBlob) {
navigator.msSaveBlob(blob, fName);
} else {
var link = document.createElement("a");
if (link.download !== undefined) {
var url = window.URL.createObjectURL(blob);
link.setAttribute("href", url);
link.setAttribute("download", fName);
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
window.URL.revokeObjectURL(url);
}
}
}
convertToCsv('download.csv', [
['Order', 'Language'],
['1', 'English'],
['2', 'Español'],
['3', 'Français'],
['4', 'Português'],
['5', 'čeština'],
['6', 'Slovenščina'],
['7', 'Tiếng Việt'],
['8', 'Türkçe'],
['9', 'Norsk bokmål'],
['10', 'Ελληνικά'],
['11', 'беларускі'],
['12', 'русский'],
['13', 'Українська'],
['14', 'հայերեն'],
['15', 'עִברִית'],
['16', 'اردو'],
['17', 'नेपाली'],
['18', 'हिंदी'],
['19', 'ไทย'],
['20', 'ქართული'],
['21', '中国'],
['22', '한국어'],
['23', '日本語'],
])
당신은 간다 :
<!doctype html>
<html>
<head></head>
<body>
<a href='#' onclick='downloadCSV({ filename: "stock-data.csv" });'>Download CSV</a>
<script type="text/javascript">
var stockData = [
{
Symbol: "AAPL",
Company: "Apple Inc.",
Price: "132.54"
},
{
Symbol: "INTC",
Company: "Intel Corporation",
Price: "33.45"
},
{
Symbol: "GOOG",
Company: "Google Inc",
Price: "554.52"
},
];
function convertArrayOfObjectsToCSV(args) {
var result, ctr, keys, columnDelimiter, lineDelimiter, data;
data = args.data || null;
if (data == null || !data.length) {
return null;
}
columnDelimiter = args.columnDelimiter || ',';
lineDelimiter = args.lineDelimiter || '\n';
keys = Object.keys(data[0]);
result = '';
result += keys.join(columnDelimiter);
result += lineDelimiter;
data.forEach(function(item) {
ctr = 0;
keys.forEach(function(key) {
if (ctr > 0) result += columnDelimiter;
result += item[key];
ctr++;
});
result += lineDelimiter;
});
return result;
}
window.downloadCSV = function(args) {
var data, filename, link;
var csv = convertArrayOfObjectsToCSV({
data: stockData
});
if (csv == null) return;
filename = args.filename || 'export.csv';
if (!csv.match(/^data:text\/csv/i)) {
csv = 'data:text/csv;charset=utf-8,' + csv;
}
data = encodeURI(csv);
link = document.createElement('a');
link.setAttribute('href', data);
link.setAttribute('download', filename);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
</script>
</body>
</html>
//It work in Chrome and IE ... I reviewed and readed a lot of answer. then i used it and tested in both ...
var link = document.createElement("a");
if (link.download !== undefined) { // feature detection
// Browsers that support HTML5 download attribute
var blob = new Blob([CSV], { type: 'text/csv;charset=utf-8;' });
var url = URL.createObjectURL(blob);
link.setAttribute("href", url);
link.setAttribute("download", fileName);
link.style = "visibility:hidden";
}
if (navigator.msSaveBlob) { // IE 10+
link.addEventListener("click", function (event) {
var blob = new Blob([CSV], {
"type": "text/csv;charset=utf-8;"
});
navigator.msSaveBlob(blob, fileName);
}, false);
}
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
//Regards
csv 데이터로 블롭 만들기 var blob = new Blob([data], type:"text/csv");
브라우저가 blob 저장을 지원하는 경우, 즉 if window.navigator.mSaveOrOpenBlob)===true
다음을 사용하여 csv 데이터를 저장하십시오.window.navigator.msSaveBlob(blob, 'filename.csv')
브라우저가 블롭 저장 및 열기를 지원하지 않는 경우 csv 데이터를 다음과 같이 저장하십시오.
var downloadLink = document.createElement('<a></a>');
downloadLink.attr('href', window.URL.createObjectURL(blob));
downloadLink.attr('download', filename);
downloadLink.attr('target', '_blank');
document.body.append(downloadLink);
전체 코드 스 니펫 :
var filename = 'data_'+(new Date()).getTime()+'.csv';
var charset = "utf-8";
var blob = new Blob([data], {
type: "text/csv;charset="+ charset + ";"
});
if (window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveBlob(blob, filename);
} else {
var downloadLink = document.element('<a></a>');
downloadLink.attr('href', window.URL.createObjectURL(blob));
downloadLink.attr('download', filename);
downloadLink.attr('target', '_blank');
document.body.append(downloadLink);
downloadLink[0].click();
}
여기에 데이터를 CSV로 변환하기위한 많은 롤-온-솔루션이 있지만, 거의 모든 데이터는 Excel 등을 트립하지 않고 정확하게 형식을 지정할 데이터 유형 측면에서 다양한 경고가 있습니다.
입증 된 것을 사용하지 않는 이유 : Papa Parse
Papa.unparse(data[, config])
그런 다음 여기에 로컬 다운로드 솔루션 중 하나와 결합하십시오. @ArneHB의 것이 좋습니다.
아래 코드를 사용하여 Javascript를 사용하여 배열을 CSV 파일로 내보낼 수 있습니다.
특수 문자 부분도 처리합니다.
var arrayContent = [["Séjour 1, é,í,ú,ü,ű"],["Séjour 2, é,í,ú,ü,ű"]];
var csvContent = arrayContent.join("\n");
var link = window.document.createElement("a");
link.setAttribute("href", "data:text/csv;charset=utf-8,%EF%BB%BF" + encodeURI(csvContent));
link.setAttribute("download", "upload_data.csv");
link.click();
다음 은 작동하는 jsfiddle에 대한 링크입니다
여기에 두 가지 질문이 있습니다.
- 배열을 CSV 문자열로 변환하는 방법
- 해당 문자열을 파일에 저장하는 방법
여기에서 첫 번째 질문에 대한 모든 답변 (Milimetric의 답변 제외)은 과도하게 보입니다. 그리고 Milimetric에 의한 것은 따옴표로 묶는 문자열이나 객체 배열 변환과 같은 대체 요구 사항을 다루지 않습니다.
여기에 내 취향이 있습니다.
간단한 csv의 경우 map () 및 join ()으로 충분합니다.
var test_array = [["name1", 2, 3], ["name2", 4, 5], ["name3", 6, 7], ["name4", 8, 9], ["name5", 10, 11]];
var csv = test_array.map(function(d){
return d.join();
}).join('\n');
/* Results in
name1,2,3
name2,4,5
name3,6,7
name4,8,9
name5,10,11
이 방법을 사용하면 내부 조인에서 쉼표 이외의 열 구분 기호를 지정할 수도 있습니다. 예를 들어 탭 :d.join('\t')
반면에 올바르게하고 따옴표 ""로 문자열을 묶으려면 JSON 마법을 사용할 수 있습니다.
var csv = test_array.map(function(d){
return JSON.stringify(d);
})
.join('\n')
.replace(/(^\[)|(\]$)/mg, ''); // remove opening [ and closing ]
// brackets from each line
/* would produce
"name1",2,3
"name2",4,5
"name3",6,7
"name4",8,9
"name5",10,11
다음과 같은 객체 배열이있는 경우 :
var data = [
{"title": "Book title 1", "author": "Name1 Surname1"},
{"title": "Book title 2", "author": "Name2 Surname2"},
{"title": "Book title 3", "author": "Name3 Surname3"},
{"title": "Book title 4", "author": "Name4 Surname4"}
];
// use
var csv = data.map(function(d){
return JSON.stringify(Object.values(d));
})
.join('\n')
.replace(/(^\[)|(\]$)/mg, '');
ES6에서 하나의 화살표 기능 :
const dataToCsvURI = (data) => encodeURI(
`data:text/csv;charset=utf-8,${data.map((row, index) => row.join(',')).join(`\n`)}`
);
그런 다음 :
window.open(
dataToCsvURI(
[["name1", "city_name1"/*, ...*/], ["name2", "city_name2"/*, ...*/]]
)
);
경우에는 사람이 필요 reactjs , react-csv
그것을 위해가
사람들은 특수 문자와 같은 가장자리 경우에 실패하는 자체 csv 문자열을 만들려고 노력하고 있습니다. 확실히 해결 된 문제입니까?
papaparse -JSON에서 CSV로 인코딩하는 데 사용합니다. Papa.unparse()
.
import Papa from "papaparse";
const downloadCSV = (args) => {
let filename = args.filename || 'export.csv';
let columns = args.columns || null;
let csv = Papa.unparse({ data: args.data, fields: columns})
if (csv == null) return;
var blob = new Blob([csv]);
if (window.navigator.msSaveOrOpenBlob) // IE hack; see http://msdn.microsoft.com/en-us/library/ie/hh779016.aspx
window.navigator.msSaveBlob(blob, args.filename);
else
{
var a = window.document.createElement("a");
a.href = window.URL.createObjectURL(blob, {type: "text/plain"});
a.download = filename;
document.body.appendChild(a);
a.click(); // IE: "Access is denied"; see: https://connect.microsoft.com/IE/feedback/details/797361/ie-10-treats-blob-url-as-cross-origin-and-denies-access
document.body.removeChild(a);
}
}
사용법 예
downloadCSV({
filename: 'filename.csv',
data: [{'a': '1', 'b': 2'}],
columns: ['a','b']
});
https://github.com/mholt/PapaParse/issues/175- 브라우저 지원 토론에 대해서는이 주석을 참조하십시오.
Java GWT 애플리케이션의 클라이언트 측에서 CSV 파일을 다운로드하는 방법은 다음과 같습니다. 그의 솔루션에 대해 Xavier John에게 감사드립니다. FF 24.6.0, IE 11.0.20 및 Chrome 45.0.2454.99 (64 비트)에서 작동하는 것으로 확인되었습니다. 나는 이것이 약간의 시간을 절약하기를 바랍니다.
public class ExportFile
{
private static final String CRLF = "\r\n";
public static void exportAsCsv(String filename, List<List<String>> data)
{
StringBuilder sb = new StringBuilder();
for(List<String> row : data)
{
for(int i=0; i<row.size(); i++)
{
if(i>0) sb.append(",");
sb.append(row.get(i));
}
sb.append(CRLF);
}
generateCsv(filename, sb.toString());
}
private static native void generateCsv(String filename, String text)
/*-{
var blob = new Blob([text], { type: 'text/csv;charset=utf-8;' });
if (navigator.msSaveBlob) // IE 10+
{
navigator.msSaveBlob(blob, filename);
}
else
{
var link = document.createElement("a");
if (link.download !== undefined) // feature detection
{
// Browsers that support HTML5 download attribute
var url = URL.createObjectURL(blob);
link.setAttribute("href", url);
link.setAttribute("download", filename);
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
}-*/;
}
다음은 각도 친화적 인 버전입니다.
constructor(private location: Location, private renderer: Renderer2) {}
download(content, fileName, mimeType) {
const a = this.renderer.createElement('a');
mimeType = mimeType || 'application/octet-stream';
if (navigator.msSaveBlob) {
navigator.msSaveBlob(new Blob([content], {
type: mimeType
}), fileName);
}
else if (URL && 'download' in a) {
const id = GetUniqueID();
this.renderer.setAttribute(a, 'id', id);
this.renderer.setAttribute(a, 'href', URL.createObjectURL(new Blob([content], {
type: mimeType
})));
this.renderer.setAttribute(a, 'download', fileName);
this.renderer.appendChild(document.body, a);
const anchor = this.renderer.selectRootElement(`#${id}`);
anchor.click();
this.renderer.removeChild(document.body, a);
}
else {
this.location.go(`data:application/octet-stream,${encodeURIComponent(content)}`);
}
};
위의 답변은 효과가 있지만 .xls 형식으로 열면 ~ ~ ~ ~ '\t'
대신 열로 분리 ','
하면 https://stackoverflow.com/a/14966131/6169225 열이 잘 작동합니다. 나를 .join('\t')
대신하여 배열 대신 사용 했습니다 .join(',')
.
누구나 녹아웃 js에 이것을 필요로하는 경우 기본적으로 제안 된 솔루션으로 정상적으로 작동합니다.
html :
<a data-bind="attr: {download: filename, href: csvContent}">Download</a>
모델보기 :
// for the download link
this.filename = ko.computed(function () {
return ko.unwrap(this.id) + '.csv';
}, this);
this.csvContent = ko.computed(function () {
if (!this.csvLink) {
var data = ko.unwrap(this.data),
ret = 'data:text/csv;charset=utf-8,';
ret += data.map(function (row) {
return row.join(',');
}).join('\n');
return encodeURI(ret);
}
}, this);
필자는 필요한 경우 필드 헤더를 포함하기 위해 Xavier Johns 함수에 추가했지만 jQuery를 사용합니다. $ .each 비트는 기본 자바 스크립트 루프를 변경해야합니다.
function exportToCsv(filename, rows, headers = false) {
var processRow = function (row) {
row = $.map(row, function(value, index) {
return [value];
});
var finalVal = '';
for (var j = 0; j < row.length; j++) {
if(i == 0 && j == 0 && headers == true){
var ii = 0;
$.each(rows[i], function( index, value ) {
//console.log(index);
var fieldName = index === null ? '' : index.toString();
//console.log(fieldName);
var fieldResult = fieldName.replace(/"/g, '""');
//console.log(fieldResult);
if (fieldResult.search(/("|,|\n)/g) >= 0){
fieldResult = '"' + fieldResult + '"';
}
//console.log(fieldResult);
if (ii > 0){
finalVal += ',';
finalVal += fieldResult;
}else{
finalVal += fieldResult;
}
ii++;
//console.log(finalVal);
});
finalVal += '\n';
//console.log('end: '+finalVal);
}
var innerValue = row[j] === null ? '' : row[j].toString();
if (row[j] instanceof Date) {
innerValue = row[j].toLocaleString();
};
var result = innerValue.replace(/"/g, '""');
if (result.search(/("|,|\n)/g) >= 0){
result = '"' + result + '"';
}
if (j > 0){
finalVal += ',';
finalVal += result;
}else{
finalVal += result;
}
}
return finalVal + '\n';
};
var csvFile = '';
for (var i = 0; i < rows.length; i++) {
csvFile += processRow(rows[i]);
}
var blob = new Blob([csvFile], { type: 'text/csv;charset=utf-8;' });
if (navigator.msSaveBlob) { // IE 10+
navigator.msSaveBlob(blob, filename);
}else{
var link = document.createElement("a");
if (link.download !== undefined) { // feature detection
// Browsers that support HTML5 download attribute
var url = URL.createObjectURL(blob);
link.setAttribute("href", url);
link.setAttribute("download", filename);
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
}
이것은 JSON에서 데이터를 가져 오는 허용 된 답변을 기반으로 수정 된 답변입니다.
JSON Data Ouptut:
0 :{emails: "SAMPLE Co., peter@samplecompany.com"}, 1:{emails: "Another CO. , ronald@another.com"}
JS:
$.getJSON('yourlink_goes_here', { if_you_have_parameters}, function(data) {
var csvContent = "data:text/csv;charset=utf-8,";
var dataString = '';
$.each(data, function(k, v) {
dataString += v.emails + "\n";
});
csvContent += dataString;
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "your_filename.csv");
document.body.appendChild(link); // Required for FF
link.click();
});
이 함수를 사용하여 string[][]
를 CSV 파일 로 변환 합니다. 셀에 "
, a ,
또는 다른 공백 이 포함 된 경우 셀을 인용합니다 (공백 제외).
/**
* Takes an array of arrays and returns a `,` sparated csv file.
* @param {string[][]} table
* @returns {string}
*/
function toCSV(table) {
return table
.map(function(row) {
return row
.map(function(cell) {
// We remove blanks and check if the column contains
// other whitespace,`,` or `"`.
// In that case, we need to quote the column.
if (cell.replace(/ /g, '').match(/[\s,"]/)) {
return '"' + cell.replace(/"/g, '""') + '"';
}
return cell;
})
.join(',');
})
.join('\n'); // or '\r\n' for windows
}
참고 : map
폴리 필이 아닌 경우 Internet Explorer <11에서는 작동하지 않습니다 .
참고 : 셀에 숫자가 포함되어 있으면 숫자를 문자열로 변환 cell=''+cell
하기 전에 추가 할 수 있습니다 if (cell.replace...
.
또는 ES6을 사용하여 한 줄로 작성할 수 있습니다.
t.map(r=>r.map(c=>c.replace(/ /g, '').match(/[\s,"]/)?'"'+c.replace(/"/g,'""')+'"':c).join(',')).join('\n')
PapaParse와 같은 라이브러리를 사용하는 것이 좋습니다 : https://github.com/mholt/PapaParse
허용 된 답변에는 현재 다음을 포함한 여러 문제가 있습니다.
- 데이터에 쉼표가 포함되어 있으면 실패
- 데이터에 줄 바꿈이 포함되어 있으면 실패
- 데이터에 인용 부호가 있으면 실패 (종류)
간단히 시도해보십시오. 여기서 일부 답변은 유니 코드 데이터와 날짜와 같은 쉼표가있는 데이터를 처리하지 않습니다.
function downloadUnicodeCSV(filename, datasource) {
var content = '', newLine = '\r\n';
for (var _i = 0, datasource_1 = datasource; _i < datasource_1.length; _i++) {
var line = datasource_1[_i];
var i = 0;
for (var _a = 0, line_1 = line; _a < line_1.length; _a++) {
var item = line_1[_a];
var it = item.replace(/"/g, '""');
if (it.search(/("|,|\n)/g) >= 0) {
it = '"' + it + '"';
}
content += (i > 0 ? ',' : '') + it;
++i;
}
content += newLine;
}
var link = document.createElement('a');
link.setAttribute('href', 'data:text/csv;charset=utf-8,%EF%BB%BF' + encodeURIComponent(content));
link.setAttribute('download', filename);
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
};
'development' 카테고리의 다른 글
heroku-모든 로그를 보는 방법 (0) | 2020.02.16 |
---|---|
비트 맵을 위치에 저장 (0) | 2020.02.16 |
페이지의 관련 구성 데이터가 유효하지 않으므로 요청한 페이지에 액세스 할 수 없습니다. (0) | 2020.02.16 |
Swift에서 UIAlertView를 어떻게 만들 수 있습니까? (0) | 2020.02.16 |
git cherry-pick은“… 38c74d는 병합되었지만 -m 옵션은 제공되지 않았습니다”라고 말합니다. (0) | 2020.02.16 |