Foxtable(狐表)用户栏目专家坐堂 → 统计表导成excel控制小数点后两位,提示错误


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

主题:统计表导成excel控制小数点后两位,提示错误

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
统计表导成excel控制小数点后两位,提示错误  发帖心情 Post By:2021/12/6 10:12:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看
错误提示什么意思啊?
Dim nms(10000) As String
Dim caps(10000) As String
Dim szs(10000) As Integer
For i As Integer = 0 To Tables("统计表2").Cols.Count - 1
    nms(i) = Tables("统计表2").Cols(i).name
    caps(i) =Tables("统计表2").Cols(i).caption
    szs(i) = 100
Next


Dim dt As Table=Tables("统计表2")
Dim Book As New XLS.Book '定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) '引用工作簿的第一个工作表
Dim st As XLS.Style = Book.NewStyle '日期列的显示格式
st.Format = "yyyy-MM-dd"

Dim nt As XLS.Style = Book.NewStyle '日期列的显示格式
nt.Format = "0.00"

For c As Integer = 0 To nms.length -1
    Sheet(0, c).Value = caps(c) '指定列标题
    Sheet.Cols(c).Width = szs(c) '指定列宽
    If dt.Cols(nms(c)).IsDate Then '如果是日期列
        Sheet.Cols(c).Style = st '设置显示格式
    End If
    
    If dt.Cols(nms(c)).IsNumeric  
        Sheet.Cols(c).Style = nt '设置显示格式
    End If   
Next


For r As Integer = 0 To dt.Rows.Count - 1 '填入数据
    For c As Integer = 0 To nms.length -1
        If dt.rows(r).IsNull(nms(c)) = False
            If dt.Cols(nms(c)).IsNumeric
                Sheet(r +1, c).Value = round2(dt.rows(r)(nms(c)),2)
            End If
        End If
    Next
Next


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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/12/6 10:52:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:22png.png
图片点击可在新窗口打开查看
在执行表头循环时就报错了。
For c As Integer = 0 To nms.length -1
    Sheet(0, c).Value = caps(c) '指定列标题
    Sheet.Cols(c).Width = szs(c) '指定列宽
    'If dt.Cols(nms(c)).IsDate Then '如果是日期列
        'Sheet.Cols(c).Style = st '设置显示格式
    'End If
    
    'If dt.Cols(nms(c)).IsNumeric
        'Sheet.Cols(c).Style = nt '设置显示格式
    'End If
Next

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/12/6 15:23:00 [显示全部帖子]

生成excel表头时提示 超出最大列数 256,什么意思啊?

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/12/6 16:25:00 [显示全部帖子]

用代码填充导出的excel的表头都是单层的:2021年4月_指标1   2021年4月_指标2    2021年4月_指标3
如何改成多层表头啊?显示为:       2021年4月
                                           指标1   指标2    指标3
[此贴子已经被作者于2021/12/6 16:25:30编辑过]

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/12/6 17:13:00 [显示全部帖子]

是在表头生成的时候做判断,才能使表头由一层变成两层啊?excel的代码操作不太会啊,多谢了
Dim dt As Table=Tables("统计表2")

Dim nms(dt.Cols.Count -1) As String    '列名称
Dim caps(dt.Cols.Count-1) As String    '列标题
Dim szs(dt.Cols.Count-1) As Integer
For i As Integer = 0 To Tables("统计表2").Cols.Count - 1
    nms(i) = Tables("统计表2").Cols(i).name    
    caps(i) =Tables("统计表2").Cols(i).caption
    szs(i) = 100
Next

For c As Integer = 0 To nms.length -1
    Sheet(0, c).Value = caps(c) '指定列标题
    Sheet.Cols(c).Width = szs(c) '指定列宽
    If **********  这里加个什么判断进行表头处理啊?

    End If
Next

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/12/7 9:40:00 [显示全部帖子]

1、我下面合并表头的代码,感觉写的太复杂了,有简便的方法吗

Dim x_c As String=""  '记录第一层的列名
Dim k As Integer=0
For c As Integer = 0 To nms.length -1
    Dim ar() As String = caps(c) .split("_")
    Sheet(0, c).Value = ar(0)  '指定列标题
    output.show(caps(c))
    If  ar.length = 2 Then
        Sheet(1, c).Value = ar(1)
        If  x_c = ""
            x_c = ar(0)
        ElseIf  x_c =ar(0) And c=nms.length -1
            k=k+1
            Sheet.MergeCell(0,c-k,1,k+1)
        ElseIf x_c =ar(0)  And c<>nms.length -1
             k=k+1
        ElseIf  x_c <>ar(0) 
            Sheet.MergeCell(0,c-k-1,1,k+1)
            x_c =ar(0)
            k=0
        End If
      End If
2、合并后的单元格,文本如何居中显示啊?
[此贴子已经被作者于2021/12/7 10:27:21编辑过]

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/12/7 11:03:00 [显示全部帖子]

  加上是否是循环到末尾,就完善了。否则,最后一组可以合并的话,就合并不了了。

 If t <> ar(0)  And c<>nms.length -1
        If c - idx <> 1
            Sheet.MergeCell(0,idx,1,c - idx)
            Sheet(0,idx).style = Style
        End If
        t = ar(0)
        idx = c
ElseIf  c=nms.length -1 And c - idx <> 1
            Sheet.MergeCell(0,idx,1,c - idx+1)
            Sheet(0,idx).style = Style
End If

 回到顶部