以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  导出Excel问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=155955)

--  作者:gudao123456
--  发布时间:2020/9/27 22:10:00
--  导出Excel问题
自定义了一个导出Excel窗口,但老默认为*.xls 导致出现“超过最大的行数65,536”的错误提示,代码如下:

.........

Dim dlg As New SaveFileDialog \'定义一个新的SaveFileDialog
dlg.Filter= "Excel文件|*.xls" \'设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    MessageBox.Show("你要保存为:" & dlg.FileName,"提示") \'提示用户选择的文件
Else
    MessageBox.Show("你没有输入导出文件名,如需导出请再次进入","提示")
    Forms("导出学生信息Excel").close()
    Return
End If


就是把 dlg.Filter= "Excel文件|*.xls"  改为:dlg.Filter= "Excel文件|*.xlsx" 也一样提示错误  为何?谢谢!

--  作者:有点蓝
--  发布时间:2020/9/27 22:39:00
--  
xls 最多支持65,536行,xlsx肯定可以。怎么导的,没看到导出的代码
--  作者:gudao123456
--  发布时间:2020/9/27 22:56:00
--  
行数少时可以,行数多了就不行了。
代码如下:
Dim tb As Table=CurrentTable

Dim ckl As WinForm.CheckedListBox = e.Form.Controls("CheckedListBox1")
Dim nms1 As New List(of String)
Dim nms As New List(of String)
For i As Integer = 0 To ckl.Items.count - 1 \'获取已经勾选的列
    If ckl.GetItemChecked(i) Then
        For Each dc As Col In tb.Cols
            If dc.caption=ckl.Items(i)  Then
                nms.Add(dc.name)
                nms1.Add(dc.caption)
                
                Exit For
            End If
        Next
    End If
Next
\'

\'End If
\'Next
If nms.Count = 0 Then
    MessageBox.Show("至少要选择一列","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return
End If
\'生成Excel表
Dim dt As Table =tb
Dim Book As New XLS.Book
Dim Sheet As XLS.Sheet = Book.Sheets(0)
For i As Integer = 0 To nms1.count -1
    Sheet(0, i).Value = nms1(i)
Next
For r As Integer = 0 To dt.Rows.Count - 1 \'填入数据
    For i As Integer = 0 To nms.count -1
        Sheet(r + 1, i).Value = dt.rows(r)(nms(i))
    Next
Next
\'保存并打开excel文件
Dim dlg As New SaveFileDialog \'定义一个新的SaveFileDialog
dlg.Filter= "Excel文件|*.xlsx" \'设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    MessageBox.Show("你要保存为:" & dlg.FileName,"提示") \'提示用户选择的文件
Else
    \' MessageBox.Show("你没有输入导出文件名,如需导出请再次进入","提示")
    Forms("导出学生信息Excel").close()
    Return
End If
Book.Save(dlg.FileName)
Dim Proc As New Process
Proc.File =dlg.FileName
Proc.Start()

--  作者:有点蓝
--  发布时间:2020/9/27 23:09:00
--  
先保存,在打开导入:

\'生成Excel表
Dim dt As Table =tb
\'保存并打开excel文件
Dim dlg As New SaveFileDialog \'定义一个新的SaveFileDialog
dlg.Filter= "Excel文件|*.xlsx" \'设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    MessageBox.Show("你要保存为:" & dlg.FileName,"提示") \'提示用户选择的文件
Dim Book As New XLS.Book
Book.Save(dlg.FileName)
Book = New XLS.Book(dlg.FileName)
Dim Sheet As XLS.Sheet = Book.Sheets(0)
For i As Integer = 0 To nms1.count -1
    Sheet(0, i).Value = nms1(i)
Next
For r As Integer = 0 To dt.Rows.Count - 1 \'填入数据
    For i As Integer = 0 To nms.count -1
        Sheet(r + 1, i).Value = dt.rows(r)(nms(i))
    Next
Next
Book.Save(dlg.FileName)
Dim Proc As New Process
Proc.File =dlg.FileName
Proc.Start()
Else
    \' MessageBox.Show("你没有输入导出文件名,如需导出请再次进入","提示")
    Forms("导出学生信息Excel").close()
    Return
End If


--  作者:gudao123456
--  发布时间:2020/9/27 23:15:00
--  
还是不行


--  作者:有点蓝
--  发布时间:2020/9/28 8:44:00
--  
我测试没有任何问题。代码没有抄对吧?或者试试安装下面的数据访问组件:

http://www.foxtable.com/download/AccessDatabaseEngine.exe


或者试试使用vba:http://www.foxtable.com/webhelp/topics/2121.htm
[此贴子已经被作者于2020/9/28 8:47:19编辑过]

--  作者:gudao123456
--  发布时间:2020/9/29 0:05:00
--  
OK了 谢谢!