找回密码
 立即注册

QQ登录

只需一步,快速开始

wzw

论坛元老

6

主题

28

帖子

7286

积分

论坛元老

积分
7286

活字格认证

wzw
论坛元老   /  发表于:2014-3-23 20:28  /   查看:9763  /  回复:10
EXCCEL导入WEB SPREAD后,线框变粗,在论坛中找到一个方法,在4.0版本中可以,可是升级到7V3版本后,合并的单元格还是不能变细。代码如下:
For Each oStyleInfo As StyleInfo In Me.FpSpread1.Sheets(0).NamedStyles
            If oStyleInfo.Border.BorderSizeTop > 1 Then
                oStyleInfo.Border.BorderSizeTop -= 1
            End If
            If oStyleInfo.Border.BorderSizeBottom > 1 Then
                oStyleInfo.Border.BorderSizeBottom -= 1
            End If
            If oStyleInfo.Border.BorderSizeLeft > 1 Then
                oStyleInfo.Border.BorderSizeLeft -= 1
            End If
            If oStyleInfo.Border.BorderSizeRight > 1 Then
                oStyleInfo.Border.BorderSizeRight -= 1
            End If

            If oStyleInfo.Border.BorderStyleTop = BorderStyle.NotSet AndAlso oStyleInfo.Border.BorderStyleBottom = BorderStyle.NotSet AndAlso oStyleInfo.Border.BorderStyleLeft = BorderStyle.NotSet AndAlso oStyleInfo.Border.BorderStyleRight = BorderStyle.NotSet Then
                oStyleInfo.Border.BorderStyleBottom = BorderStyle.None
            End If
        Next

出错图片如下:请问如何解决?

grid.gif

10 个回复

倒序浏览
roger.wang
社区贡献组   /  发表于:2014-3-24 10:16:00
沙发
回复 1楼wzw的帖子

谢谢您的问题。

Spread ASP.NET到导入Excel进来后,对边框(Border)有一些约定。
Import_Excel_border_web_Spread.gif

如您图示,合并和不合并有区别,能把您试验的Excel上传吗?  我模拟一下场景。
回复 使用道具 举报
wzw
论坛元老   /  发表于:2014-3-24 11:57:00
板凳

这是的EXCEL文件

这是的EXCEL文件
test.zip (1.92 KB, 下载次数: 405)
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-3-24 12:40:00
地板
回复 3楼wzw的帖子

问题确实如您描述,默认导入变粗,通过上面代码设置后,合并的无法变细。

我需要咨询一下产品团队,看有无解决办法。
回复 使用道具 举报
wzw
论坛元老   /  发表于:2014-3-25 18:36:00
5#
找到解决办法了吗
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-3-26 10:07:00
6#
回复 5楼wzw的帖子

还没有,请耐心等待。
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-3-27 09:07:00
7#
回复 5楼wzw的帖子

有反馈了:
您1#的做法是思路对的,请参考下面这段代码把SpanBorder设置为1试试:

C#.net代码

  1.              //导入Excel后,如何把边框置为1(看起来细一些)  
  2.                 //Step 1: 先把不是合并Cell的边框修改为1
  3.                 foreach (StyleInfo  item in this.FpSpread1.Sheets[0].NamedStyles)
  4.                 {
  5.                     if (item.Border.BorderSizeTop > 1)
  6.                     {
  7.                         item.Border.BorderSizeTop = 1;
  8.                     }

  9.                     if (item.Border.BorderSizeBottom > 1)
  10.                     {
  11.                         item.Border.BorderSizeBottom = 1;
  12.                     }

  13.                     if (item.Border.BorderSizeLeft > 1)
  14.                     {
  15.                         item.Border.BorderSizeLeft = 1;
  16.                     }

  17.                     if (item.Border.BorderSizeRight > 1)
  18.                     {
  19.                         item.Border.BorderSizeRight = 1;
  20.                     }
  21.                 }

  22.                 //Step2: 再把是合并Cell的边框修改为1  SpanModel
  23.                 DefaultSheetSpanModel model = (DefaultSheetSpanModel)FpSpread1.ActiveSheetView.SpanModel;
  24.                 IEnumerator ien = model.GetEnumerator();
  25.                 bool b1 = ien.MoveNext();
  26.                 while (b1)
  27.                 {
  28.                     CellRange cr = (CellRange)ien.Current;
  29.                     FpSpread1.Sheets[0].Cells[cr.Row, cr.Column].Border.BorderSizeRight = 1;
  30.                     FpSpread1.Sheets[0].Cells[cr.Row, cr.Column].Border.BorderSizeTop = 1;
  31.                     FpSpread1.Sheets[0].Cells[cr.Row, cr.Column].Border.BorderSizeLeft = 1;
  32.                     FpSpread1.Sheets[0].Cells[cr.Row, cr.Column].Border.BorderSizeBottom = 1;
  33.                     b1 = ien.MoveNext();  //下一个合并单元格
  34.                 }
复制代码


通过在线转化工具转化后的VB.net代码:(供参考)

  1. '导入Excel后,如何把边框置为1(看起来细一些)  
  2. 'Step 1: 先把不是合并Cell的边框修改为1
  3. For Each item As StyleInfo In Me.FpSpread1.Sheets(0).NamedStyles
  4.         If item.Border.BorderSizeTop > 1 Then
  5.                 item.Border.BorderSizeTop = 1
  6.         End If

  7.         If item.Border.BorderSizeBottom > 1 Then
  8.                 item.Border.BorderSizeBottom = 1
  9.         End If

  10.         If item.Border.BorderSizeLeft > 1 Then
  11.                 item.Border.BorderSizeLeft = 1
  12.         End If

  13.         If item.Border.BorderSizeRight > 1 Then
  14.                 item.Border.BorderSizeRight = 1
  15.         End If
  16. Next

  17. 'Step2: 再把是合并Cell的边框修改为1  SpanModel
  18. Dim model As DefaultSheetSpanModel = DirectCast(FpSpread1.ActiveSheetView.SpanModel, DefaultSheetSpanModel)
  19. Dim ien As IEnumerator = model.GetEnumerator()
  20. Dim b1 As Boolean = ien.MoveNext()
  21. While b1
  22.         Dim cr As CellRange = DirectCast(ien.Current, CellRange)
  23.         FpSpread1.Sheets(0).Cells(cr.Row, cr.Column).Border.BorderSizeRight = 1
  24.         FpSpread1.Sheets(0).Cells(cr.Row, cr.Column).Border.BorderSizeTop = 1
  25.         FpSpread1.Sheets(0).Cells(cr.Row, cr.Column).Border.BorderSizeLeft = 1
  26.         FpSpread1.Sheets(0).Cells(cr.Row, cr.Column).Border.BorderSizeBottom = 1
  27.                 '下一个合并单元格
  28.         b1 = ien.MoveNext()
  29. End While

复制代码


原理,找出Merge的Cell,逐个把Border修改为1, 借鉴了您的思路。
回复 使用道具 举报
wzw
论坛元老   /  发表于:2014-3-27 15:08:00
8#
不行,加上你的代码后,页面直接卡了打不开了,好象进入死循环
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-3-27 17:50:00
9#
回复 8楼wzw的帖子

知道了,我在您demo上验证一下。

另外,您也可抽空断点调试一下,这样速度能快点。
回复 使用道具 举报
wzw
论坛元老   /  发表于:2014-3-28 09:19:00
10#
Dim b1 As Boolean = ien.MoveNext()
        While b1
...
        End While
这个代码不太懂,不知这样怎么可以循环
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部