ADO 读取Excel文件数据, 丢失数据或数据错误问题。

简介:
在用ADO读取Excel文件数据,常容易发生丢失数据的现象。

例如,用ADO打开一个Excel文件的代码如下:
 Dim objConn As ADODB.Connection
    Dim objRS As ADODB.Recordset
    Dim objRSTable As ADODB.Recordset
    
    Set objConn = New ADODB.Connection
    Set objRS = New ADODB.Recordset
    objRS.CursorLocation = adUseClient
    
    With objConn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source=" & Me.ExcelPath & ";Extended Properties=""Excel 8.0;HDR=NO;"""
        .CursorLocation = adUseClient
        .Open
    End With
    
    ' Check whether there is a sheet named "master" in the excel file
    Set objRSTable = objConn.OpenSchema(adSchemaTables)
blnMasterSheet = False
    For i = 1 To objRSTable.RecordCount
        If UCase(CStr(objRSTable.Fields("TABLE_NAME").Value)) = "MASTER$" Then
            blnMasterSheet = True
            Exit For
        End If
        objRSTable.MoveNext
    Next i
        
    Set objRSTable = Nothing
    If Not blnMasterSheet Then
        MsgBox ("Master Worksheet Is Not Found")
        Set objConn = Nothing
        Set objRS = Nothing
        GetExcelData = False
        Exit Function
    End If
    
    strExcuteScript = "select * from [Master$A1:F]"
    objRS.Open strExcuteScript, objConn, adOpenStatic, adLockOptimistic
运行后发现第一列的某些行数据丢失了。这发生在第一行是数字,第二行是文字的情况。
因为在读取excel的时候,ODBC会根据第一行的文字来设定返回的recordset的字段类型,当第一行是数字时,就会认为整列都是数字的。结果后面的字符无法读出。

这时,需要把连接字符串改为.ConnectionString = "Data Source=" & Me.ExcelPath & ";Extended Properties=""Excel 8.0;HDR=NO;IMEX=1;"""

其中,IMEX=1;这个属性的意思是,以文本方式读取excel表。 那么就算第一行是数字,后面的字符串也可以正常读出了。

问题好像是解决了。但过一段时间后,又出现了问题,读取某个列的某个行时,会出现错误。错误现象为

我们读取Excel表格后,会把数据传到另一个recordset (假定为R2)再进行处理的。在给另一个recordset付值时出错。根据错误信息,得知如果把一个超长的或者错误的数据付给一个字段时会出现这样的错误。但在R2中,我们设定了对于的字段的长度是1000的,而要付值的数据长度是628,为什么还会出错呢。这个R1的字段出来的值后面也带有很多的乱码。就是说,本来从Excel中读出来的数据已经是乱码了。

      我们把怀疑产生乱码的所有空格去掉,结果错误到了下一行。再把正常的数据复制变成很长,结果也会产生错误。再尝试把前面的正常行去掉,居然错误就不见了。
        把断点设在错误的那行,查数据的长度,是628, 再看rs.fileds(11).defineSize, 发现只有255. 那就说明,它实际字段是认为长255的,但把数据都读出来了,结果是乱码,再把这些乱码付值给另一个recordset时才报错。
        把产生错误的数据放在第一行时,是不会有这个错误的,查看它的defineSize, 发现不再是255了,而是很大的数字。
        再尝试把错误的数据放在1-8行,都不会产生问题,在9行以上就会产生。

        原来,ODBC在读取Excel时,会有个值设置TypeGuessRows=8, 意思是ODBC会先在前8行的数据中去比较,如果所有的数据都在255或以下,那这个字段长度就是varchar(255),否则,这个字段将是text类型。

      于是,我们加上TypeGuessRow=100,再试,结果错误依然存在。

      原来,虽然可以设置这个属性,但ODBC是不会去用它的,要使这个属性有效,必须修改注册表。对于注册表键是

Excel 97
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel
Excel 2000 and later versions
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel

修改了里面的TypeGuessRow后,这个问题暂时解决了。

但是,如果大的数据在表的后面位置的话,这个问题还是有可能发生的。所以要彻底的解决的话,在打开一个recordset前,就要先定义好它的字段长度了。
分类:  C# Asp.net

本文转自快乐就好博客园博客,原文链接:http://www.cnblogs.com/happyday56/archive/2008/04/24/1169320.html,如需转载请自行联系原作者
相关文章
|
2月前
|
Python
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
2月前
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
|
4月前
|
存储 安全 大数据
网安工程师必看!AiPy解决fscan扫描数据整理难题—多种信息快速分拣+Excel结构化存储方案
作为一名安全测试工程师,分析fscan扫描结果曾是繁琐的手动活:从海量日志中提取开放端口、漏洞信息和主机数据,耗时又易错。但现在,借助AiPy开发的GUI解析工具,只需喝杯奶茶的时间,即可将[PORT]、[SERVICE]、[VULN]、[HOST]等关键信息智能分类,并生成三份清晰的Excel报表。告别手动整理,大幅提升效率!在安全行业,工具党正碾压手动党。掌握AiPy,把时间留给真正的攻防实战!官网链接:https://www.aipyaipy.com,解锁更多用法!
|
2月前
|
Python
Excel中如何批量重命名工作表与将每个工作表导出到单独Excel文件
本文介绍了如何在Excel中使用VBA批量重命名工作表、根据单元格内容修改颜色,以及将工作表导出为独立文件的方法。同时提供了Python实现导出工作表的代码示例,适用于自动化处理Excel文档。
|
2月前
|
Python
将Excel特定某列数据删除
将Excel特定某列数据删除
|
4月前
|
人工智能 算法 安全
使用CodeBuddy实现批量转换PPT、Excel、Word为PDF文件工具
通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把
161 10
|
9月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
1940 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
7月前
|
分布式计算 Hadoop 大数据
从Excel到Hadoop:数据规模的进化之路
从Excel到Hadoop:数据规模的进化之路
145 10
|
7月前
|
文字识别 Serverless 开发工具
【全自动改PDF名】批量OCR识别提取PDF自定义指定区域内容保存到 Excel 以及根据PDF文件内容的标题来批量重命名
学校和教育机构常需处理成绩单、报名表等PDF文件。通过OCR技术,可自动提取学生信息并录入Excel,便于统计分析和存档管理。本文介绍使用阿里云服务实现批量OCR识别、内容提取、重命名及导出表格的完整步骤,包括开通相关服务、编写代码、部署函数计算和设置自动化触发器等。提供Python示例代码和详细操作指南,帮助用户高效处理PDF文件。 链接: - 百度网盘:[链接](https://pan.baidu.com/s/1mWsg7mDZq2pZ8xdKzdn5Hg?pwd=8866) - 腾讯网盘:[链接](https://share.weiyun.com/a77jklXK)
809 5
|
7月前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
797 8

热门文章

最新文章