以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=35038)

--  作者:270463422
--  发布时间:2013/6/22 14:21:00
--  [求助]
有一excel格式的学生考试通知单(有很多页),另有一"考场与教室号对应表",现在想在考试通知单中的考场号后面增加相对应的教室号,请教各位大侠如何实现?(两个表见附图),因为此表不是规则的二维表,用函数(比如vlookup)实现很麻烦.如何能转换成标准的二维表就好了。
图片点击可在新窗口打开查看图片点击可在新窗口打开查看
--  作者:Bin
--  发布时间:2013/6/22 14:24:00
--  
图挂了.   另外这种需求最好上个例子 


图片点击可在新窗口打开查看此主题相关图片如下:上传图片请参考这里.gif
图片点击可在新窗口打开查看


--  作者:270463422
--  发布时间:2013/6/24 14:39:00
--  

关键的是要将"通知单"不规则变成规则的二维表,剩下的我自己就知道如何处理了


--  作者:狐狸爸爸
--  发布时间:2013/6/24 15:02:00
--  
你的通知单在哪里?
--  作者:270463422
--  发布时间:2013/7/2 8:45:00
--  
通知单
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:tjz打.xls


--  作者:e-png
--  发布时间:2013/7/2 13:12:00
--  

这么久没人答复,我来试试。

随便用一个项目,在命令窗口用下面代码看看是你要的不 :

注意:你5楼的excel请先插入第一行: 图见11楼。

 

Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls"
If dlg.ShowDialog = DialogResult.Ok Then 

    Dim ip As New Importer
    ip.SourcePath = dlg.FileName 
    ip.SourceTableName = "sheet1$" 
    ip.NewTableName ="考场与教室号对应表" 
    ip.Format = "Excel" 

    ip.Import()
End If

If DataTables("考场与教室号对应表").DataCols.Contains("学号") = False Then
    DataTables("考场与教室号对应表").DataCols.add("学号", Gettype(String))
End If

Dim dtb As New DataTableBuilder("学生考试通知单")
dtb.AddDef("班级号", Gettype(String), 32)
dtb.AddDef("班级名称", Gettype(String), 32)
dtb.AddDef("学号", Gettype(String), 32)
dtb.AddDef("姓名", Gettype(String), 32)
dtb.AddDef("考点名称", Gettype(String), 32)
dtb.AddDef("考试地址", Gettype(String), 32)
dtb.Build()

DataTables("学生考试通知单").DataRows.Clear()
With Tables("考场与教室号对应表")
For i As Integer = 0 To .count -1
    If .rows(i)("试卷号").contains("学号")
        Dim str As Integer = .rows(i)("试卷号").IndexOf("学号")
        Dim ed As Integer = .rows(i)("试卷号").IndexOf("姓名")
        .rows(i)("学号") = .rows(i)("试卷号").SubString(str+3,13)
    End If
    If i > 0
        If .Rows(i).Isnull("试卷号") = False And .Rows(i).Isnull("学号") And .Rows(i-1).Isnull("学号") = False
             .rows(i)("学号") = .rows(i-1)("学号") 
        End If
    End If 

        If .rows(i)("试卷号").contains("学号")
            Dim stb As Integer = .rows(i)("试卷号").IndexOf("班级")
            Dim str As Integer = .rows(i)("试卷号").IndexOf("学号")
            Dim ed As Integer = .rows(i)("试卷号").IndexOf("姓名")
            Dim edb As Integer = .rows(i)("考试日期").IndexOf("班")
            Dim dr As Row = Tables("学生考试通知单").addnew()
            dr("班级号") = .rows(i)("试卷号").substring(stb+3,str-stb-3).trim(" ")
            dr("班级名称") = .rows(i)("考试日期").SubString(0,edb+1)
            dr("学号") = .rows(i)("试卷号").substring(str+3,13)
            dr("姓名") = .rows(i)("试卷号").substring(ed+3)
        End If

        If .rows(i)("试卷号").contains("考点")
            Dim dr As Row = Tables("学生考试通知单").current
            dr("考点名称") = .rows(i)("试卷号").substring(5)
            dr("考试地址") = .rows(i)("考试日期").SubString(0)
        End If
    Next
End With
MainTable= Tables("学生考试通知单")
Tables("学生考试通知单").Autosizecols()

DataTables("考场与教室号对应表").DeleteFor("[试卷号] like \'班级*\' or [试卷号] is null or [试卷号] like \'考点*\' or [试卷号] like \'*考试通知单\' or [试卷号] like \'试卷号\' ")

If Relations.Contains("关联1") Then
    Relations.Delete("关联1")
End If

Relations.Add("关联1",DataTables("学生考试通知单").DataCols("学号"),DataTables("考场与教室号对应表").DataCols("学号"))

[此贴子已经被作者于2013-7-2 15:39:11编辑过]

--  作者:270463422
--  发布时间:2013/7/2 14:17:00
--  

谢谢大侠,是在access中运行吗?我对数据库了解很少,还要请耐心指导!

 

[此贴子已经被作者于2013-7-2 14:23:19编辑过]

--  作者:270463422
--  发布时间:2013/7/2 14:18:00
--  

是不是先要装两个excel文件导入accessg后再来运行程序

 

 

[此贴子已经被作者于2013-7-2 14:24:17编辑过]

--  作者:狐狸爸爸
--  发布时间:2013/7/2 14:21:00
--  

这里是foxtable,自然在foxtable中运行。

 

先看帮助吧:

 

图片点击可在新窗口打开查看

 


看帮助一定要按顺序,头一两遍可以不求甚解,第三遍开始要将每个例子实际操作演练一遍,不明白的就上论坛求助。
三遍之后才开始做系统,先设计好表,想做什么功能,就做什么功能,遇到问题在帮助找答案,找不到的在论坛提问,不断遇到问题,不断解决问题,慢慢就熟悉了。
此外一定要先掌握《使用指南》,然后再看《开发指南》


--  作者:270463422
--  发布时间:2013/7/2 14:26:00
--  
是foxtable?我先看看帮助,谢谢