Foxtable(狐表)用户栏目专家坐堂 → 代码填充导成excel,列数超过了256列,导致报错,说列超过限制,怎么解决啊?


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

主题:代码填充导成excel,列数超过了256列,导致报错,说列超过限制,怎么解决啊?

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
代码填充导成excel,列数超过了256列,导致报错,说列超过限制,怎么解决啊?  发帖心情 Post By:2021/12/7 13:49:00 [只看该作者]

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) = 130
Next

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"

Dim x_c As String=""  '记录第一层的列名
Dim k As Integer=0
Dim Style As XLS.Style = Book.NewStyle() '定义新样式
Style.AlignHorz = XLS.AlignHorzEnum.Center


图片点击可在新窗口打开查看此主题相关图片如下:123.png
图片点击可在新窗口打开查看

Dim t As String = "aa"
Dim idx 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)  '指定列标题    只要tables的列数超过256,这句就报错;tables列数不超过256列不报错
    Sheet.Cols(c).Width = 90 
    If  ar.length = 2 Then
        Sheet(1, c).Value = ar(1)
      End If
    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

    
    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 +2, c).Value = round2(dt.rows(r)(nms(c)),2)
            Else
                Sheet(r +2, c).Value = dt.rows(r)(nms(c))
            End If
        End If
    Next
Next
Dim dlg As New SaveFileDialog '定义一个新的SaveFileDialog
dlg.Filter= "Excel文件|*.xlsx" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then
    Book.Save(dlg.FileName)
    Dim Proc As New Process
    Proc.File = dlg.FileName
    Proc.Start()
End If

[此贴子已经被作者于2021/12/7 13:57:10编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

新建的文件默认是xls文件,不是xlsx,只能支持最多255列。

先保存为空的xlsx文件,然后重新打开xlsx文件,再填充数据。或者放一个空的xlsx文件,每次复制过来打开使用

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


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

如何用命令创建一个excel文件啊,比如abc.xlsx,帮助只查到了创建文件夹的方法啊。FileSys.CreateDirectory(ProjectPath & "Reports\")

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

Dim Book As New XLS.Book '定义一个Excel工作簿
Book.Save(“c:\123.xlsx”)
Book = New XLS.Book(“c:\123.xlsx”) ‘重新打开’

 回到顶部