NPOI合并单元格后数据显示不全怎么解决的

DN201709 2017-09-12 09:41:55
各位大哥好,小弟刚才遇到了个问题,NPOI合并单元格,数据显示不全,数据已自动换行,网上搜了很多高度自适应都解决不了,求问各位大大是怎么调整行高
...全文
1478 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
DN201709 2017-09-15
  • 打赏
  • 举报
回复
引用 22 楼 jjkk168 的回复:
[quote=引用 21 楼 DN201709 的回复:] [quote=引用 20 楼 jjkk168 的回复:] [quote=引用 19 楼 DN201709 的回复:] [quote=引用 18 楼 sp1234 的回复:] 或许,你的问题就是“删除单元格”造成的,而不是合并单元格的问题。
噢,我回答的是上面的问题,按照他的思路,我删除的是复制到一个没有合并单元格的列中, 其实这个npoi的机制是这样的,你只要是在一个单元格内自动换行,他的行高会自动适应,但是合并后就不会自动适应,所以我按照他给的思路,在同行的一个没合并的单元格改为和合并的单元格一个宽度,然后自动换行,高度会自动适应,但是他机制很奇怪,删除了那个单元格,这个高度自适应又会还原,很头疼[/quote] 1. 我当时的操作是放在最后,新增一列,回头直接删列就行 2. 在删除以后,不能有任何自适应行高的代码[/quote] 我刚才测试了下,我放到最后才删除,还是会还原,心累 [/quote] 奇怪,可能是NPOI有什么设定的规则。我之前使用的是Aspose.Cells,回头用NPOI试试[/quote] 是的,很奇怪,我之前用VBA也没有这种奇怪的设定
还想懒够 2017-09-13
  • 打赏
  • 举报
回复
引用 21 楼 DN201709 的回复:
[quote=引用 20 楼 jjkk168 的回复:] [quote=引用 19 楼 DN201709 的回复:] [quote=引用 18 楼 sp1234 的回复:] 或许,你的问题就是“删除单元格”造成的,而不是合并单元格的问题。
噢,我回答的是上面的问题,按照他的思路,我删除的是复制到一个没有合并单元格的列中, 其实这个npoi的机制是这样的,你只要是在一个单元格内自动换行,他的行高会自动适应,但是合并后就不会自动适应,所以我按照他给的思路,在同行的一个没合并的单元格改为和合并的单元格一个宽度,然后自动换行,高度会自动适应,但是他机制很奇怪,删除了那个单元格,这个高度自适应又会还原,很头疼[/quote] 1. 我当时的操作是放在最后,新增一列,回头直接删列就行 2. 在删除以后,不能有任何自适应行高的代码[/quote] 我刚才测试了下,我放到最后才删除,还是会还原,心累 [/quote] 奇怪,可能是NPOI有什么设定的规则。我之前使用的是Aspose.Cells,回头用NPOI试试
-一个大坑 2017-09-12
  • 打赏
  • 举报
回复
引用 9 楼 DN201709 的回复:
你这个方法我看过,但是因为我字体挺大的,而且数据是各种数字英文字符串混合,根本不能获取一个准确的长度,所以高度很不准,以前用VBA也遇到过这种问题,但是找到了解决的方法,将VBA的方法用到NPOI上就不行了,很麻烦,我的execl是WPS,合并有效果,没有2016不知道效果怎么样,你下载个WPS看看合并有没有效果,有效果那就没办法了
我是excel2010,有效果,但是user测试时发现不行,他的事excel2016。我们肯定要从user角度出发,不能说要他配合我们来装软件
DN201709 2017-09-12
  • 打赏
  • 举报
回复
引用 8 楼 happy4944 的回复:
[quote=引用 7 楼 DN201709 的回复:] 我明白你的意思了,我数据显示不全不是说数据获取不到,而是execl合并后行高不够高,内容被遮住了,以前用VBA的时候解决的方法放在NPOI用不了,我非常无奈
合并有没有用excel2016打开过,合并还有效果吗 http://blog.csdn.net/echoshinian100/article/details/38540321 自动获取行高[/quote] 你这个方法我看过,但是因为我字体挺大的,而且数据是各种数字英文字符串混合,根本不能获取一个准确的长度,所以高度很不准,以前用VBA也遇到过这种问题,但是找到了解决的方法,将VBA的方法用到NPOI上就不行了,很麻烦,我的execl是WPS,合并有效果,没有2016不知道效果怎么样,你下载个WPS看看合并有没有效果,有效果那就没办法了
-一个大坑 2017-09-12
  • 打赏
  • 举报
回复
引用 7 楼 DN201709 的回复:
我明白你的意思了,我数据显示不全不是说数据获取不到,而是execl合并后行高不够高,内容被遮住了,以前用VBA的时候解决的方法放在NPOI用不了,我非常无奈
合并有没有用excel2016打开过,合并还有效果吗 http://blog.csdn.net/echoshinian100/article/details/38540321 自动获取行高
DN201709 2017-09-12
  • 打赏
  • 举报
回复
引用 6 楼 happy4944 的回复:
[quote=引用 4 楼 DN201709 的回复:] [quote=引用 3 楼 happy4944 的回复:] 合并只保留第一个单元格内容,我当初就是这个问题
请问怎么操作,能贴个代码我看看吗,谢谢[/quote] 我是操作datatable合并,当时没人回。然后我自己写的循环把内容一样的合并到第一个单元格。后来又发现excel2016合并没效果,到现在问题还没解决[/quote] 我明白你的意思了,我数据显示不全不是说数据获取不到,而是execl合并后行高不够高,内容被遮住了,以前用VBA的时候解决的方法放在NPOI用不了,我非常无奈
-一个大坑 2017-09-12
  • 打赏
  • 举报
回复
引用 4 楼 DN201709 的回复:
[quote=引用 3 楼 happy4944 的回复:] 合并只保留第一个单元格内容,我当初就是这个问题
请问怎么操作,能贴个代码我看看吗,谢谢[/quote] 我是操作datatable合并,当时没人回。然后我自己写的循环把内容一样的合并到第一个单元格。后来又发现excel2016合并没效果,到现在问题还没解决
-一个大坑 2017-09-12
  • 打赏
  • 举报
回复
引用 4 楼 DN201709 的回复:
[quote=引用 3 楼 happy4944 的回复:] 合并只保留第一个单元格内容,我当初就是这个问题
请问怎么操作,能贴个代码我看看吗,谢谢[/quote] 合并之前先把要合并的内容都放在第一个单元格。 http://bbs.csdn.net/topics/392225270 这是我当初的帖子
DN201709 2017-09-12
  • 打赏
  • 举报
回复
引用 3 楼 happy4944 的回复:
合并只保留第一个单元格内容,我当初就是这个问题
请问怎么操作,能贴个代码我看看吗,谢谢
-一个大坑 2017-09-12
  • 打赏
  • 举报
回复
合并只保留第一个单元格内容,我当初就是这个问题
DN201709 2017-09-12
  • 打赏
  • 举报
回复
你这个是固定数据能这样设置高度,我需要的是数据不定,高度不能固定的,固定显示不全
听雨停了 2017-09-12
  • 打赏
  • 举报
回复

 static void Main(string[] args)  
        {  
            //说明:设置列宽、行高与合并单元格  
      
            //1.创建EXCEL中的Workbook           
            IWorkbook myworkbook = new XSSFWorkbook();  
  
            //2.创建Workbook中的Sheet          
            ISheet mysheet = myworkbook.CreateSheet("sheet1");  
  
            //4.合并单元格区域 例: 第1行到第1行 第2列到第3列围成的矩形区域  
            mysheet.AddMergedRegion(new CellRangeAddress(0, 0, 1, 2));  
  
            //5.创建Row中的Cell并赋值  
            IRow row0 = mysheet.CreateRow(0);  
            row0.CreateCell(0).SetCellValue("0-0");  
            row0.CreateCell(1).SetCellValue("0-1");  
            row0.CreateCell(3).SetCellValue("0-3");  
             
            //6.设置列宽   SetColumnWidth(列的索引号从0开始, N * 256) 第二个参数的单位是1/256个字符宽度。例:将第四列宽度设置为了30个字符。  
            mysheet.SetColumnWidth(3, 30 * 256);  
  
            //7.设置行高   Height的单位是1/20个点。例:设置高度为50个点  
            row0.Height=50*20;  
           
            //5.保存         
            FileStream file= new FileStream(@"E:\myworkbook2.xlsx", FileMode.Create);  
            myworkbook.Write(file);  
            file.Close();  
        }  
DN201709 2017-09-12
  • 打赏
  • 举报
回复
引用 20 楼 jjkk168 的回复:
[quote=引用 19 楼 DN201709 的回复:] [quote=引用 18 楼 sp1234 的回复:] 或许,你的问题就是“删除单元格”造成的,而不是合并单元格的问题。
噢,我回答的是上面的问题,按照他的思路,我删除的是复制到一个没有合并单元格的列中, 其实这个npoi的机制是这样的,你只要是在一个单元格内自动换行,他的行高会自动适应,但是合并后就不会自动适应,所以我按照他给的思路,在同行的一个没合并的单元格改为和合并的单元格一个宽度,然后自动换行,高度会自动适应,但是他机制很奇怪,删除了那个单元格,这个高度自适应又会还原,很头疼[/quote] 1. 我当时的操作是放在最后,新增一列,回头直接删列就行 2. 在删除以后,不能有任何自适应行高的代码[/quote] 我刚才测试了下,我放到最后才删除,还是会还原,心累
还想懒够 2017-09-12
  • 打赏
  • 举报
回复
引用 19 楼 DN201709 的回复:
[quote=引用 18 楼 sp1234 的回复:] 或许,你的问题就是“删除单元格”造成的,而不是合并单元格的问题。
噢,我回答的是上面的问题,按照他的思路,我删除的是复制到一个没有合并单元格的列中, 其实这个npoi的机制是这样的,你只要是在一个单元格内自动换行,他的行高会自动适应,但是合并后就不会自动适应,所以我按照他给的思路,在同行的一个没合并的单元格改为和合并的单元格一个宽度,然后自动换行,高度会自动适应,但是他机制很奇怪,删除了那个单元格,这个高度自适应又会还原,很头疼[/quote] 1. 我当时的操作是放在最后,新增一列,回头直接删列就行 2. 在删除以后,不能有任何自适应行高的代码
DN201709 2017-09-12
  • 打赏
  • 举报
回复
引用 18 楼 sp1234 的回复:
或许,你的问题就是“删除单元格”造成的,而不是合并单元格的问题。
噢,我回答的是上面的问题,按照他的思路,我删除的是复制到一个没有合并单元格的列中, 其实这个npoi的机制是这样的,你只要是在一个单元格内自动换行,他的行高会自动适应,但是合并后就不会自动适应,所以我按照他给的思路,在同行的一个没合并的单元格改为和合并的单元格一个宽度,然后自动换行,高度会自动适应,但是他机制很奇怪,删除了那个单元格,这个高度自适应又会还原,很头疼
  • 打赏
  • 举报
回复
或许,你的问题就是“删除单元格”造成的,而不是合并单元格的问题。
  • 打赏
  • 举报
回复
引用 15 楼 DN201709 的回复:
我按照你的思路弄出来了效果,但是不能删除,我删除是用这个方法RemoveCell,删除后它又会显示不全了
嗯?合并单元格之后并不需要删除啊?你只要把内容合并到第一个单元格就行了,后边的单元格已经自动就不显示了,不需要删除啊?! 也许第三方软件对于“合并单元格”有特殊规定。但是Excel 在合并单元格之后,是不需要删除什么单元格的。
DN201709 2017-09-12
  • 打赏
  • 举报
回复
引用 13 楼 sp1234 的回复:
话要说回来了,默认地当不同单元分别显示数据时总有一些单元格里边的边框“空隙”。而你“合并单元格”(并且内容合并到前边的单元格里)之后怎么就会让内容显示不全了呢?这起码对于 Excel 来说有些奇怪。对于第三方工具可能出这个 bug,但是 excel 本身应该很少出现。
噢,我以前VBA测试过这个问题,因为是这是外国写的,不兼容中文,要是全英文就不会出现显示不全的这个问题,不知道算不算BUG
DN201709 2017-09-12
  • 打赏
  • 举报
回复
引用 11 楼 jjkk168 的回复:
合并单元格后再自适应高度,别说NPOI不行,连Excel也显示不全,这并不是NPOI的问题了。 我以前在Aspose.Cells中碰到过类似的问题,后来的解决方案如下: 1. 将合并单元格后的文本内容复制到一个没有合并单元格的列中,并设置宽度与被合并的单元格宽度一样 2. 设置行自适应高度 3. 删除那个复制列并输出Excel 这样就可以了
我按照你的思路弄出来了效果,但是不能删除,我删除是用这个方法RemoveCell,删除后它又会显示不全了
DN201709 2017-09-12
  • 打赏
  • 举报
回复
引用 10 楼 happy4944 的回复:
[quote=引用 9 楼 DN201709 的回复:] 你这个方法我看过,但是因为我字体挺大的,而且数据是各种数字英文字符串混合,根本不能获取一个准确的长度,所以高度很不准,以前用VBA也遇到过这种问题,但是找到了解决的方法,将VBA的方法用到NPOI上就不行了,很麻烦,我的execl是WPS,合并有效果,没有2016不知道效果怎么样,你下载个WPS看看合并有没有效果,有效果那就没办法了
我是excel2010,有效果,但是user测试时发现不行,他的事excel2016。我们肯定要从user角度出发,不能说要他配合我们来装软件[/quote] 我说这个可能是NPOI的问题,我也没办法了。帮不了你
加载更多回复(3)

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧