Excle.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. export const Excle = (thName: any, jsonData: any, fillName: string, filter?: any[], num?: any) => {
  2. //thName表头的名称,jsonData:数据,fillName下载后的文件命名,filter排除的数据,num统计数据
  3. //num = { thName: { 'total_num': '群下单数', 'realprice': '客单价', 'total_commission': '群佣金收入' }, jsonData: [...Xdata.total] }
  4. //列标题,逗号隔开,每一个逗号就是隔开一个单元格
  5. let str: any = '';
  6. // Object.keys(jsonData[0]).forEach((a: any) => {
  7. // if (filter && thName[a]) {
  8. // str += `${thName[a]},`;
  9. // }
  10. // if(!filter){
  11. // str += `${thName[a]},`;
  12. // }
  13. // })
  14. Object.keys(thName).forEach((a: any) => {
  15. if (filter && a) {
  16. if (!filter.includes(thName[a])) {
  17. str += `${thName[a]},`;
  18. }
  19. }
  20. if (!filter) {
  21. str += `${thName[a]},`;
  22. }
  23. })
  24. str += `\n`
  25. //增加\t为了不让表格显示科学计数法或者其他格式
  26. for (let i = 0; i < jsonData.length; i++) {
  27. for (let item in thName) {
  28. if (filter && filter.every((a: string) => { return a != thName[item] })) {
  29. let s = Array.isArray(jsonData[i][item]) ? jsonData[i][item].join('|') : jsonData[i][item]
  30. str += `${s + '\t'},`;
  31. }
  32. if (!filter) {
  33. str += `${jsonData[i][item] + '\t'},`;
  34. }
  35. }
  36. str += '\n';
  37. }
  38. if (num) {
  39. Object.keys(num.thName).forEach((a: any) => {
  40. if (filter && a) {
  41. str += `${num.thName[a]},`;
  42. }
  43. if (!filter) {
  44. str += `${num.thName[a]},`;
  45. }
  46. })
  47. str += `\n`
  48. for (let i = 0; i < num.jsonData.length; i++) {
  49. for (let item in num.thName) {
  50. if (filter && filter.every((a: any) => { return a != item })) {
  51. str += `${num.jsonData[i][item] + '\t'},`;
  52. }
  53. if (!filter) {
  54. str += `${num.jsonData[i][item] + '\t'},`;
  55. }
  56. }
  57. str += '\n';
  58. }
  59. }
  60. // encodeURIComponent解决中文乱码
  61. let uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);
  62. //通过创建a标签实现
  63. let link = document.createElement("a");
  64. link.href = uri;
  65. //对下载的文件命名
  66. link.download = `${fillName}.csv`;
  67. document.body.appendChild(link);
  68. link.click();
  69. document.body.removeChild(link);
  70. }