| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1027 人关注过本帖
标题:请问如何突破各种限制或错误直接读取EXCEL文件里的内容?
取消只看楼主 加入收藏
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
结帖率:70%
收藏
已结贴  问题点数:20 回复次数:1 
请问如何突破各种限制或错误直接读取EXCEL文件里的内容?
我手头上经常接收到各部门、各客户发送来的EXCEL文件,完全没有一个标准格式以及版本,有的还是OFFICE2007、有的是OFFICE2010、有的是OFFICE2016或者更高;有的客户发来的是只读性质的,有的可能是用什么工具从PDF转的,有的文件名带有空格的,有的文件名带有符号的,杂七杂八,乱七八糟。导致我有时在OFFICE2010环境下打开文件,直接飘红,提示“OFFICE已检测到此文件存在问题,编辑此文件可能会损害您的计算机,请单击查看详细信息”。这种情况经常发生,人都快发疯了。

通过类似于如下的程序打开该类文件,经常报错:
程序代码:
Dim xlApp As Excel.Application
Dim xlBook As Excel.WorkBook
Dim xlSheet As Excel.Worksheet
Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象
Set xlBook = xlApp.Workbooks.Open("文件名") '打开已经存在的EXCEL工件簿文件
xlApp.Visible = True '设置EXCEL对象可见(或不可见)
Set xlSheet = xlBook.Worksheets("表名") '设置活动工作表


想请教一下各位高手,是否有类似于如下的方法,直接读取EXCEL文件的内容,而不打开文件(防止什么类似文件名不规范等问题导致报错):
程序代码:
        Open Text1.Text For Binary As #1
        ReDim aryContent(LOF(1) - 1)
        Get #1, , aryContent
        Close #1
        
        strWj = StrConv(aryContent, vbUnicode)
        strJ = Split(strWj, vbCrLf)
        
        For ii = 0 To UBound(strJ)
            b() = Split(strJ(ii), ",")
            If ii > 33 And IsNumeric(Left(strJ(ii), 1)) = True Then
                PIC(b(3), b(4)) = b(2)
            End If
        Next ii


是否可用ADO方式?从来没有用过,能否给出直接读取EXCEL文件内容,并把每一行都写入一维数组?

我也想过能否把EXCEL文件转换成CSV文件,但是那也是要先打开,又要触发各种各样的问题:

想请各位高手给出一个解决方案,方便的话希望能够给出相应的程序,谢谢各位!
搜索更多相关主题的帖子: 内容 EXCEL 读取 打开 文件 
2023-11-01 01:49
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
在网上找到一个方法,使用第三方库(Jet.OLEDB)读取Excel数据(.xls格式),如下,但是读取信息不全,大部分都能读到,少量当中位置读取不到,请麻烦各位高手帮忙看一下哪里有问题,谢谢!

程序代码:
Private Sub Command1_Click()
    
On Error Resume Next
'说明:使用第三方库(Jet.OLEDB)读取Excel数据(.xls格式)
    'Excel文件的路径
    Dim sXLPath As String
    
    sXLPath = "c:\委托单-AABBCC20221212004.xls"

    ' NO1:前期绑定(静态绑定)
    ' 需要添加对Microsoft ActiveX Data Objects xx.x Library的引用(版本号根据ADO版本变化)             '我2.8、6.1都已经试过。
    Dim CN As New ADODB.Connection
    Dim RS As New ADODB.Recordset
    
    Dim CNStr As String
    Dim sqlQuery As String
    
    ' 连接到Excel文件
    
    CNStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={path};Extended Properties=""Excel 8.0;HDR=Yes;"";"
    
    CNStr = Replace(CNStr, "{path}", sXLPath)
    CN.Open CNStr
    
    ' 构造SQL查询语句
    sqlQuery = "SELECT * FROM [Sheet1$];"
    
    ' 执行查询并将结果保存到记录集(Recordset)
    RS.Open sqlQuery, CN
    
    ' 将数据读取到数组中
    Dim aryData() As Variant
    aryData = RS.GetRows
    
    RS.Close
    CN.Close
    
    '输出,获取二维数组的行数和列数
    Dim rows As Long, cols As Long
    rows = UBound(aryData, 1) + 1  ' 行数
    cols = UBound(aryData, 2) + 1 ' 列数
    
    ' 遍历二维数组
    Open "C:\25.txt" For Append As #5
    Dim i As Long, j As Long
    For i = 0 To rows - 1
        For j = 0 To cols - 1
            ' 访问二维数组中的元素
            Print #5, "aryData(" & j & ", " & i & ") = " & aryData(j, i)
        Next j
    Next i
    Close #5

MsgBox "ok"
    
End Sub


下图中绿框内就是可以读到的信息,红框内信息获取不到
图片附件: 游客没有浏览图片的权限,请 登录注册


附EXCEL文件
委托单-AABBCC20221212004.rar (8.71 KB)
2023-11-01 15:14
快速回复:请问如何突破各种限制或错误直接读取EXCEL文件里的内容?
数据加载中...
 
   



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

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