| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2110 人关注过本帖
标题:一个弱弱的问题
只看楼主 加入收藏
huangyz_xy
Rank: 2
等 级:论坛游民
帖 子:101
专家分:30
注 册:2016-10-2
结帖率:77.78%
收藏
已结贴  问题点数:10 回复次数:9 
一个弱弱的问题
我有一个扩展名为XML的文件,用excel打开后像excel一样,有几个sheet,我想像导入excel一样分别导入到ACCESS指定的table表,用什么办法啊?前提是不能另存为EXCEL哈,谢谢大虾们,给出个主意!
data.rar (123.59 KB)


[此贴子已经被作者于2019-10-12 21:09编辑过]

搜索更多相关主题的帖子: 导入 excel table 另存为 办法 
2019-10-12 19:54
huangyz_xy
Rank: 2
等 级:论坛游民
帖 子:101
专家分:30
注 册:2016-10-2
收藏
得分:0 
自己顶一下先
2019-10-13 12:18
sulli
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2019-10-10
收藏
得分:0 
当然可以另存了.
2019-10-13 15:59
huangyz_xy
Rank: 2
等 级:论坛游民
帖 子:101
专家分:30
注 册:2016-10-2
收藏
得分:0 
回复 3楼 sulli
不是说了吗?另存这个操作都会操作,我的意思是不想做另存这个操作,直接操作XML表。灌水的么?
2019-10-13 16:30
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4938
专家分:30047
注 册:2008-10-15
收藏
得分:10 
有二个方案

1、使用 XML 解析控件,微软有一个,自己百度一下。
2、自己解析 XML ,你用记事本打开这个文件,看一下就会知道 。
 <Worksheet ss:Name="任务列表">  工作簿 开始
  <Row ss:AutoFitHeight="0">     一行的开始
<Cell ss:StyleID="s64">          单元格
<Data ss:Type="String">任务名称</Data>     内容
每个标志开始后,后面必定有一个结束。

已知这个文件的标志名了,针对这个文件,搜索所需要的标志就可以了。
搜索 "<Worksheet" ,接着搜索 " </Worksheet> "   这期间的代码就是一个工作表,已知只有一个表格,所以中间一个标志跳
然后搜索 <Row  ,和 </Row> ,得到一行的数据,
然后再搜索  <Cell   和 </Cell> ,每得具体单元格的内容。一共三个循环嵌套。


授人于鱼,不如授人于渔
早已停用QQ了
2019-10-13 18:25
huangyz_xy
Rank: 2
等 级:论坛游民
帖 子:101
专家分:30
注 册:2016-10-2
收藏
得分:0 
回复 5楼 风吹过b
谢谢,xml结构已经告诉我了!但是有个问题,看了网络上很多的例子,始终是无法下手,概念性的东西有点多!大侠,能不能就以“版本包状态”这个sheet添加的access对应的table字段为例给个例子?我知道你的签名,我现在急需你帮我演示一下钓鱼的过程,再次感谢!
2019-10-13 20:19
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4938
专家分:30047
注 册:2008-10-15
收藏
得分:0 
方案1自己百度。

电脑上没有 VB6 了。记事本写的代码,将就的看吧,使用的是方案2。
查找,使用s1 ,原始数据在 s ,s转大写就变成s1,统统用大写,字符串比较防错。
每个 <Cell 中只有一个 data ,所以省掉了查找 cell 的步骤

s="....."        整个文件内容
s1=ucase(s)      '转大写
i1=1

do  
  i1=instr(i1,s1,"<WORKSHEET")    '从当前位置搜索工作簿开始位置
  IF i1>0 then
     i2=instr(i1,s1,"</WORKSHEET>")
     if i2>0 then         '找到

       i3=instr(i1,s1,"NAME=")     '找名字
       i4=instr(i1,s3,">")          '找名字结束
       工作表名=mid(s,i3+6,i4-i3-7       '取名字,需要测试常量是否正确

       s3=mid(s,i1,i2-i1+1)    '取找到部分的内容
       是否已解析表头=FALSE
       call 解析表(s3)       '去解析表
       i1=i2+1               '从已解析部分后继续下一个循环
     else
       exit do      '没找到结尾,说明文件没完整,不处理了。这个表不完整。
     end if
  else
    exit do         '没找到下一个开头,结束处理
  end if
loop


sub 解析表(s as string)
s1=ucase(s)      '转大写
i1=1
do
  i1==instr(i1,s1,"<ROW")
  IF i1>0 then
     i2=instr(i1,s1,"</ROW>")
     if i2>0 then
       s3=mid(s,i1,i2-i1+1)
       if 是否已解析表头 then
         call 解析行(s3)
       else
         call 解析表头(s3)      '这个子程序就不写了,与 解析行 类似,只是保存的变量不同而以。
         是否已解析表头=true
       end if
       i1=i2+1
     else
       exit do
     end if
  else
    exit do
  end if
end sub

sub 解析行(s as string)
s1=ucase(s)      '转大写
i1=1
do
  i1==instr(i1,s1,"<DATA")
  IF i1>0 then
    i1=instr(i1,s1,">")
    i2=instr(i1,s1,"<")  
    if i2>0 then
       s3=mid(s,i1,i2-i1+1)      '得到单元格内容
       '如何保存,可以使用全局变量的数组进行保存,也可以组合到字符串里      

       i1=i2+1
     else
       exit do
     end if
  else
    exit do
  end if
end sub


授人于鱼,不如授人于渔
早已停用QQ了
2019-10-13 21:12
huangyz_xy
Rank: 2
等 级:论坛游民
帖 子:101
专家分:30
注 册:2016-10-2
收藏
得分:0 
回复 7楼 风吹过b
辛苦辛苦,谢谢了,我慢慢琢磨一下!
2019-10-13 21:20
huangyz_xy
Rank: 2
等 级:论坛游民
帖 子:101
专家分:30
注 册:2016-10-2
收藏
得分:0 
回复 7楼 风吹过b
万事开头难啊!不知道怎么下手,文件是知道的,叫FilePath,要搜索的内容(sheet)也是知道,怎么打开这个xml文件然后一行一行的读取并识别内容呢?比如像rst.open之类的语句?
2019-10-13 21:44
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4938
专家分:30047
注 册:2008-10-15
收藏
得分:0 
读文件,像这样文件,可以一次性读入内容,
可以使用 FSO ,也可以使用 VB6 的读取文件方法。如下面的函数

Public Function 打开文件(cs As String) As String
'快速打开文件
Dim fj As Long

If Dir(cs) <> "" Then           '文件存在
    fj = FreeFile()             '产生下一文件号
    Open cs For Binary As #fj       '打开文件
   
        '直接读整个文件的所有的内容,按字节读,并转换为 Unicode 的VB默认字符串类型
        打开文件 = StrConv(InputB$(LOF(fj), #fj), vbUnicode)
    Close #fj
Else
    MsgBox cs & vbCrLf & "文件不存在!", vbCritical, "打开文件"       '提示文件不存在
End If
End Function

------------------------
得到了文件内容,然后按上面的过程去分析。
如果会写正则表达式,也可以直接使用正则表达式直接匹配返回结果,然后对结果直接读取就可以了。

授人于鱼,不如授人于渔
早已停用QQ了
2019-10-13 23:18
快速回复:一个弱弱的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018911 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved