Foxtable(狐表)用户栏目专家坐堂 → 请教高手EXCEL报表的行高及居中代码不起作用


  共有19287人关注过本帖树形打印复制链接

主题:请教高手EXCEL报表的行高及居中代码不起作用

美女呀,离线,留言给我吧!
yangming
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
请教高手EXCEL报表的行高及居中代码不起作用  发帖心情 Post By:2009/4/15 14:34:00 [只看该作者]

Dim Style As XLS.Style = Book.NewStyle() '定义新样式
Style.ForeColor = Color.Navy '设置样式的字体颜色
Style.AlignHorz = XLS.AlignHorzEnum.Center
Style.AlignVert = XLS.AlignVertEnum.Center
Sheet.DefaultColumnWidth = 100   '列宽
Sheet.DefaultRowHeight = 30         '行高
Style.BackColor = Color.Red '样式的背景颜色设为红色
For c As Integer = 0 To dt.Cols.Count -2 '添加列标题
    Sheet(0, c).Value = dt.Cols(c).Name
Next
For r As Integer = 0 To dt.Rows.Count - 2 '填入数据
    For c As Integer = 0 To dt.Cols.Count -2
        Sheet(r +1, c).Value = dt.rows(r)(c)
    Next


请教高手,为何我红色的部分不起作用呢?

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/15 14:41:00 [只看该作者]

Dim Style As XLS.Style = Book.NewStyle() '定义新样式
Style.ForeColor = Color.Navy '设置样式的字体颜色
Style.AlignHorz = XLS.AlignHorzEnum.Center
Style.AlignVert = XLS.AlignVertEnum.Center
Sheet.DefaultColumnWidth = 100   '列宽
Sheet.DefaultRowHeight = 30         '行高
Style.BackColor = Color.Red '样式的背景颜色设为红色
For c As Integer = 0 To dt.Cols.Count -2 '添加列标题
    Sheet(0, c).Value = dt.Cols(c).Name
    Sheet(0, c).Style= Style
Next
For r As Integer = 0 To dt.Rows.Count - 2 '填入数据
    For c As Integer = 0 To dt.Cols.Count -2
        Sheet(r +1, c).Value = dt.rows(r)(c)
    Next

 回到顶部
美女呀,离线,留言给我吧!
yangming
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2009/4/15 15:03:00 [只看该作者]

还是不行...
看图:下面的行高改了,我加大行高为100了,就是居中也没起作用,搞不明白原因

 回到顶部
美女呀,离线,留言给我吧!
yangming
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2009/4/15 15:07:00 [只看该作者]


请看看,这是我的全部代码

Dim dt As Table = Tables("工资表")
Dim Book As New XLS.Book() '定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) '引用工作簿的第一个工作表
Dim Style As XLS.Style = Book.NewStyle() '定义新样式
Style.ForeColor = Color.Navy '设置样式的字体颜色
Style.AlignHorz = XLS.AlignHorzEnum.Center
Style.AlignVert = XLS.AlignVertEnum.Center
Sheet.DefaultColumnWidth = 100   '列宽
Sheet.DefaultRowHeight = 80         '行高
Style.BackColor = Color.Red '样式的背景颜色设为红色
For c As Integer = 0 To dt.Cols.Count -2 '添加列标题
    Sheet(0, c).Value = dt.Cols(c).Name
    Sheet(0, c).Style= Style
Next
For r As Integer = 0 To dt.Rows.Count - 2 '填入数据
    For c As Integer = 0 To dt.Cols.Count -2
        Sheet(r +1, c).Value = dt.rows(r)(c)
    Next
    If dt.rows(r)("实发工资") >= 4000 Then '如果实发工资大于等于4000
        Sheet(r + 1,dt.Cols("实发工资").Index).Style = Style '设置实发工资单元格的样式
    End If
Next
Dim Style1 As XLS.Style = Book.NewStyle() '定义新样
Style1.BorderTop = XLS.LineStyleEnum.Thin
Style1.BorderBottom = XLS.LineStyleEnum.Thin
Style1.BorderLeft = XLS.LineStyleEnum.Thin
Style1.BorderRight = XLS.LineStyleEnum.Thin
Style1.BorderColorTop = Color.Black
Style1.BorderColorBottom = Color.Black
Style1.BorderColorLeft = Color.Black
Style1.BorderColorRight = Color.Black
For r As Integer = 0 to dt.rows.Count -1
    For c As Integer =0 To dt.Cols.Count -2
        Sheet(r,c).Style = Style1
    Next
Next
With Sheet.PrintSetting
    .AutoScale = True '自动缩放
    .FitPagesDown = 1 '垂直方向缩为1页
End With
With Sheet.PrintSetting
    .PaperKind = 9 '设为A4纸
    .LandScape = True '横向打印
    .MarginLeft = 10 '左右边距设为20毫米
    .MarginRight = 10
    .MarginTop = 15 '上下边距设为15毫米
    .MarginBottom = 10
End With

'打开工作簿
Book.Save("c:\123.xls")
Dim Proc As New Process
Proc.File = "c:\123.xls"
Proc.Start()


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/15 15:20:00 [只看该作者]

你前面设置了列标题垂直居中,结果后面又有:

For r As Integer = 0 to dt.rows.Count -1
    For c As Integer =0 To dt.Cols.Count -2
        Sheet(r,c).Style = Style1
    Next
Next

等于所有单元格重新按照Style1的设置排列,而Style1设置了水平和垂直居中吗?

图片点击可在新窗口打开查看


 回到顶部
美女呀,离线,留言给我吧!
yangming
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2009/4/15 16:15:00 [只看该作者]

其它的都可以了,只是这个列宽和行高我无论放在何处,都只是列宽起作用,而行高却对我所选之外的行起作用,是什么原因呢?放在何处才对呢?

Sheet.DefaultColumnWidth = 100   '列宽
Sheet.DefaultRowHeight = 80         '行高

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/15 16:19:00 [只看该作者]

呵呵,这是正常的,因为行高等于模板中的实际行高。

可以这样:

For r As Integer = 0 to Sheet.rows.Count -1
   sheet.rows(r).height = 80

next


 回到顶部
美女呀,离线,留言给我吧!
yangming
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2009/4/15 16:44:00 [只看该作者]

好了,谢谢贺老师,我改了一下,第一行设为30,其它行设为25,这样就好看多了,呵呵
[此贴子已经被作者于2009-4-15 16:44:01编辑过]

 回到顶部