vue.js - 将来自 html 表的数据格式化到 filesaver.js 中的 xlsx 文件的问题 - VueJs
问题描述
我正在使用 Filesaver.js 库从我拥有的表中导出 .xlsx 文件。但是我遇到了一些错误。见下文:
使用 VueJs 和 Quasar Framework 创建的原始表:
生成的 .xlsx 文件:
另一个案例
生成的 .xlsx 文件:
我的代码:
exportTable() {
let wb = XLSX.utils.table_to_book(document.querySelector('.q-table'), {
sheet: "Sheet JS",
})
let wbout = XLSX.write(wb, {
bookType: 'xlsx',
bookSST: true,
type: 'binary'
})
function s2ab(s) {
let buf = new ArrayBuffer(s.length)
let view = new Uint8Array(buf)
for (let i = 0; i < s.length; i++) view[i] = s.charCodeAt(i) & 0xFF
return buf
}
saveAs(new Blob([s2ab(wbout)], {
type: "text/plain;charset=utf-8"
}), 'test.xlsx')
为什么导出电子表格时不保留表格中字符的格式?
我的电子表格数据不被视为字符串吗?
我是巴西人。抱歉英语不好(=
解决方案
经过几天寻找答案,我设法解决了我的问题。更准确地说,只需使用{raw: true}
. 通过这样做,lib 不再格式化数据,而是将其保留为来自 HTML 的原始形式。有趣的是,我在文档中没有找到这个。
// import something here
import Vue from 'vue'
import XLSX from 'xlsx'
import {
saveAs
} from 'file-saver'
// Global Function
const exportExcel = (table) => {
let wb = XLSX.utils.table_to_book(table, {
sheet: "Sheet JS",
raw: true // Here
})
let wbout = XLSX.write(wb, {
bookType: 'xlsx',
bookSST: true,
type: 'binary'
})
function s2ab(s) {
let buf = new ArrayBuffer(s.length)
let view = new Uint8Array(buf)
for (let i = 0; i != s.length; i++) view[i] = s.charCodeAt(i) & 0xFF
return buf
}
saveAs(new Blob([s2ab(wbout)], {
type: "text/plain;charset=utf-8"
}), 'spreadsheet.xlsx')
}
Vue.prototype.$exportExcel = exportExcel;
// "async" is optional;
// more info on params: https://quasar.dev/quasar-cli/cli-documentation/boot-files#Anatomy-of-a-boot-file
//export default exportExcel
推荐阅读
- javascript - 使用语音气球类型而不是模态类型显示布尔玛日历扩展
- javascript - 为什么我无法连接到部署到 Heroku 的 websocket 服务器?
- java - 如何从数组中获取随机对象
- c++ - 当我使用类执行链表时,它显示一个额外的零
- python - OpenCV imread() 方法返回 None
- php - 定义有关 Player_HP 和 Damage 的变量
- c# - 从 DataTable 填充 DataGridViewComboBoxCell 不起作用
- python - 如何使用 pythonnet 在 python 侦听器中订阅 .NET 事件?
- mysql - 如何内连接两个其他内连接查询
- reactjs - 简单的引导按钮在 React 中不显示变体颜色