Foxtable(狐表)用户栏目专家坐堂 → [求助]将EXCEL导入公式如何写?


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

主题:[求助]将EXCEL导入公式如何写?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/23 21:00:00 [显示全部帖子]

Dim dt1 As DataTable = DataTables("学生")
Dim dt2 As DataTable = DataTables("成绩")
Dim dlg As new OpenFileDialog
If dlg.ShowDialog = DialogResult.OK Then
    Dim book As new XLS.Book(dlg.FileName)
    Dim sheet As XLS.Sheet = book.Sheets(0)
    For i As Integer = 0 To sheet.Rows.count-1
        If sheet(i,0).text = "姓    名" Then
            Dim ndr As DataRow = dt1.AddNew
            ndr("学号") = sheet(i,5).text
            ndr("姓名") = sheet(i,1).text
            For j As Integer = i+6 To sheet.Rows.count-1
                If sheet(j,0).text > "" Then
                    Dim ncdr As DataRow = dt2.addnew
                    ncdr("xhdm") = ndr("学号")
                    ncdr("课程") = sheet(j,0).text
                    ncdr("学分") = sheet(j,2).text
                    ncdr("学分绩点") = sheet(j,3).text
                    ncdr("成绩") = sheet(j,4).text
                Else
                    i = j
                    Exit For
                End If
            Next
        End If
    Next
End If

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/23 22:01:00 [显示全部帖子]

'''
Dim dt1 As DataTable = DataTables("学生")
Dim dt2 As DataTable = DataTables("成绩")
Dim dlg As new OpenFileDialog
If dlg.ShowDialog = DialogResult.OK Then
    Dim book As new XLS.Book(dlg.FileName)
    Dim sheet As XLS.Sheet = book.Sheets(0)
    For i As Integer = 0 To sheet.Rows.count-1
        If sheet(i,0).text = "姓    名" Then
            Dim ndr As DataRow = dt1.AddNew
            ndr("学号") = sheet(i,5).text
            ndr("姓名") = sheet(i,1).text
            For j As Integer = i+6 To sheet.Rows.count-1
                If sheet(j,0).text > "" Then
                    If sheet(j,0).text.trim <> "高等数学(课件)" AndAlso sheet(j,0).text.trim <> "大学物理(课件)" Then
                        Dim ncdr As DataRow = dt2.addnew
                        ncdr("xhdm") = ndr("学号")
                        ncdr("课程") = sheet(j,0).text.trim
                        ncdr("学分") = sheet(j,2).text
                        ncdr("学分绩点") = sheet(j,3).text
                        ncdr("成绩") = sheet(j,4).text
                    End If
                Else
                    i = j
                    Exit For
                End If
            Next
        End If
    Next
End If

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/24 9:05:00 [显示全部帖子]

以下是引用大雪山在2017/11/23 23:12:00的发言:
这个公式如能身份证号 专业 学习形式 这三项能加进去就完美解决,麻烦老师再修改一下,谢谢

 

 

这个是很简单的问题,请自行修改代码,看红色代码,修改其位置即可,如

 

     If sheet(i,0).text = "姓    名" Then
            Dim ndr As DataRow = dt1.AddNew
            ndr("学号") = sheet(i,5).text
            ndr("姓名") = sheet(i,1).text
            msgbox(sheet(i+1,5).Text)

            msgbox(sheet(i+4,2).Text)


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/24 10:07:00 [显示全部帖子]

ndr("身份证") = sheet(i+1,5).Text

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/27 12:39:00 [显示全部帖子]

Dim dlg As New OpenFileDialog
dlg.Filter = "Excel文件|*.xls;*.xlsx"
If dlg.ShowDialog =DialogResult.OK Then
    Dim dt1 As DataTable = DataTables("学生")
    Dim dt2 As DataTable = DataTables("成绩")
    Dim App As New MSExcel.Application
    try
        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 ary = rg.value
        Dim dic As new Dictionary(of Integer, object)
        For Each s As object In ws.Shapes
            Dim rng = s.TopLeftCell
            If dic.ContainsKey(rng.Row) = False Then
                dic.Add(rng.Row, s)
            Else
                dic(rng.Row) = s
            End If
        Next
       
        For n As Integer = 1 To rg.Rows.Count
            If ary(n,1) = "姓    名" Then
                Dim ndr As DataRow = dt1.AddNew
                ndr("学号") = ary(n,6)
                ndr("姓名") = ary(n,2)
                If dic.ContainsKey(n) Then
                    Dim name = ary(n, 6).trim & ".jpg"
                    dic(n).copy
                    Dim c = Ws.ChartObjects.Add(0,0,dic(n).width, dic(n).height)
                    c.chart.paste
                    c.chart.Export(projectPath & "attachments/" & name)
                   
                    ndr("第四列") = name
                End If
               
               
                For j As Integer = n+6 To rg.Rows.Count
                    If ary(j,1) > "" Then
                        Dim ncdr As DataRow = dt2.addnew
                        ncdr("学号") = ndr("学号")
                        ncdr("课程") = ary(j,1)
                        ncdr("学分") = ary(j,3)
                        ncdr("学分绩点") = ary(j,4)
                        ncdr("成绩") = ary(j,5)
                    Else
                        n = j
                        Exit For
                    End If
                Next
            End If
        Next
        MessageBox.Show("导入成功!","恭喜!")
        wb.saved = True
    catch ex As exception
        msgbox(ex.message)
        MessageBox.Show("导入失败!","恭喜!")
    finally
        app.quit
    End try
End If

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/27 16:21:00 [显示全部帖子]

以下是引用大雪山在2017/11/27 15:58:00的发言:
 导入产生错误,如何解决?
 

图片点击可在新窗口打开查看此主题相关图片如下:ki}acp{t_{0$hb_}l$oit.png

[此贴子已经被作者于2017/11/27 15:59:49编辑过]

 

在你的项目那里,加入一个文件夹,命名为 attachments


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/29 8:38:00 [显示全部帖子]

没看懂你什么意思,截图说明你要做什么。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/29 9:19:00 [显示全部帖子]

Dim dt As DataTable = DataTables("成绩")
Dim Result As DialogResult
Result = MessageBox.Show("确定要导入吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Result = DialogResult.Yes Then
    Dim dlg As New OpenFileDialog
    dlg.Filter = "Excel文件|*.xls"
    dlg.MultiSelect = True '允许选择多个文件
    If dlg.ShowDialog =DialogResult.OK Then
        Dim Book As New XLS.Book(dlg.FileName)
        Dim Sheet As XLS.Sheet = Book.Sheets("Sheet1")
        dt.ResumeRedraw()
        dt.StopRedraw()
        'systemready = False
        Dim nms As New Dictionary(Of String, Integer)
        Dim dic As new Dictionary(Of DataRow, Integer)
        Dim ls As new List(Of Integer)
        For c As Integer = 0 To sheet.Cols.Count - 1
            If  dt.DataCols.Contains(sheet(0,c).Text.replace(" ", "")) Then
                nms.Add(sheet(0,c).Text.replace(" ", ""), c)
            End If
        Next
        For n As Integer = 1 To Sheet.Rows.Count -1
            Dim sfzhm As String = sheet(n,nms("学号")).Text
            Dim kc As String = sheet(n,nms("课程")).Text
            If sfzhm = "" Then Continue For
            Dim dr As DataRow = dt.Find("学号 = '" & sfzhm & "' and 课程 = '" & kc & "'")
            If dr Is Nothing Then
                ls.add(n)
            Else
                dic.Add(dr, n)
            End If
        Next
        For Each key As DataRow In dic.Keys
            For Each m As String In nms.keys
                If dt.DataCols(m).IsBoolean Then
                    If Sheet(dic(key),nms(m)).Text = "" OrElse Sheet(dic(key),nms(m)).Text = "False" OrElse Sheet(dic(key),nms(m)).Value = 0 Then
                        key(m) = False
                    Else
                        key(m) = True
                    End If
                Else If dt.DataCols(m).Expression > "" Then
                    '表达式列
                Else If dt.DataCols(m).IsNumeric Then
                    key(m) = val(Sheet(dic(key),nms(m)).Value)
                Else If dt.DataCols(m).IsDate Then
                    Dim d As Date
                    If Date.TryParse(Sheet(dic(key),nms(m)).Value, d)
                        key(m) = d
                    End If
                   
                Else
                    key(m) = Sheet(dic(key),nms(m)).Value
                End If
            Next
        Next
        For Each l As Integer In ls
            Dim ndr As DataRow = dt.AddNew
            For Each m As String In nms.keys
                If dt.DataCols(m).IsBoolean Then
                    If Sheet(l,nms(m)).Text = "" OrElse Sheet(l,nms(m)).Text = "False" OrElse Sheet(l,nms(m)).Value = 0 Then
                        ndr (m) = False
                    Else
                        ndr (m) = True
                    End If
                Else If dt.DataCols(m).Expression > "" Then
                    '表达式列
                Else If dt.DataCols(m).IsNumeric Then
                    ndr (m) = val(Sheet(l,nms(m)).Value)
                Else If dt.DataCols(m).IsDate Then
                    Dim d As Date
                    If Date.TryParse(Sheet(l,nms(m)).Value, d)
                        ndr (m) = d
                    End If
                Else
                   
                    ndr (m) = Sheet(l,nms(m)).Value
                End If
            Next
        Next
        dt.ResumeRedraw()
        'systemready = True
    End If
End If

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/29 23:35:00 [显示全部帖子]

Dim xhs As String = DataTables("学生").GetComboListString("学号", "毕业状态 = false")
DataTables("成绩").DeleteFor("学号 in ('" & xhs.Replace("|", "','") & "')")

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/12/3 22:04:00 [显示全部帖子]

'''
Dim dlg As new OpenFileDialog
dlg.Filter = "文本文件|*.txt"
Tables("成绩").StopRedraw
If dlg.ShowDialog = DialogResult.OK Then
    Dim strs As String = FileSys.ReadAllText(dlg.FileName,encoding.default)
    Dim rs() As String = strs.Split(" ")
    For Each s As String In rs
        Dim i As Integer = s.IndexOf(")")
        If i >= 0 Then
            Dim nr As Row = Tables("成绩").addnew
            nr("代码") = s.SubString(1, i-1)
            nr("课程") = s.SubString(i+1)
        End If
    Next
End If
Tables("成绩").ResumeRedraw

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