myliang/x-spreadsheet

在mac下,从excel复制内容会漏掉最后一行 #296

Opened this issue · 8 comments

在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文件下的如下函数的语句屏蔽掉了,目前测试没有发现什么问题
image

我不是这么解决的,我把data_proxy.js文件下的如下函数的语句屏蔽掉了,目前测试没有发现什么问题 image

hahahaha,不错,因为需求问题,我已经放弃使用这个表格了

@galikeoy 请问您换用哪个表格了呢

@galikeoy 请问您换用哪个表格了呢

vxetable.cn

@galikeoy 请问您换用哪个表格了呢

vxetable.cn

嗷嗷,这个我也在用,目前有款产品需要在线excel,但这个库和luckysheet好像都不维护的样子

@galikeoy 请问您换用哪个表格了呢

vxetable.cn

嗷嗷,这个我也在用,目前有款产品需要在线excel,但这个库和luckysheet好像都不维护的样子

坑其实很多,但也不得不用了