前端将文本文件转换格式(xlsx,tsv,csv,fa,fasta等)
注意:这里需要转换的文本 有指定格式(大家可以根据具体情况具体转换,方法一样的): tab分隔(\t) 以及换行(\n)
转换需要的依赖库
import { saveAs } from 'file-saver';
import xlsx from 'node-xlsx';
转换方法
/**
* 下载txt fasta fa等文本文件
* @param text 文本内容
* @param fileName 文件名
*/
const saveTextAsFile = (text: any, filename: string) => {
const blob = new Blob([text], { type: 'text/plain' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
};
const downTable = () => {
let path = VITE_APP_URL + `outputs/${tableConfig.taskId}/sample_results.txt`;
fetch(path).then((res: any) => {
res.text().then((data: any) => {
console.log(data);
// txt下载 因为同属文本格式,无需转换
saveTextAsFile(data, '多样本表格.txt');
// tsv下载 因为同属文本格式,无需转换
saveTextAsFile(data, '多样本表格.tsv');
// csv下载 将\t 替换为 ,
let result = data.replace(/\t/g, ',');
const blob = new Blob(['\uFEFF' + result], { type: 'tsv/plain;charset=utf-8' });
// @ts-ignore
saveAs(blob, '多样本表格.csv');
// xlsx下载(需要将结果转换为 二维数组)
let xlsxRes: [[]] = data.split('\n').map((item: any) => item.split('\t'));
let result = xlsx.build([{ name: 'sheet1', data: xlsxRes, options: {} }]);
// @ts-ignore
const ab = Buffer.from(result, 'binary');
const blob = new Blob([ab]);
saveAs(blob, '多样本表格.xlsx');
});
});
};