关于连接字符串中IMEX参数的一个问题
2007-04-30 16:00
295 查看
问题描述:我们要导入的excel数据文件中有一列叫做“中标价格”的,这个列里的数据有那种仅包含数字的,也有只有中文的,也有中文和数字混合的,
对这样的数据在查询分析器里面执行
SELECT 中标人,[中标价格]
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="D:\招标文件台帐(全).xls";User ID=;Password=;Extended properties="Excel 5.0"')...[招标文件$]
会发现只有那些纯数字的值可以被查出来,其他带汉字显示的都是NULL。查看Excel里的单元格属性,发现本来就是常规的文本格式,没有什么异常;尝试用SQLSERVER管理器把excel里的表导到库里,发现这个字段的默认转换字段类型为float,这显然不是我们想要的。当Excel作为数据源的时候,数据读取程序(如OLEDB等)是如何判断其列属性的呢?下面这段文字给出了答案:
Excel 驱动程序读取指定源中一定数量的行(默认情况下为 8 行)以推测每列的数据类型。如果推测出列可能包含混合数据类型(尤其是混合了文本数据的数值数据时),驱动程序将决定采用占多数的数据类型,并对包含其他类型数据的单元返回空值。(如果各种数据类型的数量相当,则采用数值类型。)
Excel 工作表中大部分单元格格式设置选项不会影响此数据类型判断。可以通过指定导入模式来修改 Excel 驱动程序的此行为。若要指定导入模式,请在“属性”窗口中将 IMEX=1 添加到 Excel 连接管理器的连接字符串内的扩展属性值中。
按这段文字所说,我把连接字符串调整为下面两种方式,都可以顺利读出数据:
1.select * from openrowset('Microsoft.Jet.OLEDB.4.0','EXCEL 8.0;HDR=YES;User id=admin;Password=;IMEX=1;
DATABASE=D:\招标文件台帐(全).xls', [招标文件$])
2.SELECT [中标价格] FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="D:\招标文件台帐(全).xls";User ID=;Password=;Extended properties="Excel 5.0;IMEX=1"')...[招标文件$]
还有一个哥们儿提出更改Excel宏的方式,虽然并不实用(我们不可能让所有用户去做这样的更改),但却是一个很“彻底”的方法,这里也不妨摘录一下:
问题不在sqlserver ,要在excel中将身份证号字段强制转换为文本格式,如下:
在包含数据的excel文件中加入以下宏:
Sub 将所选单元格内容转换为字符串格式()
ActiveCell.FormulaR1C1 = "'" + ActiveCell.Text
Dim iCol, iRow
For iRow = 1 To Selection.Cells.Rows.Count
For iCol = 1 To Selection.Cells.Columns.Count
Selection.Cells(iRow, iCol).FormulaR1C1 = "'" + Selection.Cells(iRow, iCol).Text
Next iCol
Next iRow
End Sub
加入宏的方法:
1:打开Excel文件
2:进入“工具”-“宏”-“Visual Basic 编辑器”
3:选择菜单“插入”--“模块”,将上面的代码copy到里面
4:关闭“Visual Basic 编辑器”,选择保存
运行宏的方法:
1:进入“工具”-“宏”-“宏”
2:在“宏”界面中选中要执行的宏
3:点击“执行”按钮
选定身份证号那一列,执行该宏,之后再进行导入操作。
接下来的问题是,IMEX=1等扩展属性究竟是什么意思?查到的下面两句解释应该是足够清楚了:
1.IMEX=1:tells the driver to always read "intermixed" data columns as text
2.
600 |
1882 |
1124 |
16.5元/㎡ |
17.5元/m3 |
劳务费104元/㎡,扩大分包费13元/㎡ |
劳务费104元/㎡,扩大分包费13元/㎡ |
SELECT 中标人,[中标价格]
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="D:\招标文件台帐(全).xls";User ID=;Password=;Extended properties="Excel 5.0"')...[招标文件$]
会发现只有那些纯数字的值可以被查出来,其他带汉字显示的都是NULL。查看Excel里的单元格属性,发现本来就是常规的文本格式,没有什么异常;尝试用SQLSERVER管理器把excel里的表导到库里,发现这个字段的默认转换字段类型为float,这显然不是我们想要的。当Excel作为数据源的时候,数据读取程序(如OLEDB等)是如何判断其列属性的呢?下面这段文字给出了答案:
Excel 驱动程序读取指定源中一定数量的行(默认情况下为 8 行)以推测每列的数据类型。如果推测出列可能包含混合数据类型(尤其是混合了文本数据的数值数据时),驱动程序将决定采用占多数的数据类型,并对包含其他类型数据的单元返回空值。(如果各种数据类型的数量相当,则采用数值类型。)
Excel 工作表中大部分单元格格式设置选项不会影响此数据类型判断。可以通过指定导入模式来修改 Excel 驱动程序的此行为。若要指定导入模式,请在“属性”窗口中将 IMEX=1 添加到 Excel 连接管理器的连接字符串内的扩展属性值中。
按这段文字所说,我把连接字符串调整为下面两种方式,都可以顺利读出数据:
1.select * from openrowset('Microsoft.Jet.OLEDB.4.0','EXCEL 8.0;HDR=YES;User id=admin;Password=;IMEX=1;
DATABASE=D:\招标文件台帐(全).xls', [招标文件$])
2.SELECT [中标价格] FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="D:\招标文件台帐(全).xls";User ID=;Password=;Extended properties="Excel 5.0;IMEX=1"')...[招标文件$]
还有一个哥们儿提出更改Excel宏的方式,虽然并不实用(我们不可能让所有用户去做这样的更改),但却是一个很“彻底”的方法,这里也不妨摘录一下:
问题不在sqlserver ,要在excel中将身份证号字段强制转换为文本格式,如下:
在包含数据的excel文件中加入以下宏:
Sub 将所选单元格内容转换为字符串格式()
ActiveCell.FormulaR1C1 = "'" + ActiveCell.Text
Dim iCol, iRow
For iRow = 1 To Selection.Cells.Rows.Count
For iCol = 1 To Selection.Cells.Columns.Count
Selection.Cells(iRow, iCol).FormulaR1C1 = "'" + Selection.Cells(iRow, iCol).Text
Next iCol
Next iRow
End Sub
加入宏的方法:
1:打开Excel文件
2:进入“工具”-“宏”-“Visual Basic 编辑器”
3:选择菜单“插入”--“模块”,将上面的代码copy到里面
4:关闭“Visual Basic 编辑器”,选择保存
运行宏的方法:
1:进入“工具”-“宏”-“宏”
2:在“宏”界面中选中要执行的宏
3:点击“执行”按钮
选定身份证号那一列,执行该宏,之后再进行导入操作。
接下来的问题是,IMEX=1等扩展属性究竟是什么意思?查到的下面两句解释应该是足够清楚了:
1.IMEX=1:tells the driver to always read "intermixed" data columns as text
2.
HDR=Yes;to indicate that I have a header row in my sheets
相关文章推荐
- 关于连接字符串中IMEX参数的一个问题
- 你不得不知道的关于JavaScript 中字符串连接的性能问题
- 对java中的String采用+=连接字符串需要注意的一个问题
- cocos2dx中使用的tolua关于字符串处理的一个问题
- #菜鸟新手EclipseJavaEE&MySQL&Tomcat#关于一个Eclipse中登陆界面通过连接MySQL数据库进行验证的小体验(感谢qq群友引燃的解答让我解决这个小问题)
- Excel连接字符串中的HDR、IMEX参数详解
- 用java写关于删除一个字符串的字符以及删除一个字符串与另一个字符串中相同字符的问题
- 安装Piwik时遇到的一个奇怪的关于PHP参数问题的解决办法
- Web.config中关于数据库连接字符串配置问题
- 关于数据库连接字符串问题(第二部分连接MySQL)
- 关于将一个字符串转换为整数的问题
- 关于js中字符串replace方法的第二参数为function时,参数的顺序问题分析
- 关于一个时间的转换问题。由一个RFC3339时间格式的字符串转为本地时间
- 很奇怪的一个问题,是关于sql参数化和传where in 参数的迷惑.请大伙给讲讲吧...小弟很迷糊现在.各位园友,拉兄弟一把!!
- 参数读取一个关于java.net.Socket的超时的问题
- 关于kafka连接的一个小问题
- OLEDB 连接EXCEL的连接字符串IMEX的问题
- javascript正则表达式中的一个奇葩问题 有关于参数g
- 一个关于参数传递的问题
- 关于netkeep连不了网的一个问题(点击连接互联网后按钮变灰色)