佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 871|回复: 14

关于import excel to datagrid发生的小问题(asp.net / vb)

[复制链接]
发表于 19-10-2006 05:28 PM | 显示全部楼层 |阅读模式
我弄了一个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啊。。
回复

使用道具 举报


ADVERTISEMENT

发表于 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 | 显示全部楼层
你可以用 IsNumeric
回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

Follow Us
发表于 26-10-2006 01:09 AM | 显示全部楼层
Excel 里你可以用 macro.
回复

使用道具 举报

发表于 26-10-2006 03:31 PM | 显示全部楼层
connection string 后面加 ;IMEX=1 就没有问题了...
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 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 | 显示全部楼层
原帖由 counterking 于 26-10-2006 07:43 PM 发表
To: little_orc

对不起,请问你说的DISPLAY SENSITIVE CHAR是指那些呢?

另外,我察觉不到你的code和我的有什么分别。 请赐教。。谢谢


没有什么不一样
你看清楚点~~~~
回复

使用道具 举报

 楼主| 发表于 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();
  }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 23-8-2025 02:50 PM , Processed in 0.117519 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表