多次元配列からBOM付きUTF-8で出力
export const downloadCSV = (rows, fileName = 'download') => {
const bom = new Uint8Array([0xEF, 0xBB, 0xBF])
const blob = new Blob([ bom, rows.join('\r\n') ], { type : 'text/csv' })
const element = document.createElement('a')
const objectUrl = window.URL.createObjectURL(blob)
element.href = objectUrl
element.setAttribute('download', fileName);
document.body.appendChild(element)
element.click()
window.URL.revokeObjectURL(objectUrl)
document.body.removeChild(element)
}
利用例
downloadCSV([[11, 12, 13], [21, 22, 23]], 'csvTest')
APIから受け取ったCSVデータを出力
export const downloadCSV = (csv, fileName = 'download') => {
const blob = new Blob([csv], { type : 'text/csv' })
const element = document.createElement('a')
const objectUrl = window.URL.createObjectURL(blob)
element.href = objectUrl
element.setAttribute('download', fileName);
document.body.appendChild(element)
element.click()
window.URL.revokeObjectURL(objectUrl)
document.body.removeChild(element)
}
利用例
axios.get('/get/csv', { responseType: 'blob' })
.then(resp => {
downloadCSV(resp.data, 'csvTest')
})
※ responseType: 'blob'
を指定しない場合、文字コードが SHIFT-JIS
などのデータの時に文字化けする。