Foxtable(狐表)用户栏目专家坐堂 → 求助:导出报表时间显示不对


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

主题:求助:导出报表时间显示不对

帅哥哟,离线,有人找我吗?
cxmxjwlmq
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:349 积分:4112 威望:0 精华:0 注册:2018/4/6 18:02:00
求助:导出报表时间显示不对  发帖心情 Post By:2018/6/19 16:21:00 [只看该作者]

各位老师们:

    我在窗口中的一个按钮下输入以下命令,求教如下:

       1、导出的报表时间显示不对,请问这代码那里出错了?

       2、我只设置的第一、第二行的行高,怎样能把所有有数据的行高都设置成30?

 

Dim dt As Table = Tables("车辆状态信息_table1")
    Dim nms() As String = {"日期","代号","车型","VIN码","发动机号","室颜色","状态","检验员"} '要导出的列名
    Dim caps() As String = {"日期","代号","车型","VIN码","发动机号","驾驶室颜色","状态","数据上报人"}'对应的列标题 
    Dim szs() As Integer = {90,60,100,150,100,90,60,90} '对应的列宽 
    Dim Book As New XLS.Book '定义一个Excel工作簿 
       Book.Sheets.Add("当日报工信息")'增加一个工作表
    Dim Sheet As XLS.Sheet = Book.Sheets("当日报工信息") '引用工作簿的第一个工作表
    Dim st As XLS.Style = Book.NewStyle '日期列的显示格式
        st.Format = "yyyy-MM-dd"
     Dim Style As XLS.Style = Book.NewStyle() '定义新样式
        Style.BorderTop = XLS.LineStyleEnum.Thin
        Style.BorderBottom = XLS.LineStyleEnum.Thin
        Style.BorderLeft = XLS.LineStyleEnum.Thin
        Style.BorderRight = XLS.LineStyleEnum.Thin
        Style.BorderColorTop = Color.Black
        Style.BorderColorBottom = Color.Black
        Style.BorderColorLeft = Color.Black
        Style.BorderColorRight = Color.Black
        Style.AlignHorz = XLS.AlignHorzEnum.Center '水平居中
        Style.AlignVert = XLS.AlignVertEnum.Center '垂直居中
        Sheet(0,0).Value = "当日报工信息" '定义表头信息
        Sheet(0,0).Style = Style '表头信息采用新样式:居中
        Sheet.MergeCell(0,0,1,8) '表头信息从第一行第一列开始合并一行八列
        Sheet.Rows(0).Height = 30  '设置第1行的行高
        Sheet.Rows(1).Height = 30  '设置第2行的行高
      For c As Integer = 0 To nms.length -1
         If dt.Cols(nms(c)).IsDate Then '如果是日期列
             Sheet.Cols(c).Style = st '设置显示格式      
         End If
         Sheet(1, c).Value = caps(c) '指定列标题
         Sheet(1,c).Style = Style '列标题开始调用新样式:居中
         Sheet.Cols(c).Width = szs(c) '指定列宽
     Next
     For r As Integer = 0 To dt.Rows.Count - 1 '填入数据
        For c As Integer = 0 To nms.length -1
            Sheet(r + 2, c).Style = Style '从第三行第二列开始调用新样式:居中
            Sheet(r + 2, c).Value = dt.rows(r)(nms(c))
        Next
      Next
   Book.Sheets.RemoveAt(0) '删除第一个工作表
   Book.Save("D:\质量管理系统\报工\车辆报工信息.xls")
   Dim Proc As New Process
   Proc.File = "D:\质量管理系统\报工\车辆报工信息.xls"
   Proc.Start()

 

导出的报表如下:

当日报工信息
日期 代号 车型 VIN码 发动机号 驾驶室颜色 状态 数据上报人
42857 Q087   SSSSSSSSSSS130460        
42857 Q087   SSSSSSSSSSS130460        
42857 Q087   SSSSSSSSSSS130460        
42857 Q087   SSSSSSSSSSS130460        
42857 Q087   SSSSSSSSSSS130460        
42857 Q087   SSSSSSSSSSS130460        
42857 Q087   SSSSSSSSSSS130460        
42857 Q087   SSSSSSSSSSS130460        

 

 

   求教!谢谢


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/19 18:41:00 [只看该作者]

1、

 

For r As Integer = 0 To dt.Rows.Count - 1 '填入数据
    For c As Integer = 0 To nms.length -1       
        If dt.cols(nms(c)).isdate Then           
            Sheet(r + 2, c).Style = st '从第三行第二列开始调用新样式:居中           
            Sheet(r + 2, c).Value = dt.rows(r)(nms(c))          

        Else
            Sheet(r + 2, c).Style = Style '从第三行第二列开始调用新样式:居中
            Sheet(r + 2, c).Value = dt.rows(r)(nms(c))
        End If
    Next
Next

2、

 

For r As Integer = 0 To dt.Rows.Count - 1 '填入数据

    Sheet.Rows(r+2).Height = 30  '设置第2行的行高
    For c As Integer = 0 To nms.length -1       
        If dt.cols(nms(c)).isdate Then           
            Sheet(r + 2, c).Style = st '从第三行第二列开始调用新样式:居中           
            Sheet(r + 2, c).Value = dt.rows(r)(nms(c))          

        Else
            Sheet(r + 2, c).Style = Style '从第三行第二列开始调用新样式:居中
            Sheet(r + 2, c).Value = dt.rows(r)(nms(c))
        End If
    Next
Next


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


加好友 发短信
等级:小狐 帖子:349 积分:4112 威望:0 精华:0 注册:2018/4/6 18:02:00
  发帖心情 Post By:2018/6/20 0:37:00 [只看该作者]

甜老师:

第二个问题解决了。谢谢!

但第一个问题没有解决,按你修改的命令,导出的结果见附件,但我想要的效果是第一列的(日期列)的格式要和其它列一样,显示日期格式并居中、带边框。

按钮命令如下:

Dim dt As Table = Tables("车辆状态信息_table1")
    Dim nms() As String = {"日期","代号","车型","VIN码","发动机号","室颜色","状态","检验员"} '要导出的列名
    Dim caps() As String = {"日期","代号","车型","VIN码","发动机号","驾驶室颜色","状态","数据上报人"}'对应的列标题 
    Dim szs() As Integer = {90,60,100,150,100,90,60,90} '对应的列宽 
    Dim Book As New XLS.Book '定义一个Excel工作簿 
       Book.Sheets.Add("当日报工信息")'增加一个工作表
    Dim Sheet As XLS.Sheet = Book.Sheets("当日报工信息") '引用工作簿的第一个工作表
    Dim st As XLS.Style = Book.NewStyle '日期列的显示格式
        st.Format = "yyyy-MM-dd"
     Dim Style As XLS.Style = Book.NewStyle() '定义新样式
        Style.BorderTop = XLS.LineStyleEnum.Thin
        Style.BorderBottom = XLS.LineStyleEnum.Thin
        Style.BorderLeft = XLS.LineStyleEnum.Thin
        Style.BorderRight = XLS.LineStyleEnum.Thin
        Style.BorderColorTop = Color.Black
        Style.BorderColorBottom = Color.Black
        Style.BorderColorLeft = Color.Black
        Style.BorderColorRight = Color.Black
        Style.AlignHorz = XLS.AlignHorzEnum.Center '水平居中
        Style.AlignVert = XLS.AlignVertEnum.Center '垂直居中
        Sheet(0,0).Value = "当日报工信息" '定义表头信息
        Sheet(0,0).Style = Style '表头信息采用新样式:居中
        Sheet.MergeCell(0,0,1,8) '表头信息从第一行第一列开始合并一行八列
        Sheet.Rows.Frozen = 2 '冻结前二行
      For c As Integer = 0 To nms.length -1
         If dt.Cols(nms(c)).IsDate Then '如果是日期列
             Sheet.Cols(c).Style = st '设置显示格式      
         End If
         Sheet(1, c).Value = caps(c) '指定列标题
         Sheet(1,c).Style = Style '列标题开始调用新样式:居中
         Sheet.Cols(c).Width = szs(c) '指定列宽
     Next
For r As Integer = 0 To dt.Rows.Count - 1 '填入数据
    Sheet.Rows(r).Height = 30  '设置所有行的行高
    For c As Integer = 0 To nms.length -1       
        If dt.cols(nms(c)).isdate Then           
            Sheet(r + 2, c).Style = st '从第三行第一列开始调用新样式:居中,带边框           
            Sheet(r + 2, c).Value = dt.rows(r)(nms(c))          
        Else
            Sheet(r + 2, c).Style = Style '从第三行第一列开始调用新样式:居中,带边框           
            Sheet(r + 2, c).Value = dt.rows(r)(nms(c))
        End If
    Next
Next
   Book.Sheets.RemoveAt(0) '删除第一个工作表
   Book.Save("D:\质量管理系统\报工\车辆报工信息.xls")
   Dim Proc As New Process
   Proc.File = "D:\质量管理系统\报工\车辆报工信息.xls"
   Proc.Start()

 

  请多费心!


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/20 8:48:00 [只看该作者]

加上代码

 

        st.BorderTop = XLS.LineStyleEnum.Thin
        st.BorderBottom = XLS.LineStyleEnum.Thin
        st.BorderLeft = XLS.LineStyleEnum.Thin
        st.BorderRight = XLS.LineStyleEnum.Thin
        st.BorderColorTop = Color.Black
        st.BorderColorBottom = Color.Black
        st.BorderColorLeft = Color.Black
        st.BorderColorRight = Color.Black
        st.AlignHorz = XLS.AlignHorzEnum.Center '水平居中
        st.AlignVert = XLS.AlignVertEnum.Center '垂直居中


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


加好友 发短信
等级:小狐 帖子:349 积分:4112 威望:0 精华:0 注册:2018/4/6 18:02:00
  发帖心情 Post By:2018/6/20 12:33:00 [只看该作者]

甜老师:非常感谢,问题全部解决!

    有点美中不足的,是第一列的日期行,有有没有数据,都带边框,不像其它的,没有数据的就没有边框!

要是能再改一个命令,使得日期列在没数据的单元格不带边框,就太完美了!

    劳你费心给改改命令?

感谢!


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/20 14:56:00 [只看该作者]

再设置一种样式(不带边框的日期格式),设置

 

If dt.cols(nms(c)).isdate Then
    If dt.rows(r)(nms(c)) = Nothing Then
        Sheet(r + 2, c).Style = 新样式
    Else

        Sheet(r + 2, c).Style = st
    End If
    Sheet(r + 2, c).Value = dt.rows(r)(nms(c))
Else
    Sheet(r + 2, c).Style = Style '从第三行第一列开始调用新样式:居中,带边框
    Sheet(r + 2, c).Value = dt.rows(r)(nms(c))
End If


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


加好友 发短信
等级:小狐 帖子:349 积分:4112 威望:0 精华:0 注册:2018/4/6 18:02:00
  发帖心情 Post By:2018/6/21 9:35:00 [只看该作者]

感谢甜老师,在你的指导下问题全部解决了!


 回到顶部