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


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

主题:统计表导成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


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


加好友 发短信
等级:超级版主 帖子:107739 积分:548028 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/6 10:22:00 [只看该作者]

关闭退出项目,删除项目所在的文件夹里的bin目录,然后重启项目试试。

调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm,看哪一句代码出错

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

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

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


加好友 发短信
等级:超级版主 帖子:107739 积分:548028 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/6 15:25:00 [只看该作者]

定义的数组长度是10000也,Dim nms(10000) As String

For c As Integer = 0 To nms.length -1  -- 也就是nms.length -1= 9999

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


加好友 发短信
等级:超级版主 帖子:107739 积分:548028 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/6 15:26:00 [只看该作者]

改为
Dim nms(Tables("统计表2").Cols.Count - 1) As String

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


加好友 发短信
等级:超级版主 帖子:107739 积分:548028 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/6 17:00:00 [只看该作者]

这个比较麻烦,根据下划线拆分,然后分别填入上下2行的单元格,判断刚刚填入的第一行的单元格如果和左边的单元格内容一样就合并:http://www.foxtable.com/webhelp/topics/1153.htm

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

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


加好友 发短信
等级:超级版主 帖子:107739 积分:548028 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/6 17:38:00 [只看该作者]

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

    End If
Next

 回到顶部
总数 13 1 2 下一页