EddieUp / antd-table-saveas-excel

antd table to excel
53 stars 13 forks source link

columns 行列合并导出文件后报错 #5

Closed 15531400827 closed 3 years ago

15531400827 commented 3 years ago

微信图片_20210114101829

15531400827 commented 3 years ago

发现“test.xlsx”中的部分内容有问题。是否让我们尽量尝试恢复?如果您信任此工作簿的源,请单击“是”。 没有行列合并的时候是不报错的, 是需要配置一些东西吗 https://blog.csdn.net/weixin_34378767/article/details/93952964 是否和上面链接上的问题类似呢

EddieUp commented 3 years ago

发现“test.xlsx”中的部分内容有问题。是否让我们尽量尝试恢复?如果您信任此工作簿的源,请单击“是”。 没有行列合并的时候是不报错的, 是需要配置一些东西吗 https://blog.csdn.net/weixin_34378767/article/details/93952964 是否和上面链接上的问题类似呢

可以发一个重现demo看看吗?

EddieUp commented 3 years ago

文档里面有合并的例子,下载那个会报错吗,方便的话发一份重现demo

15531400827 commented 3 years ago

文档里面有合并的例子,下载那个会报错吗,方便的话发一份重现demo

https://codesandbox.io/s/dumi-demo-forked-vkxfd?file=/demo.tsx 官方示例那里是不报错的,但是按我这个就报错 , 不知道哪里影响的, 帮忙看下, 我这个table比较负复杂一点

EddieUp commented 3 years ago

文档里面有合并的例子,下载那个会报错吗,方便的话发一份重现demo

https://codesandbox.io/s/dumi-demo-forked-vkxfd?file=/demo.tsx 官方示例那里是不报错的,但是按我这个就报错 , 不知道哪里影响的, 帮忙看下, 我这个table比较负复杂一点

出现这个错误的原因在 "评分结果汇总的行列合并": 从第二行开始,应该设置colSpan为0或者1(虽然表格是展示正确的) 在你的实例代码的421行后面插入了 if (obj.props.rowSpan === 0) { obj.props.colSpan = 0; } 这样子可以了 目前我还不太清楚是否可以在插件层面处理,因为我目前不确定你们传入rowSpan为0的时候是否等于colSpan也为0(不过这个是可以约定的),所以你暂时可以如上面进行处理,即:被合并的单元格确保rowSpan和colSpan为1或者0(excel层面的合并要比antd少1,所以插件会自动-1,设置为1或者0都可以,1其实是不用设置的,反正消失的单元格的合并不能大于1😄)

15531400827 commented 3 years ago

好的, 可以了, 感谢

15531400827 commented 3 years ago

@EddieUp 再看看这个例子呢 https://codesandbox.io/s/dumi-demo-forked-vkxfd?file=/demo.tsx 最后一列用div换行, 结果导出来的只有一行, 导出下就能看到结果

EddieUp commented 3 years ago

@EddieUp 再看看这个例子呢 https://codesandbox.io/s/dumi-demo-forked-vkxfd?file=/demo.tsx 最后一列用div换行, 结果导出来的只有一行, 导出下就能看到结果 只显示aa是一个bug,应该是aabbcc拼接起来的字符串,如果有特殊的格式要求,可以使用"excelRender"。 无法识别render返回的html的样式和标签表示的含义,所以单元格的特殊渲染使用"excelRender",换行按如下使用: excelRender: () => 'aa\nbb\ncc',

15531400827 commented 3 years ago

好的,感谢, 项目这边用的比较复杂, 我研究下excelRender

EddieUp commented 3 years ago

好的,感谢, 项目这边用的比较复杂, 我研究下excelRender

excelRender没有详细的介绍,它和render是一样的,只不过render给antd用,excelRender只是用来给excel使用,返回一个字符串(所以无法自定义内容样式,只能设置该单元格整体的样式,例如加粗,自动换行等等,单元格样式文档里有)

15531400827 commented 3 years ago

好的,感谢, 项目这边用的比较复杂, 我研究下excelRender

excelRender没有详细的介绍,它和render是一样的,只不过render给antd用,excelRender只是用来给excel使用,返回一个字符串(所以无法自定义内容样式,只能设置该单元格整体的样式,例如加粗,自动换行等等,单元格样式文档里有)

https://eddieup.github.io/antd-table-saveas-excel/3types#istyle 我看文档好像只能改变列整体的样式, 有办法同列不同的行配置不同的样式吗, 因为这边同一列, 有的是数字, 有的是文字, 想做到数字右对齐, 文字左对齐, 能不能支持在excelRender里面配置一下

EddieUp commented 3 years ago

好的,感谢, 项目这边用的比较复杂, 我研究下excelRender

excelRender没有详细的介绍,它和render是一样的,只不过render给antd用,excelRender只是用来给excel使用,返回一个字符串(所以无法自定义内容样式,只能设置该单元格整体的样式,例如加粗,自动换行等等,单元格样式文档里有)

https://eddieup.github.io/antd-table-saveas-excel/3types#istyle 我看文档好像只能改变列整体的样式, 有办法同列不同的行配置不同的样式吗, 因为这边同一列, 有的是数字, 有的是文字, 想做到数字右对齐, 文字左对齐, 能不能支持在excelRender里面配置一下

每一行数据支持传入样式参数: __style__(行样式会覆盖列样式) 目前没有办法由用户定义每一个单元格的样式(单元格的样式的控制只能交给dataSource,这样dataIndex的值就需要变成一个对象,这样和antd的数据结构不一样) 但是你使用行样式的话,一整行都会应用,还是不太符合你的需求。 如果你觉得dataSource的样子可以是以下的格式的话,我会更新一个版本: const data = [ { key: '1', name: 'John Brown', age: { value: 32, __style__: {} // 单元格样式 }, tel: '0571-22098909', phone: 18889898989, address: 'New York No. 1 Lake Park', }, { key: '2', name: 'Jim Green', tel: '0571-22098333', phone: 18889898888, age: 42, address: 'London No. 1 Lake Park', }, ]

EddieUp commented 3 years ago

好的,感谢, 项目这边用的比较复杂, 我研究下excelRender

excelRender没有详细的介绍,它和render是一样的,只不过render给antd用,excelRender只是用来给excel使用,返回一个字符串(所以无法自定义内容样式,只能设置该单元格整体的样式,例如加粗,自动换行等等,单元格样式文档里有)

https://eddieup.github.io/antd-table-saveas-excel/3types#istyle 我看文档好像只能改变列整体的样式, 有办法同列不同的行配置不同的样式吗, 因为这边同一列, 有的是数字, 有的是文字, 想做到数字右对齐, 文字左对齐, 能不能支持在excelRender里面配置一下

如果你觉得有更好的支持单元格样式的逻辑,也可以和我说说

15531400827 commented 3 years ago

好的,感谢, 项目这边用的比较复杂, 我研究下excelRender

excelRender没有详细的介绍,它和render是一样的,只不过render给antd用,excelRender只是用来给excel使用,返回一个字符串(所以无法自定义内容样式,只能设置该单元格整体的样式,例如加粗,自动换行等等,单元格样式文档里有)

https://eddieup.github.io/antd-table-saveas-excel/3types#istyle 我看文档好像只能改变列整体的样式, 有办法同列不同的行配置不同的样式吗, 因为这边同一列, 有的是数字, 有的是文字, 想做到数字右对齐, 文字左对齐, 能不能支持在excelRender里面配置一下

每一行数据支持传入样式参数: __style__(行样式会覆盖列样式) 目前没有办法由用户定义每一个单元格的样式(单元格的样式的控制只能交给dataSource,这样dataIndex的值就需要变成一个对象,这样和antd的数据结构不一样) 但是你使用行样式的话,一整行都会应用,还是不太符合你的需求。 如果你觉得dataSource的样子可以是以下的格式的话,我会更新一个版本: const data = [ { key: '1', name: 'John Brown', age: { value: 32, __style__: {} // 单元格样式 }, tel: '0571-22098909', phone: 18889898989, address: 'New York No. 1 Lake Park', }, { key: '2', name: 'Jim Green', tel: '0571-22098333', phone: 18889898888, age: 42, address: 'London No. 1 Lake Park', }, ]

这个样子感觉可以啊,我是觉的像这个样子也挺方便的excelRender: text => ({ children: text,style: {} }) ,也不用修改数据, 感觉都可以, 另外我没有在文档中找到可以配置列宽和行高的属性唉, 这个哪里可以配啊, 因为多行的还是希望, 能让他高一些

EddieUp commented 3 years ago

好的,感谢, 项目这边用的比较复杂, 我研究下excelRender

excelRender没有详细的介绍,它和render是一样的,只不过render给antd用,excelRender只是用来给excel使用,返回一个字符串(所以无法自定义内容样式,只能设置该单元格整体的样式,例如加粗,自动换行等等,单元格样式文档里有)

https://eddieup.github.io/antd-table-saveas-excel/3types#istyle 我看文档好像只能改变列整体的样式, 有办法同列不同的行配置不同的样式吗, 因为这边同一列, 有的是数字, 有的是文字, 想做到数字右对齐, 文字左对齐, 能不能支持在excelRender里面配置一下

每一行数据支持传入样式参数: __style__(行样式会覆盖列样式) 目前没有办法由用户定义每一个单元格的样式(单元格的样式的控制只能交给dataSource,这样dataIndex的值就需要变成一个对象,这样和antd的数据结构不一样) 但是你使用行样式的话,一整行都会应用,还是不太符合你的需求。 如果你觉得dataSource的样子可以是以下的格式的话,我会更新一个版本: const data = [ { key: '1', name: 'John Brown', age: { value: 32, __style__: {} // 单元格样式 }, tel: '0571-22098909', phone: 18889898989, address: 'New York No. 1 Lake Park', }, { key: '2', name: 'Jim Green', tel: '0571-22098333', phone: 18889898888, age: 42, address: 'London No. 1 Lake Park', }, ]

这个样子感觉可以啊,我是觉的像这个样子也挺方便的excelRender: text => ({ children: text,style: {} }) ,也不用修改数据, 感觉都可以, 另外我没有在文档中找到可以配置列宽和行高的属性唉, 这个哪里可以配啊, 因为多行的还是希望, 能让他高一些 render的话是要由函数来控制具体到哪一个值需要设置样式,需要有一定的判断条件,如果是有这些条件的话,使用render来返回style也是可以的

EddieUp commented 3 years ago

好的,感谢, 项目这边用的比较复杂, 我研究下excelRender

excelRender没有详细的介绍,它和render是一样的,只不过render给antd用,excelRender只是用来给excel使用,返回一个字符串(所以无法自定义内容样式,只能设置该单元格整体的样式,例如加粗,自动换行等等,单元格样式文档里有)

https://eddieup.github.io/antd-table-saveas-excel/3types#istyle 我看文档好像只能改变列整体的样式, 有办法同列不同的行配置不同的样式吗, 因为这边同一列, 有的是数字, 有的是文字, 想做到数字右对齐, 文字左对齐, 能不能支持在excelRender里面配置一下

每一行数据支持传入样式参数: __style__(行样式会覆盖列样式) 目前没有办法由用户定义每一个单元格的样式(单元格的样式的控制只能交给dataSource,这样dataIndex的值就需要变成一个对象,这样和antd的数据结构不一样) 但是你使用行样式的话,一整行都会应用,还是不太符合你的需求。 如果你觉得dataSource的样子可以是以下的格式的话,我会更新一个版本: const data = [ { key: '1', name: 'John Brown', age: { value: 32, __style__: {} // 单元格样式 }, tel: '0571-22098909', phone: 18889898989, address: 'New York No. 1 Lake Park', }, { key: '2', name: 'Jim Green', tel: '0571-22098333', phone: 18889898888, age: 42, address: 'London No. 1 Lake Park', }, ]

这个样子感觉可以啊,我是觉的像这个样子也挺方便的excelRender: text => ({ children: text,style: {} }) ,也不用修改数据, 感觉都可以, 另外我没有在文档中找到可以配置列宽和行高的属性唉, 这个哪里可以配啊, 因为多行的还是希望, 能让他高一些

addColumns的第二个参数是行高,单位是CM; 列宽目前是和columns配置的width挂钩

15531400827 commented 3 years ago

好的,感谢, 项目这边用的比较复杂, 我研究下excelRender

excelRender没有详细的介绍,它和render是一样的,只不过render给antd用,excelRender只是用来给excel使用,返回一个字符串(所以无法自定义内容样式,只能设置该单元格整体的样式,例如加粗,自动换行等等,单元格样式文档里有)

https://eddieup.github.io/antd-table-saveas-excel/3types#istyle 我看文档好像只能改变列整体的样式, 有办法同列不同的行配置不同的样式吗, 因为这边同一列, 有的是数字, 有的是文字, 想做到数字右对齐, 文字左对齐, 能不能支持在excelRender里面配置一下

每一行数据支持传入样式参数: __style__(行样式会覆盖列样式) 目前没有办法由用户定义每一个单元格的样式(单元格的样式的控制只能交给dataSource,这样dataIndex的值就需要变成一个对象,这样和antd的数据结构不一样) 但是你使用行样式的话,一整行都会应用,还是不太符合你的需求。 如果你觉得dataSource的样子可以是以下的格式的话,我会更新一个版本: const data = [ { key: '1', name: 'John Brown', age: { value: 32, __style__: {} // 单元格样式 }, tel: '0571-22098909', phone: 18889898989, address: 'New York No. 1 Lake Park', }, { key: '2', name: 'Jim Green', tel: '0571-22098333', phone: 18889898888, age: 42, address: 'London No. 1 Lake Park', }, ]

这个样子感觉可以啊,我是觉的像这个样子也挺方便的excelRender: text => ({ children: text,style: {} }) ,也不用修改数据, 感觉都可以, 另外我没有在文档中找到可以配置列宽和行高的属性唉, 这个哪里可以配啊, 因为多行的还是希望, 能让他高一些

addColumns的第二个参数是行高,单位是CM; 列宽目前是和columns配置的width挂钩

addColumns好像只支持表头高度啊, 而且这个不灵活,我是觉得这行高和列宽可以放在https://eddieup.github.io/antd-table-saveas-excel/3types#istyle 里面作为一个属性来配置, 这样就可以来配置某一行的高度或某一列的宽度

EddieUp commented 3 years ago

好的,感谢, 项目这边用的比较复杂, 我研究下excelRender

excelRender没有详细的介绍,它和render是一样的,只不过render给antd用,excelRender只是用来给excel使用,返回一个字符串(所以无法自定义内容样式,只能设置该单元格整体的样式,例如加粗,自动换行等等,单元格样式文档里有)

https://eddieup.github.io/antd-table-saveas-excel/3types#istyle 我看文档好像只能改变列整体的样式, 有办法同列不同的行配置不同的样式吗, 因为这边同一列, 有的是数字, 有的是文字, 想做到数字右对齐, 文字左对齐, 能不能支持在excelRender里面配置一下

每一行数据支持传入样式参数: __style__(行样式会覆盖列样式) 目前没有办法由用户定义每一个单元格的样式(单元格的样式的控制只能交给dataSource,这样dataIndex的值就需要变成一个对象,这样和antd的数据结构不一样) 但是你使用行样式的话,一整行都会应用,还是不太符合你的需求。 如果你觉得dataSource的样子可以是以下的格式的话,我会更新一个版本: const data = [ { key: '1', name: 'John Brown', age: { value: 32, __style__: {} // 单元格样式 }, tel: '0571-22098909', phone: 18889898989, address: 'New York No. 1 Lake Park', }, { key: '2', name: 'Jim Green', tel: '0571-22098333', phone: 18889898888, age: 42, address: 'London No. 1 Lake Park', }, ]

这个样子感觉可以啊,我是觉的像这个样子也挺方便的excelRender: text => ({ children: text,style: {} }) ,也不用修改数据, 感觉都可以, 另外我没有在文档中找到可以配置列宽和行高的属性唉, 这个哪里可以配啊, 因为多行的还是希望, 能让他高一些

addColumns的第二个参数是行高,单位是CM; 列宽目前是和columns配置的width挂钩

addColumns好像只支持表头高度啊, 而且这个不灵活,我是觉得这行高和列宽可以放在https://eddieup.github.io/antd-table-saveas-excel/3types#istyle 里面作为一个属性来配置, 这样就可以来配置某一行的高度或某一列的宽度

发布新版了,你的需求都支持了

EddieUp commented 3 years ago

文档的例子都更新了,有使用单元格渲染的例子,包含了宽高的定义