Foxtable(狐表)用户栏目专家坐堂 → 如何将excel表格的数据自动导入数据表


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

主题:如何将excel表格的数据自动导入数据表

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


加好友 发短信
等级:七尾狐 帖子:1553 积分:10082 威望:0 精华:0 注册:2014/12/18 16:12:00
如何将excel表格的数据自动导入数据表  发帖心情 Post By:2019/3/30 8:21:00 [显示全部帖子]

我有一个excel表格(名称为“领料表”),里面有数据列“物料代号”和“领料数量”;再有一个数据表“批号表”,里面有数据列“产品代号”和“出库数量”。我在“菜单设计”那里建立了一个按钮,我希望按一下这个按钮,就可以将excel 表格“领料表”与数据表“批号表”进行比较,凡是“物料代号”=“产品代号”的,就将“领料数量”填入“出库数量”(代替掉旧的“出库数量”)。如果数据表“批号表”里面不存在某个“物料代号”,就要增加一行,将“物料代号”和“领料数量”输入到数据表的“产品代号”和“出库数量”。请教这个代码如何写。谢谢。

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


加好友 发短信
等级:七尾狐 帖子:1553 积分:10082 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/4/4 16:30:00 [显示全部帖子]

If User.Group = "营销" Or User.name = "开发者"
   If CurrentTable.name.contains("直身开料单")
       Dim Book As New XLS.Book("c:\开料任务单.xls")
       Dim Sheet As XLS.Sheet = Book.Sheets(1)
       Tables("直身开料单").StopRedraw()
       Dim nms() As String = {"piao号","订单号","制造产品号","材料","物料号","开料参数","大小弯","数量","开料mm","开料inch","开料数量"}
       For n As Integer = 1 To Sheet.Rows.Count -1 
           Dim r As Row = Tables("直身开料单").AddNew()
           r("生产piao号") = nms("piao号")
           r("订单号") = nms("订单号")
           r("制造产品号") = nms("制造产品号")
           r("原材料") = nms("材料")
           r("型号") = nms("物料号")
           r("开料参数") = nms("开料参数")
           r("标识") = nms("大小弯")
           r("套数") = nms("数量")
           r("毫米") = nms("开料mm")
           r("长度") = nms("开料inch")
           r("数量") = nms("开料数量")
       Next
       Tables("直身开料单").ResumeRedraw()
    End If
End If

因为数据表"直身开料单"的数列标题与excel表格"开料任务单"的数据列标题是不同的,所以我需要用到类似 r("生产piao号") = nms("piao号") 这样的代码,请帮我看看上面的代码是否有问题。要怎样修改?谢谢。

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


加好友 发短信
等级:七尾狐 帖子:1553 积分:10082 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/4/4 17:00:00 [显示全部帖子]

按照你的方法修改了代码,但还是执行不了,没有任何反映,没有任何警告。

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


加好友 发短信
等级:七尾狐 帖子:1553 积分:10082 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/4/7 14:06:00 [显示全部帖子]

上述代码可以了。
还有一个问题,excel表格里面的一串字符串,如果其第一个字符是空格的话,那么我仅希望去掉第一个空格(后面的空格要保留下来)。代码该如何写?谢谢。

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


加好友 发短信
等级:七尾狐 帖子:1553 积分:10082 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/4/8 10:06:00 [显示全部帖子]

去掉第一个空格的问题解决了。谢谢。
还有一个问题,我的excel表格output.xls是保存在客户的电脑上的,我们远程登录了客户的电脑,所以我需要将代码修改成如下:

Dim Book As New XLS.Book("osdisk(c:)\users\sesa99355\desktop\output.xls")
Dim Sheet As XLS.Sheet = Book.Sheets(0)
Tables("直身开料单").StopRedraw()
For n As Integer = 1 To Sheet.Rows.Count -1
    msgbox(sheet(n, 0).text)
    Dim r As Row = Tables("直身开料单").AddNew()
    r("生产piao号") = sheet(n, 0).text
    r("订单号") = sheet(n, 1).text
    r("制造产品号") = sheet(n, 2).text
Next
Tables("直身开料单").ResumeRedraw()

这样的修改有效吗?再者,这个excel表格的sheet名字是output,还需要修改哪里的代码吗?请参考下图。

图片点击可在新窗口打开查看此主题相关图片如下:clip(04-08-09-53-38).png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:七尾狐 帖子:1553 积分:10082 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/4/8 12:50:00 [显示全部帖子]

我事先把远程的文件打开,行吗?

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


加好友 发短信
等级:七尾狐 帖子:1553 积分:10082 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/4/8 12:52:00 [显示全部帖子]

我打开本地的foxtable项目,然后先把远程的excel文件打开,这样可以导入远程文件的数据吗?

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


加好友 发短信
等级:七尾狐 帖子:1553 积分:10082 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/4/10 17:33:00 [显示全部帖子]

    Dim Book As New XLS.Book("c:\机加工工资.xls")
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Tables("工资计算").StopRedraw()
    Dim nms() As String = {"年月","姓名","计件工资","计时工资","误餐补贴"}
    For n As Integer = 1 To Sheet.Rows.Count -1 
        Dim ny As String = sheet(n,0).Text 
        Dim xm As String = sheet(n,1).Text 
        Dim dr As DataRow = DataTables("工资计算").Find("年月 = '" & ny & "'" And "姓名 = '" & xm & "'") 
        If dr Is Nothing Then '如果不存在同年月和姓名的行
            dr =  DataTables("工资计算").AddNew()
        End If
        For m As Integer = 0 To nms.Length - 1
            dr(nms(m)) = Sheet(n,m).Value
        Next
    Next
    Tables("工资计算").ResumeRedraw()

上述代码执行时(我希望"年月"和"姓名"都相同的数据就用excel里面的数据覆盖“工资计算”里面的数据),但是出现如下警告:

.NET Framework 版本:2.0.50727.8793
Foxtable 版本:2017.3.18.1
错误所在事件:菜单,机加工资导入工资计算,Click
详细错误信息:
从字符串“年月 = '201903'”到类型“Long”的转换无效。
输入字符串的格式不正确。

我的"工资计算"里面的“年月”是字符格式,而excel里面的“年月”就字符格式和数据格式都用过,都出现一样的警告。请教为什么。谢谢。

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


加好友 发短信
等级:七尾狐 帖子:1553 积分:10082 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/4/18 8:39:00 [显示全部帖子]

  If CurrentTable.name.contains("工资计算") 
    Dim Book As New XLS.Book("c:\机加工工资.xls")
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Tables("工资计算").StopRedraw()
    Dim nms() As String = {"年月","姓名","计件工资","计时工资","误餐补贴"}
    For n As Integer = 1 To Sheet.Rows.Count -1 
        Dim ny As String = sheet(n,0).Text 
        Dim xm As String = sheet(n,1).Text 
        Dim dr As DataRow = DataTables("工资计算").Find("年月 = '" & ny & "' And 姓名 = '" & xm & "'")
        If dr Is Nothing Then '如果不存在同年月和姓名的行
            dr =  DataTables("工资计算").AddNew()
        End If
        For m As Integer = 0 To nms.Length - 1
            If Sheet(n,m).Value = ""
                dr(nms(m)) = dr(nms(m)) + 0
            Else
                dr(nms(m)) = dr(nms(m)) + Sheet(n,m).Value
            End If
        Next
    Next
    Tables("工资计算").ResumeRedraw()
  End If

上述红色代码,我希望“工资计算”里面的列仅仅是“误餐补贴”、“计件工资”和“计时工资”的时候,做到dr(nms(m)) = dr(nms(m)) + 0  dr(nms(m)) = dr(nms(m)) + Sheet(n,m).Value。请教如何修改代码?谢谢。

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


加好友 发短信
等级:七尾狐 帖子:1553 积分:10082 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/4/18 11:01:00 [显示全部帖子]

If Sheet(n,m).Value = ""
    dr(nms(m)) = dr(nms(m)) + 0
Else
    dr(nms(m)) = dr(nms(m)) + Sheet(n,m).Value
End If

上面红色那段原来是这样子的:
If Sheet(n,m).Value = ""
    dr(nms(m)) = 0
Else
    dr(nms(m)) = Sheet(n,m).Value
End If

我为社么要改为红色那段呢?因为我希望数据表“工资计算”里面“误餐补贴”原有的值能够加上excel表格“误餐补贴”里面的值。但是我修改成红色那样的代码之后,执行起来时,“工资计算”里面各个数据列都会将原值加上excel表格的新值。而我希望仅仅是“误餐补贴”、“计件工资”和“计时工资”这三列能够将“原值+新值”,“工资计算”里面的其他所有列不需要做到这个效果。

比如,是否可以增加判断语句 if tables("工资计算").rows = "误餐补贴", 但是我这个写法不对。要怎样修改这句代码?


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