x-spreadsheet
x-spreadsheet copied to clipboard
在mac下,从excel复制内容会漏掉最后一行 #296
在mac下,从excel复制内容会漏掉最后一行 #296
同问,我也遇到了这个bug,我在排查,如果你解决了,帮忙把解决方案贴出来,感激不尽
同问,我也遇到了这个bug,我在排查,如果你解决了,帮忙把解决方案贴出来,感激不尽
我换了一种方式实现,大致就是把从excel粘贴的内容放到textarea输入框,得到一大串字符串,然后根据换行“\n”得到每行数据,再将行根据“\t”分割得到对应Cell中的数据,灵感来自博客园
再用loadData()
把数据放到表格中,windows和mac都正常了,希望能帮到你
大致代码
/**
* 解析excel字符串到json
* @param {string} source excel字符串
* @returns {array}
*/
export function excelStringToJson(source) {
const data = []
// 首先对源头进行解析
const rows = source.split('\n') // 拆成很多行
for (let i = 0; i < rows.length; i++) {
if (rows[i] !== '') { // 如果某一行不是空,再按列拆分
const columns = rows[i].split('\t') // 已经按列划分
const o = [] // 声明一行数组
for (let j = 0; j < columns.length; j++) {
o.push(columns[j])
}
data.push(o)
}
}
return data
}
初始化
const element = document.getElementById('x-data-spreadsheet')
const width = element.clientWidth
sheetObj = new Spreadsheet('#x-data-spreadsheet', options(width, 660))
.loadData({})
.change(data => {
console.log('data', data)
})
sheetObj.validate()
粘贴后操作数据
// 从excel复制到textarea的字符串
const str = ''
// 公用方法 返回json
const table = excelStringToJson(str)
const rows = { }
let columnLen = 0
// 循环成它需要的数据
for (let i = 0; i < table.length; i++) {
const row = table[i]
const trows = { cells: {} }
if (i === 0) {
columnLen = row.length
}
for (let j = 0; j < row.length; j++) {
trows.cells[j] = { text: row[j] }
}
rows[i] = trows
}
rows.len = table.length
const data = { rows: rows, cols: { len: columnLen } }
sheetObj.loadData(data)
sheetObj.validate()
我不是这么解决的,我把data_proxy.js文件下的如下函数的语句屏蔽掉了,目前测试没有发现什么问题
我不是这么解决的,我把data_proxy.js文件下的如下函数的语句屏蔽掉了,目前测试没有发现什么问题
hahahaha,不错,因为需求问题,我已经放弃使用这个表格了
@galikeoy 请问您换用哪个表格了呢
@galikeoy 请问您换用哪个表格了呢
vxetable.cn
@galikeoy 请问您换用哪个表格了呢
vxetable.cn
嗷嗷,这个我也在用,目前有款产品需要在线excel,但这个库和luckysheet好像都不维护的样子
@galikeoy 请问您换用哪个表格了呢
vxetable.cn
嗷嗷,这个我也在用,目前有款产品需要在线excel,但这个库和luckysheet好像都不维护的样子
坑其实很多,但也不得不用了