浏览器中创建xlsx文件并下载
在浏览器端通过xlsx库创建二进制文件,并触发下载。
// 文件历史
const FILE_NAME = '提问历史';
// 表格名称
const SHEET_NAME = 'sheet1';
// 创建表格二进制
async function createSheetBlob() {
    // 定义该从对象的哪个字段中取值
    const header = ['ask', 'user', 'time', 'error', 'response', 'sql'];
    // 头部字段
    const headerRow = {
        ask: '提问',
        user: '提问人',
        time: '提问时间',
        error: '错误类型',
        response: '回答结果',
        sql: 'sql',
    };
    const XLSX = await import('xlsx');
    const workbook = XLSX.utils.book_new();
    const sheet = XLSX.utils.json_to_sheet([headerRow, ...data], { header, skipHeader: true });
    XLSX.utils.book_append_sheet(workbook, sheet, 'Sheet1');
    const blob = new Blob([XLSX.writeFile(workbook, `${FILE_NAME}.xlsx`)]);
    return blob;
}
// 下载
function downloadBlob(blob: Blob) {
    const link = document.createElement('a');
    link.href = URL.createObjectURL(blob);
    link.download = `${FILE_NAME}.xlsx`;
    URL.revokeObjectURL(link.href);
}
const blob = await createSheetBlob();
downloadBlob(blob);
FAQ
如何增加头部标题
头部标题其实就是表格第一行变成了标题,所以可以类似于参考代码中一样,增加头部对象拼接到数组的第一项即可。
// 定义该从对象的哪个字段中取值
const header = ['ask', 'user', 'time', 'error', 'response', 'sql'];
// 头部字段
const headerRow = {
    ask: '提问',
    user: '提问人',
    time: '提问时间',
    error: '错误类型',
    response: '回答结果',
    sql: 'sql',
};
const sheet = [headerRow, ...data];
文本的最大长度限制
对于一个单元格最大字符数为32767,即int的最大值,超过时会展示异常。