Foxtable(狐表)用户栏目专家坐堂 → EXCEL的问题


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

主题:EXCEL的问题

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


加好友 发短信
等级:一尾狐 帖子:437 积分:2943 威望:0 精华:0 注册:2011/3/15 12:49:00
EXCEL的问题  发帖心情 Post By:2021/4/8 15:36:00 [显示全部帖子]

Dim FirstRow As Integer = Ws.Range("A1").End(MSExcel.XlDirection.xlDown).Row
'对A列从第1行开始向下查找,直到找到最后一个非空单元格为止,并得到其行号.也就是有内容的开始行

这个是找到最后一个非空行,那如何找到最后一个非空列呢?

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


加好友 发短信
等级:一尾狐 帖子:437 积分:2943 威望:0 精华:0 注册:2011/3/15 12:49:00
  发帖心情 Post By:2021/4/8 15:59:00 [显示全部帖子]

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xlsx" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    MessageBox.Show("你选择的是:" & dlg.FileName,"提示") '提示用户选择的文件
Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(dlg.FileName)
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
Dim Rg As MSExcel.Range = Ws.UsedRange
Dim FirstRow As Integer = Ws.Range("A1").End(MSExcel.XlDirection.xlDown).Row
Dim FirstCol As Integer = ws.Range("iv1").End(MsExcel.XlDirection.xlToRight).Column
msgbox(FirstRow & "," & FirstCol)
End If

结果 列为16384图片点击可在新窗口打开查看

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


加好友 发短信
等级:一尾狐 帖子:437 积分:2943 威望:0 精华:0 注册:2011/3/15 12:49:00
  发帖心情 Post By:2021/4/9 14:48:00 [显示全部帖子]

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xlsx" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    MessageBox.Show("你选择的是:" & dlg.FileName,"提示") '提示用户选择的文件
    Dim Str1 As String = dlg.FileName
    Dim fx As String
    If Str1 > "" AndAlso Str1.Contains("返修") Then
        fx = "返修单"
    End If
    Dim khmc As String
    khmc = FileSys.GetName(dlg.FileName).SubString(0,3)
    msgbox(khmc)
    Dim App As New MSExcel.Application
    Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(dlg.FileName)
    Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
    Dim Rg1 As MSExcel.Range
    Dim rowsmax As Integer = 0
    Dim colmax As Integer = 0
    Dim x As String
    Dim y As String
    Dim x1 As String
    Dim y1 As String
    Dim x2 As String
    Dim y2 As String
    Dim chrq As String
    Dim rg = Ws.UsedRange
    For i As Integer =1 To rg.Columns.count
        Dim r = ws.cells(1000,i).End(MsExcel.XlDirection.xlUp).Row
        If r > RowsMax Then
            RowsMax = r
        End If
    Next
    For i As Integer = 1 To rowsMax
        Dim r = ws.cells(i,200).End(MsExcel.XLDirection.xlToLeft).Column
        If r > ColMax  Then
            ColMax = r
        End If
    Next
    For i As Integer = 1 To RowsMax
        For j As Integer = 1 To ColMax
            Rg1 = Ws.Cells(i,j)
            If Rg1.text = "箱号" Then
                x = i
                y = j
            End If
        Next
    Next
    For i As Integer = 1 To RowsMax
        For j As Integer = 1 To ColMax
            Rg1 = Ws.Cells(i,j)
            If Rg1.text = "总计:" Then
                x1 = i
                y1 = j
            End If
        Next
    Next
    For i As Integer = 1 To RowsMax
        For j As Integer = 1 To ColMax
            Rg1 = Ws.Cells(i,j)
            If Rg1.text.Contains("出货日期") Then
                x2 = i
                y2 = j
                Dim chr As String
                chr = Ws.Cells(i,j).Value.SubString(5).Trim(" ").Replace("/","-")
                Dim Day As Date = chr
                chrq = Format(Day,"d")
                msgbox(chrq)
            End If
        Next
    Next
    msgbox("箱号位置在" & x & "," & y & "总计位置在" & x1 & "," & y1 & "出货日期位置在" & x2 & "," & y2 )
    Dim Builder As New ADOXBuilder
    Dim tbl As ADOXTable
    Builder.Open()
    tbl = Builder.NewTable("临时箱单") '创建表
    With tbl
        For j As Integer = y To ColMax
            Rg1 = Ws.Cells(x,j)
            Dim bt As String = Rg1.text.Trim(" ").Replace("/","")
            .AddColumn(bt,ADOXType.String, 25)
            msgbox(bt)
        Next
    End With
    Builder.AddTable(tbl) '增加表
    Builder.Close()
    
End If

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

新增表已完成,
1、请问怎么把EXCEL里的数据填入对应的数据列里呢?如何编写这个代码?
2、这个代码运行好像比较慢这是为什么?


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


加好友 发短信
等级:一尾狐 帖子:437 积分:2943 威望:0 精华:0 注册:2011/3/15 12:49:00
  发帖心情 Post By:2021/4/9 15:10:00 [显示全部帖子]

你提供的参考我看了,但是有一定的区别,主要是我的数据表列是按照EXCEL生成的,在生成时不知道列名,请问怎么做?

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


加好友 发短信
等级:一尾狐 帖子:437 积分:2943 威望:0 精华:0 注册:2011/3/15 12:49:00
  发帖心情 Post By:2021/4/9 16:23:00 [显示全部帖子]

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xlsx" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    MessageBox.Show("你选择的是:" & dlg.FileName,"提示") '提示用户选择的文件
    Dim Str1 As String = dlg.FileName
    Dim fx As String
    If Str1 > "" AndAlso Str1.Contains("返修") Then
        fx = "返修单"
    End If
    Dim khmc As String
    khmc = FileSys.GetName(dlg.FileName).SubString(0,3)
    msgbox(khmc)
    Dim App As New MSExcel.Application
    Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(dlg.FileName)
    Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
    Dim Rg1 As MSExcel.Range
    Dim rowsmax As Integer = 0
    Dim colmax As Integer = 0
    Dim x As String
    Dim y As String
    Dim x0 As String
    Dim y0 As String
    Dim x1 As String
    Dim y1 As String
    Dim x2 As String
    Dim y2 As String
    Dim chrq As String
    Dim rg = Ws.UsedRange
    For i As Integer =1 To rg.Columns.count
        Dim r = ws.cells(1000,i).End(MsExcel.XlDirection.xlUp).Row
        If r > RowsMax Then
            RowsMax = r
        End If
    Next
    For i As Integer = 1 To rowsMax
        Dim r = ws.cells(i,200).End(MsExcel.XLDirection.xlToLeft).Column
        If r > ColMax  Then
            ColMax = r
        End If
    Next
    For i As Integer = 1 To RowsMax
        For j As Integer = 1 To ColMax
            Rg1 = Ws.Cells(i,j)
            If Rg1.text = "箱号" Then
                x = i
                y = j
            End If
        Next
    Next
    For i As Integer = 1 To RowsMax
        For j As Integer = 1 To ColMax
            Rg1 = Ws.Cells(i,j)
            If Rg1.text = "本次出货" Then
                x0 = i
                y0 = j
            End If
        Next
    Next
    For i As Integer = 1 To RowsMax
        For j As Integer = 1 To ColMax
            Rg1 = Ws.Cells(i,j)
            If Rg1.text = "总计:" Then
                x1 = i
                y1 = j
            End If
        Next
    Next
    For i As Integer = 1 To RowsMax
        For j As Integer = 1 To ColMax
            Rg1 = Ws.Cells(i,j)
            If Rg1.text.Contains("出货日期") Then
                x2 = i
                y2 = j
                Dim chr As String
                chr = Ws.Cells(i,j).Value.SubString(5).Trim(" ").Replace("/","-")
                Dim Day As Date = chr
                chrq = Format(Day,"d")
                msgbox(chrq)
            End If
        Next
    Next
    msgbox("箱号位置在" & x & "," & y & "总计位置在" & x1 & "," & y1 & "出货日期位置在" & x2 & "," & y2 )
    Dim Builder As New ADOXBuilder
    Dim tbl As ADOXTable
    Builder.Open()
    tbl = Builder.NewTable("临时箱单") '创建表
    With tbl
        For j As Integer = y To y0
            Rg1 = Ws.Cells(x,j)
            Dim bt As String = Rg1.text.Trim(" ").Replace("/","")
            .AddColumn(bt,ADOXType.String, 25)
            msgbox(bt)
        Next
    End With
    Builder.AddTable(tbl) '增加表
    Builder.Close()
    Dim Book As New XLS.Book("I:\transDetail2021-03-24.xls")
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Tables("临时箱单").StopRedraw()
    For Each dc As DataCol In DataTables("临时箱单").DataCols
        Dim nms As String = dc.Name
        For n As Integer = x+1 To x1
            Dim r As Row = Tables("临时箱单").AddNew()
            For m As Integer = y To y0
                r(nms(m)) = Sheet(n,m).Value
            Next
        Next
        Tables("临时箱单").ResumeRedraw()
    Next
End If

好像这句话错了,你帮我看看

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


加好友 发短信
等级:一尾狐 帖子:437 积分:2943 威望:0 精华:0 注册:2011/3/15 12:49:00
  发帖心情 Post By:2021/4/9 16:39:00 [显示全部帖子]

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:窗口,窗口1,Button5,Click
详细错误信息:
列“号”不属于表 临时箱单。

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


加好友 发短信
等级:一尾狐 帖子:437 积分:2943 威望:0 精华:0 注册:2011/3/15 12:49:00
  发帖心情 Post By:2021/4/9 16:42:00 [显示全部帖子]

        For Each dc As DataCol In DataTables("临时箱单").DataCols
        Dim nms As String = dc.Name
        r(nms(m)) = Sheet(n,m).Value
好像是这个3条有问题

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


加好友 发短信
等级:一尾狐 帖子:437 积分:2943 威望:0 精华:0 注册:2011/3/15 12:49:00
  发帖心情 Post By:2021/4/9 17:11:00 [显示全部帖子]

不知道咋对应哦

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


加好友 发短信
等级:一尾狐 帖子:437 积分:2943 威望:0 精华:0 注册:2011/3/15 12:49:00
  发帖心情 Post By:2021/4/10 18:08:00 [显示全部帖子]

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xlsx" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    MessageBox.Show("你选择的是:" & dlg.FileName,"提示") '提示用户选择的文件
    Dim Str1 As String = dlg.FileName
    Dim fx As String
    If Str1 > "" AndAlso Str1.Contains("返修") Then
        fx = "返修单"
    End If
    Dim khmc As String
    khmc = FileSys.GetName(dlg.FileName).SubString(0,3)
    Dim App As New MSExcel.Application
    Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(dlg.FileName)
    Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
    Dim Rg1 As MSExcel.Range
    Dim rowsmax As Integer = 0
    Dim colmax As Integer = 0
    Dim x As String
    Dim y As String
    Dim x0 As String
    Dim y0 As String
    Dim x1 As String
    Dim y1 As String
    Dim x2 As String
    Dim y2 As String
    Dim x3 As String
    Dim y3 As String
    Dim x4 As String
    Dim y4 As String
    Dim chrq As String
    Dim rg = Ws.UsedRange
    For i As Integer =1 To rg.Columns.count
        Dim r = ws.cells(1000,i).End(MsExcel.XlDirection.xlUp).Row
        If r > RowsMax Then
            RowsMax = r
        End If
    Next
    For i As Integer = 1 To rowsMax
        Dim r = ws.cells(i,200).End(MsExcel.XLDirection.xlToLeft).Column
        If r > ColMax  Then
            ColMax = r
        End If
    Next
    For i As Integer = 1 To RowsMax
        For j As Integer = 1 To ColMax
            Rg1 = Ws.Cells(i,j)
            If Rg1.text = "箱号" Then
                x = i
                y = j
            End If
        Next
    Next
    For j As Integer = 1 To ColMax
        Rg1 = Ws.Cells(x,j)
        If Rg1.text = "颜色" Then
            x3 = x
            y3 = j
        End If
    Next
    For j As Integer = 1 To ColMax
        Rg1 = Ws.Cells(x,j)
        If Rg1.text = "合计" Then
            x4 = x
            y4 = j
        End If
    Next
    For i As Integer = 1 To RowsMax
        For j As Integer = 1 To ColMax
            Rg1 = Ws.Cells(i,j)
            If Rg1.text = "本次出货" Then
                x0 = i
                y0 = j
            End If
        Next
    Next
    For i As Integer = 1 To RowsMax
        For j As Integer = 1 To ColMax
            Rg1 = Ws.Cells(i,j)
            If Rg1.text = "总计:" Then
                x1 = i
                y1 = j
            End If
        Next
    Next
    For i As Integer = 1 To RowsMax
        For j As Integer = 1 To ColMax
            Rg1 = Ws.Cells(i,j)
            If Rg1.text.Contains("出货日期") Then
                x2 = i
                y2 = j
                Dim chr As String
                chr = Ws.Cells(i,j).Value.SubString(5).Trim(" ").Replace("/","-")
                Dim Day As Date = chr
                chrq = Format(Day,"d")
            End If
        Next
    Next
    Dim tbl As New DataTableBuilder("临时箱单")
    Dim Lst As New List(Of String)
    Dim nms() As String
    With tbl
        For j As Integer = y To y0
            Rg1 = Ws.Cells(x,j)
            Dim bt As String = Rg1.text.Trim(" ")
            tbl.AddDef(bt, Gettype(String), 32)
            Lst.Add(bt)
        Next
        nms = Lst.ToArray() '将集合转换为数组
    End With
    tbl.Build()
    MainTable= Tables("表A")
    Dim Book As New XLS.Book(dlg.FileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Tables("临时箱单").StopRedraw()
    For n As Integer = x To x1-2
        Dim r As Row = Tables("临时箱单").AddNew()
        For m As Integer = 0 To nms.Length - 1
            r(nms(m)) = Sheet(n,m).Value
        Next
    Next
    Tables("临时箱单").ResumeRedraw()
    Dim dtb As New DataTableBuilder("临时出货明细")
    dtb.AddDef("箱号", Gettype(String), 4)
    dtb.AddDef("品类", Gettype(String), 10)
    dtb.AddDef("款号", Gettype(String), 10)
    dtb.AddDef("颜色", Gettype(String), 10)
    dtb.AddDef("规格", Gettype(String), 10)
    dtb.AddDef("数量", Gettype(Double))
    dtb.AddDef("出货日期", Gettype(String), 15)
    dtb.Build()


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


加好友 发短信
等级:一尾狐 帖子:437 积分:2943 威望:0 精华:0 注册:2011/3/15 12:49:00
  发帖心情 Post By:2021/4/10 18:08:00 [显示全部帖子]

    Dim Lst1 As New List(Of String)
    Dim kms() As String
    With dtb
        For j As Integer = y3+1 To y4-1
            Rg1 = Ws.Cells(x,j)
            Dim bt As String = Rg1.text.Trim(" ")
            dtb.AddDef(bt, Gettype(String), 32)
            Lst1.Add(bt)
        Next
        kms = Lst1.ToArray() '将集合转换为数组
    End With
    For Each dr1 As DataRow In DataTables("临时箱单").DataRows
        For Each km As String In kms
            If dr1(km)> ""  Then
                Dim dr2 As DataRow = DataTables("临时出货明细").AddNew()
                dr2("箱号") = dr1("箱号")
                dr2("品类") = dr1("品类")
                dr2("款号") = dr1("款号").ToUpper()
                dr2("颜色") = dr1("颜色")
                dr2("规格") = km
                dr2("数量") = dr1(km)
                dr2("出货日期") = chrq
            End If
        Next
    Next
    MainTable = Tables("表A")
End If

问题暂时解决了,就是比较麻烦,先要见一个导入表,然后再建一个明细表,请问有什么办法解决?

 回到顶部
总数 25 1 2 3 下一页