查看: 870|回复: 14
|
关于import excel to datagrid发生的小问题(asp.net / vb)
[复制链接]
|
|
我弄了一个web application 可以让user import excel file 然后显示在datagrid
一切进行顺利, 但刚刚发现一个小小的bug...
就是在excel file里,under "doorplate" 和 "bedroom"这两个column的data不能正常显示。
比如说:
No Doorplate Bedroom
1 32-B-2 6
2 45-C-1 4
3 56 3
在doorplate那个column, 凡是 pure number (56) 就不会显示在datagrid里,但如果我换去 "No. 56"就行! 为何呢?p/s: 我已经把 format cell换去 general
而由于bedroom那个column 全是pure number.. 所以一个都没有显示!
注意:但 No 这个column切可以正常显示,即使全是pure number,为何呢?
我check 了 No 这个column的format cell,也是general啊。。 |
|
|
|
|
|
|
|
发表于 23-10-2006 03:09 AM
|
显示全部楼层
如果我没记错, 这是 Excel 的 bug.
我在几年前有遇到这样的问题, 解决方法就是在前面加一个字母, 然后 import 完后用 sql statement 清除掉. |
|
|
|
|
|
|
|

楼主 |
发表于 25-10-2006 01:13 PM
|
显示全部楼层
对! 如果我加了一个字母在前面就okie了。。
但问题是现在我有差不多10k的资料是需要加的。。 请问excel能不能写一个application..类似下面的情况
if column1 is Pure Number Then
"No." + column1
End If
因为在那个column,有些是已经with "No." or "No" 料的 |
|
|
|
|
|
|
|
发表于 25-10-2006 01:34 PM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 26-10-2006 12:40 AM
|
显示全部楼层
对不起。。 我想问的是。。 有没有办法可以在excel apply 我之前提到的logic? |
|
|
|
|
|
|
|

楼主 |
发表于 26-10-2006 01:02 AM
|
显示全部楼层
以下是我的coding for import excel file to datagrid
Private Sub display_data()
Dim strConn As String = "Provider=Microsoft.Jet.OleDb.4.0;" _
& "data source=C:\testing.xls;" _
& "Extended Properties=Excel 8.0;"
'First DataGrid
Dim objConn As New OleDbConnection(strConn)
Dim strSql As String = "Select * From house"
Dim objCmd As New OleDbCommand(strSql, objConn)
Try
objConn.Open()
dtgAddresses1.DataSource = objCmd.ExecuteReader()
dtgAddresses1.DataBind()
Catch exc As Exception
Response.Write(exc.ToString())
Finally
objConn.Dispose()
End Try
End Sub |
|
|
|
|
|
|
|
发表于 26-10-2006 01:09 AM
|
显示全部楼层
Excel 里你可以用 macro.  |
|
|
|
|
|
|
|
发表于 26-10-2006 03:31 PM
|
显示全部楼层
connection string 后面加 ;IMEX=1 就没有问题了... |
|
|
|
|
|
|
|

楼主 |
发表于 26-10-2006 05:22 PM
|
显示全部楼层
Dim strConn As String = "Provider=Microsoft.Jet.OleDb.4.0;" _
& "data source=C:\testing.xls;" _
& "Extended Properties=Excel 8.0;IMEX=1;"
这样子?? 并不行哦。。。出现下列的error msg
System.Data.OleDb.OleDbException: Could not find installable ISAM. at System.Data.OleDb.OleDbConnectionInternal. |
|
|
|
|
|
|
|
发表于 26-10-2006 05:45 PM
|
显示全部楼层
原帖由 counterking 于 26-10-2006 05:22 PM 发表
Dim strConn As String = "Provider=Microsoft.Jet.OleDb.4.0;" _
& "data source=C:\testing.xls;" _
& "Extended Properties=Excel 8.0;IMEX=1;"
这样子?? 并不 ...
上面的MSG是说你的connection string有问题,
试试下面的...
Dim strConn As String = "Provider=Microsoft.Jet.OleDb.4.0;" _
& "data source=C:\testing.xls;" _
& "Extended Properties=""Excel 8.0;IMEX=1"""
我不会vb.net的,只会C#, 在C#,如要DISPLAY SENSITIVE CHAR,
前面放 \ 就可以了, vb.net 我不知道....
[ 本帖最后由 little_orc 于 27-10-2006 10:44 AM 编辑 ] |
|
|
|
|
|
|
|

楼主 |
发表于 26-10-2006 07:43 PM
|
显示全部楼层
To: little_orc
对不起,请问你说的DISPLAY SENSITIVE CHAR是指那些呢?
另外,我察觉不到你的code和我的有什么分别。 请赐教。。谢谢 |
|
|
|
|
|
|
|
发表于 27-10-2006 12:27 AM
|
显示全部楼层
原帖由 counterking 于 26-10-2006 07:43 PM 发表
To: little_orc
对不起,请问你说的DISPLAY SENSITIVE CHAR是指那些呢?
另外,我察觉不到你的code和我的有什么分别。 请赐教。。谢谢
忘了 imex 这个方法... 的确可以解决问题.
这里有关于这个 bug 的报道: http://support.microsoft.com/kb/194124/
你可以用里面的方法来做.
另外, 那不叫 sensitive char, 正确来说应该是 escape character. |
|
|
|
|
|
|
|
发表于 27-10-2006 10:43 AM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 27-10-2006 10:56 AM
|
显示全部楼层
行了! 谢谢你!
原来要写成这样
Provider=Microsoft.Jet.OleDb.4.0;data source=C:\test.xls;Extended Properties="Excel 8.0;IMEX=1" |
|
|
|
|
|
|
|
发表于 13-11-2006 05:49 PM
|
显示全部楼层
原帖由 counterking 于 19-10-2006 05:28 PM 发表
就是在excel file里,under "doorplate" 和 "bedroom"这两个column的data不能正常显示。
比如说:
No Doorplate Bedroom
1 32-B-2 6
2 45-C-1 4
3 56 3
在doorplate那个column, 凡是 pure number (56) 就不会显示在datagrid里,但如果我换去 "No. 56"就行! 为何呢?p/s: 我已经把 format cell换去 general
而由于bedroom那个column 全是pure number.. 所以一个都没有显示!
注意:但 No 这个column切可以正常显示,即使全是pure number,为何呢?
我check 了 No 这个column的format cell,也是general啊。。
你的Connection string 肯定有用IMEX=1?
如果有的话,那么可能在你的Coding出现问题,
大多数是DATASET的问题, 用DEBUG LOOP DATASET,找出问题.
example:
if (dsTemp.Tables[0].Rows.Count > 0)
{
for (int x=0; x <dsTemp.Tables[0].Count; x++)
{
string a1,a2,a3;
a1 = ds.Tables[0].Rows[x]["Doorplate"].ToString();
a2 = dsTemp.Tables[0].Rows[x]["Bedroom"].ToString();
a2 = dsTemp.Tables[0].Rows[x]["No"].ToString();
}
} |
|
|
|
|
|
|
| |
本周最热论坛帖子
|