none
vb.net中导数据到excel中数据丢失了,什么原因? RRS feed

  • 问题

  • 从vb.net中导数据到excel中数据从10万丢失到6万多,网上找了好多,人家说是因为excel的版本低于2007的
    最大上限是65536行数据,但我用了2007,2013都一个结果,又有人说把后缀改成“.xlsx”但是这样导出的数据用excel2007和2013都打不开,能用WPS2016打开,数据显示还是6万多,到底怎么弄啊大神们?导数据代码如1图

    excel显示错误如2图

    还有就是页面上查询数据有点慢是不是原因啊?还有就是用的是spreadsheet控件。


    2016年7月25日 6:03

答案

  • 谢谢!已解决,代码如下:
    Public Sub spreadToExcelExport(ByVal obj As FarPoint.Win.Spread.FpSpread)
            Dim excelapp As New Excel.Application
            excelapp.Workbooks.Add(True)
    
            Dim matrix(obj.ActiveSheet.RowCount, obj.ActiveSheet.ColumnCount - 1) As String
            Dim i, j As Integer
    
           
            For j = 0 To obj.ActiveSheet.ColumnCount - 1
                matrix(0, j) = obj.ActiveSheet.ColumnHeader.Cells(0, j).Value
            Next
    
            For i = 0 To obj.ActiveSheet.RowCount - 1
                For j = 0 To obj.ActiveSheet.ColumnCount - 1
                    matrix(i + 1, j) = obj.ActiveSheet.Cells(i, j).Text
                Next
            Next
    
            Dim oRange As Excel.Range = excelapp.Range("A1")
            oRange = oRange.Resize(obj.ActiveSheet.RowCount + 1, obj.ActiveSheet.ColumnCount)
            oRange.Value = matrix
    
            excelapp.Visible = True
        End Sub
    


    2016年8月4日 2:44

全部回复

  • 是不是你导出数据用的还是老的接口?

    试试SQL Server自己的导入导出向导,那个是SSIS实现的。


    想不想时已是想,不如不想都不想。

    2016年7月25日 6:32
    版主
  • 不是sql server数据库,是oracle数据库,
    2016年7月25日 9:33
  • 这里是微软的ms sql server 论坛,你问oracle是来踢馆的么!

    呵呵开个玩笑,应该是你写入excel的方式错误。最简单的方式你使用csv格式(实际是文本格式,逗号分隔)导出后,检查是否是实际的行数。如果没问题说明就是写excel的方式错误了。

    了解一下如何写最新格式的excel就好了。


    family as water

    2016年7月25日 9:42
  • 用你说的方法试了,还是最大6万多,还是丢失了,怎么传的图片不可见啊,我把代码都写在里面了,下面是代码,麻烦帮我看看,大哥,谢谢了:

     Public Sub convertExcel(ByVal obj As FarPoint.Win.Spread.FpSpread, ByVal strTitle As String)
            Dim ExcelStatus As Boolean = True
            Try
                Dim saveEx As New SaveFileDialog
                Dim fileName As String = strTitle + ".xls"
    
                saveEx.Filter = "Excel File|*.xls"
                saveEx.DefaultExt = "xls"
                saveEx.Title = "Save an Excel File"
                saveEx.RestoreDirectory = True
                saveEx.FileName = fileName
    
                If saveEx.ShowDialog() = DialogResult.OK Then
                    obj.Sheets(0).Protect = False
                    'obj.SaveExcel(saveEx.FileName, FarPoint.Win.Spread.Model.IncludeHeaders.ColumnHeadersCustomOnly)
                    ' obj.SaveExcel(saveEx.FileName, FarPoint.Excel.ExcelSaveFlags.SaveCustomRowHeaders)
                    obj.SaveExcel(saveEx.FileName, ExcelSaveFlags.NoFlagsSet)
                    If ExcelStatus Then
                        MsgBox("Success Export Excel", MsgBoxStyle.Information Or MsgBoxStyle.OkOnly)
                    End If
                End If


    • 已编辑 WWW_122 2016年7月26日 1:57
    2016年7月26日 1:55
  • 不是说你的把文件用excel2007打开或者将后缀改为xlsx就自动变成excel2007文件,文件依然是excel2003文件

    建议使用excel2007或之后版本创建一个新的文件


    Love SQL

    2016年7月26日 5:49
  • 还是一样,
    2016年7月26日 6:48
  • 你这是保存的代码,导入的时候你就导成excel 2003了,所以就只有65535行。

    想不想时已是想,不如不想都不想。

    2016年7月27日 3:37
    版主
  • 怎样才能大于65535呢,没能实现
    2016年7月28日 1:42
  • 你好,

    即使使用excel 2003 以后的版本,也有数量的限制(1048576 行), 我建议你导出时使用多个sheet,导入到不同的sheet上。

    以下的链接,提供了导到多个sheet 的代码,你可以参考一下。

    http://stackoverflow.com/questions/19566806/exporting-data-to-multiple-excel-sheets

    Best regards,

    Cole Wu


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2016年8月2日 7:10
    版主
  • 谢谢!已解决,代码如下:
    Public Sub spreadToExcelExport(ByVal obj As FarPoint.Win.Spread.FpSpread)
            Dim excelapp As New Excel.Application
            excelapp.Workbooks.Add(True)
    
            Dim matrix(obj.ActiveSheet.RowCount, obj.ActiveSheet.ColumnCount - 1) As String
            Dim i, j As Integer
    
           
            For j = 0 To obj.ActiveSheet.ColumnCount - 1
                matrix(0, j) = obj.ActiveSheet.ColumnHeader.Cells(0, j).Value
            Next
    
            For i = 0 To obj.ActiveSheet.RowCount - 1
                For j = 0 To obj.ActiveSheet.ColumnCount - 1
                    matrix(i + 1, j) = obj.ActiveSheet.Cells(i, j).Text
                Next
            Next
    
            Dim oRange As Excel.Range = excelapp.Range("A1")
            oRange = oRange.Resize(obj.ActiveSheet.RowCount + 1, obj.ActiveSheet.ColumnCount)
            oRange.Value = matrix
    
            excelapp.Visible = True
        End Sub
    


    2016年8月4日 2:44
  • 不错,可以参考
    2016年8月4日 2:44