通过oledb驱动读取excel、csv数据丢失解决方案

转载 2017年09月28日 09:56:38
转载:http://www.cnblogs.com/zsy/p/6431047.html

1、问题出现

      在开发应用程序的过程中,比较常用一功能就是通过oledb驱动读取excel、csv、text等文件;而最近有客户反映,在使用短信平台(下载地址:http://www.sms1086.com/product/detail-150.html),发现出现以下问题:

image

    还有一种情况,excel只能导入部分,而其他的导入不进去。

    而其他excel或text文件,不会出现此类问题。但是将有问题的excel粘贴到新建的文件中,还会出现类似问题。

2、网上解答

    在博客园http://www.cnblogs.com/clare-zhang/archive/2012/05/30/2525884.html给出了解决方案:

    查询注册表,将TypeGuessRows=8 修改为 TypeGuessRows=0

    下图是Win10 64位企业版的修改位置,操作系统不通,修改地方不通;建议查询注册表,修改所有TypeGuessRows为0

QQ图片20170218184340

    按照此方法,可解决Excel数据丢失问题。棒棒的~~~~~~~~

3、读取Text文件数据丢失

    Excel文件问题解决了,但是在读取csv、text文件,仍然出现数据丢失的问题,是什么原因引起的呢?与excel对比,不难发现,还是注册表配置的问题。

    通过查询注册表,找到Text的驱动:

image

    修改MaxScanRows=0即可解决问题。(路径: 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Text

4、TypeGuessRows详解

    要使用 Jet OLE DB 提供程序访问 Excel 工作簿,请使用具有下列语法的连接字符串:

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\sms.xls;Extended Properties="Excel 8.0;HDR=YES;"

    在连接字符串中,用 Data Source 参数指定工作簿的完整路径和文件名。Extended Properties 参数可包含两种属性:一个属性用于 ISAM 版本,一个属性用于指示表是否包括标题。
    使用 Excel 工作簿时,默认情况下,区域中的第一行是标题行(或字段名称)。如果第一个区域不包含标题,您可以在连接字符串的扩展属性中指定 HDR=NO。如果您在连接字符串中指定 HDR=NO,Jet OLE DB 提供程序将自动为您命名字段(F1 表示第一个字段,F2 表示第二个字段,依此类推)。

    与传统的数据库不同,在 Excel 表中没有指定列的数据类型的直接方式。而是,OLE DB 提供程序通过对一列中的八行进行扫描来猜测 该字段的数据类型。您可以通过为连接字符串的扩展属性中的 MAXSCANROWS 设置指定一个一 (1) 至十六 (16) 之间的值,来更改要扫描的行数。

    而注册表中TypeGuessRows=8,默认从前8行进行扫描来猜测该字段的数据类型,设置TypeGuessRows=0表示不猜测数据类型。

5、MaxScanRows详解

    与Excel注册表参数雷同,MaxScanRows=19(16进制)表示从前25行进行扫描猜测该字段的数据类型。

    在不修改注册表的情况下,可通过以下连接字符串实现(VB代码):

复制代码
strConn = ""
strConn = strConn & "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFolder & ";"
strConn = strConn & "Extended Properties="
strConn = strConn & Chr(34)
strConn = strConn & "text;CharacterSet=UNICODE;HDR=Yes;FMT=Delimited;IMEX=1;MaxScanRows=0;"
strConn = strConn & Chr(34)
 
Set cn = New ADODB.Connection
With cn
    .Provider = "Microsoft.Jet.OLEDB.4.0" ' this line is redundant, but it helps you read the code
    .ConnectionString = strConn
    .Properties("Jet OLEDB:Registry Path") = "SOFTWARE\TacticalApps\MyApp\1.0"
    .Mode = adModeRead
    .Open
End With
复制代码

 

通过oledb驱动读取excel、csv数据丢失解决方案

1、问题出现       在开发应用程序的过程中,比较常用一功能就是通过oledb驱动读取excel、csv、text等文件;而最近有客户反映,在使用短信平台(下载地址:http://www.sms...
  • zsy619
  • zsy619
  • 2017年02月23日 08:28
  • 544

C#用Odbc、Oledb查询Excel和CSV

一、用Odbc、Oledb查询Excel和CSV 1、
  • huangcailian
  • huangcailian
  • 2014年07月17日 18:07
  • 3766

利用OleDb导入Excel数据丢失问题及解决方法

在开发的应用中,对于Excel数据导入,一直都利用OleDb,以前都收到用户反馈有啥问题。但这几天搞一个项目,也用到了这个东西,还在测试阶段就发现出了问题:经常会出现某一字段不允许有空值。按常规的认识...
  • gaofeng2000
  • gaofeng2000
  • 2013年08月29日 12:33
  • 2164

采用OLEDB读取EXCEL文件

添加命名空间usingSystem.Data.OleDb;//Excel表数据操作//选择文件 private void simpleButton1_Click(object sender, Even...
  • qq_37191147
  • qq_37191147
  • 2017年04月12日 09:49
  • 684

Oledb方式读csv文件

1. 创建Schema文件 private string GenerateTextDriverSchema(string pFileFullName, CSVDelimiter pDelimiter,...
  • wxg_kingwolfmsncn
  • wxg_kingwolfmsncn
  • 2013年09月30日 13:33
  • 472

c#通过oledb获取excel文件表结构信息

 这个问题来自论坛提问,同理可以获得access等数据库的表结构信息。 using System;namespace ConsoleApplication11...{    class Program...
  • jinjazz
  • jinjazz
  • 2008年05月13日 14:22
  • 7458

C#读取Excel(通过OleDb)

通过OleDb连接,读取Excel。 Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filenameurl + ";Extended P...
  • iuhiqnehc
  • iuhiqnehc
  • 2012年12月07日 13:19
  • 554

x86,x64系统下安装OleDB驱动

转自:http://tonzi.blog.163.com/blog/static/4199583620144585819532/ Office 2007 x32,Win7 x64 安装Ole...
  • fengxing11
  • fengxing11
  • 2016年10月20日 15:27
  • 2486

C#操作Excel的OLEDB方式与COM方式比较

在对Excel进行读写操作时,使用微软自身提供的解决方案,有两种,分别是OLEDB方式和调用COM组件的方式 1. OLEDB方式 用这种方法读取Excel速度相对调用COM组件来讲是非常的快的,...
  • sundacheng1989
  • sundacheng1989
  • 2013年03月14日 15:45
  • 5063

使用OLEDB读取不同版本Excel数据的连接字符串设置

摘要: 用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的。 /// ...
  • tiana0
  • tiana0
  • 2015年06月01日 09:46
  • 1910
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过oledb驱动读取excel、csv数据丢失解决方案
举报原因:
原因补充:

(最多只允许输入30个字)