以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]EXCEL数据导入问题(已解决)8楼更新了一个关于路径的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=65433)

--  作者:huangfanzi
--  发布时间:2015/3/16 12:44:00
--  [求助]EXCEL数据导入问题(已解决)8楼更新了一个关于路径的问题
项目中有一张工序表,已经有好多记录,在做时由于原始数据不完整,所以有个字段没有录入,我现在把这张表导出来了,让生产部门去填,填完后,有什么好办法能方便的导入数据,其实是导入这一个字段,我现在想到的办法就是在项目中建立一张表,把刚才导出的数据完整的导入进来,然后用代码把这个指定的字段从临时表写到工序表,但感觉这样好麻烦,有更简单的方法吗?
[此贴子已经被作者于2015/3/16 23:14:09编辑过]

--  作者:Bin
--  发布时间:2015/3/16 13:40:00
--  
编码合并,如果有个唯一的编号,可以根据编号更新


--  作者:huangfanzi
--  发布时间:2015/3/16 21:54:00
--  
BIN老师,我的问题不是增加记录,而是原有记录中有一个字段没录入,我把这张表导出至EXCEL,然后让同事把上面的这个没有录入的字段输完整,这张表共有3000多条记录,现在同事把这张表填完给我了,我要把这个字段存入项目的这张表中,如果是EXCEL表之前的操作,我可以用VLOOKUP。
--  作者:有点甜
--  发布时间:2015/3/16 22:03:00
--  
  回复3楼,你能认认真真看一下2楼的帮助文档么?
--  作者:huangfanzi
--  发布时间:2015/3/16 22:32:00
--  

仔细看过了,我的情况是只导入指定的字段,其它字段不能导入,原因是:

假定这张表中用A B C D E  5个字段,其实A字段是唯一值,可以当成订单号,B字段是我现在让同事补全的字段,C,D,E三个字段一直在更新数据,因为项目已经实施了。


--  作者:有点甜
--  发布时间:2015/3/16 22:34:00
--  
  2楼的代码,就是导入数据啊,设置的时候,只导入A、B就行啊
--  作者:huangfanzi
--  发布时间:2015/3/16 22:46:00
--  
我以为项目中表的字段必须与EXCEL一一对应全部导入,明天做个试验,这个方法到解决了我目前为了尽快实施项目而导致一堆数据未录入后期补的情况。
--  作者:huangfanzi
--  发布时间:2015/3/16 23:11:00
--  

试了下,成功了,有个问题请教一下,代码第一行路径名怎么写表示当前项目文件名所在目录,这样以后用时方便点,谢谢!

Dim  Book As New XLS.Book("F:\\快盘\\FOXtable\\替换指定字段内容\\TEST.xlsx")
Dim Sheet As XLS.Sheet = Book.Sheets(0)
Tables("表A").StopRedraw()
Dim nms() As String = {"第一列","第二列","第三列"}
For  n As Integer = 1 To Sheet.Rows.Count -1
    Dim bh As String = sheet(n,0).Text
    Dim dr As DataRow = DataTables("表A").Find("第一列 = \'" & bh & "\'")
    If dr Is Nothing Then  \'如果不存在同编号的表A
        dr =  DataTables("表A").AddNew()
    End If
    For m As  Integer = 0 To nms.Length - 1
        dr(nms(m)) = Sheet(n,m).Value
    Next
Next
Tables("表A").ResumeRedraw()


--  作者:有点甜
--  发布时间:2015/3/16 23:39:00
--  

可以这样

 

Dim  Book As New XLS.Book(projectPath & "TEST.xlsx")

 

或者选择导入

 

Dim dlg As new OpenFileDialog
dlg.InitialDirectory = ProjectPath
dlg.Filter = "Excel文件|*.xls;*xlsx"
If dlg.ShowDialog = DialogResult.OK Then
    Dim  Book As New XLS.Book(dlg.FileName)  

 

 

 

 


End If


--  作者:huangfanzi
--  发布时间:2015/3/17 9:03:00
--  
选择输入是方便多了,多谢甜老师。
另外我尝试了下EXCEL表中列的顺序,发现一个问题:
Dim dr As DataRow = DataTables("表A").Find("第一列 = \'" & bh & "\'")
上面的代码中,用于查找匹配的“第一列”或者说是帮助文件中的编号列必须位于EXCEL表中的第一列位置,我尝试把这一列放到第三列位置,运行代码后就新增了行,也就是执行了下面代码:
If dr Is Nothing Then  \'如果不存在同编号的表A
        dr =  DataTables("表A").AddNew()
End If
这种导入的方法是不是有这个要求。
我尝试的代码如下:
Dim dlg As new OpenFileDialog
dlg.InitialDirectory = ProjectPath
dlg.Filter = "Excel文件|*.xls;*xlsx"
If dlg.ShowDialog = DialogResult.OK Then
    Dim  Book As New XLS.Book(dlg.FileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Tables("表A").StopRedraw()
    Dim nms() As String = {"第二列","第三列","第一列"}
    For  n As Integer = 1 To Sheet.Rows.Count -1
        Dim bh As String = sheet(n,0).Text
        Dim dr As DataRow = DataTables("表A").Find("第一列 = \'" & bh & "\'")
        If dr Is Nothing Then  \'如果不存在同编号的表A
            dr =  DataTables("表A").AddNew()
        End If
        For m As  Integer = 0 To nms.Length - 1
            dr(nms(m)) = Sheet(n,m).Value
        Next
    Next
    Tables("表A").ResumeRedraw()
End If

EXCEL文件中列的顺序如下:
第二列 | 第三列 | 第一列