- 用npm在项目中安装下面插件:
npm install file-saver --save
- 在你要编写项目的文件中导入插件:
import FileSaver from 'file-saver'
- 写一个方法逻辑将数据生成csv文件:
exportList = ()=>{
const {data}=this.state
let str=''
str +=`deptOne,userName,userId,quarter,objective,keyResult`
for (const i in data) {
str += `\n ${data[i].deptOne},${data[i].userName},${data[i].userId},${data[i].quarter},${data[i].objective},${data[i].keyResult}`
}
const exportContent = "\uFEFF";
const blob = new Blob([exportContent + str], {
type: "text/plain;charset=utf-8"
});
FileSaver.saveAs(blob, "OKR员工数据.csv");
}
return (
<div>
<Button type='primary'
style={{position:'absolute',right:'120px',top:'10px'}}
onClick={()=>{
this.exportList()
}}
>导出员工数据</Button>
</div>
)
- 遇到问题:
拿到的数据中有些内容是包含‘\n’的,这会导致下载的csv中内容错乱,因为生成文件过程中遇到‘\n’就表格换行了,所以可以采用replace(/[\r\n]/g, "")
的方式去掉内容中的回车换行符。例如:
ajaxgetAllObjectiveInfo = async data => {
const response = await queryOkrgetAllObjectiveInfo(data)
if (response.code === '0') {
const arr = []
response.data.forEach(item => {
let str =''
item.krList.forEach(i => {
str += `[${i.weight}]${i.keyResult}`
})
arr.push({
deptOne:item.deptOne,
userName:item.userName,
userId:item.userId,
quarter:item.quarter,
objective:item.objective,
keyResult:str.replace(/[\r\n]/g, ""),
})
});
this.setState({
data:arr
})
}
}