討論區快速選單
知識庫快速選單
程式設計俱樂部Facebook粉絲團 政府補助!學嵌入式+物聯網 傑米的攝影旅遊筆記
[ 回上頁 ] [ 討論區發言規則 ]
請問EXCEL資料型態問題(實在找不到人解)
更改我的閱讀文章字型大小
作者 : bubucar(bubucar)
[ 貼文 57 | 人氣 9455 | 評價 20 | 評價/貼文 0.35 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/9/10 上午 10:50:39
經程式撰寫關於excel資料讀取與轉置,發現excel在操作上,若是調整儲存格的型態,
並不代表excel就將該格資料存成那種型態,例如:
   5050 改成文字顯示 = > 儲存格會靠左 => 但程式透過odbc讀取時, 其資料型態仍為數值
表示excel儲存格資料的[顯示型態<>資料型態]
試問..1.如何得知excel儲存格資料的"資料型態"?
     2.如何去修改其"資料型態"?
作者 : hkln(HKLN.net) Perl卓越專家Oracle卓越專家資訊類作業求救優秀好手一般優秀好手程式設計甘苦談優秀好手C#卓越專家貼文超過2000則人氣指數超過100000點
[ 貼文 2135 | 人氣 122272 | 評價 14600 | 評價/貼文 6.84 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/9/10 下午 01:11:24
> 5050 改成文字顯示 = > 儲存格會靠左 => 但程式透過odbc讀取時, 其資料型態仍為數值
>表示excel儲存格資料的[顯示型態<>資料型態]
>試問..1.如何得知excel儲存格資料的'資料型態'?
> 2.如何去修改其'資料型態'?

試試:
先設定儲存格格式為文字,然後從新打上 5050 。
作者 : bubucar(bubucar)
[ 貼文 57 | 人氣 9455 | 評價 20 | 評價/貼文 0.35 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/9/10 下午 02:14:02
>試試:
>先設定儲存格格式為文字,然後從新打上 5050 。

首先,謝謝您的建議!! 
就end user的角度來看,是不能要求他們這麼做的,
因為end user在產生excel檔案時,其來源有許多,
如果是人工輸入的,可以確定知道要打在哪些儲存格中,
這個方法是可以達到目的,頂多user會抱怨太麻煩之類的話
但如果是由其他應用系統轉出的,user就不能確定什麼資料
會轉到excel的哪個column,甚至有多少rows,更何況
轉出的資料中,同一個column也會存在有些是儲存格是文字,
有些儲存格是數字的問題!

小弟試著將一個excel檔,由access讀入後,若第一列是文字時,
讀入的資料型就會設定在文字,而後抓資料時,若該column中有
數字存在,access也會無法正常讀取,顯示[#數字!]的字樣,裡頭
是沒有值的..

同樣的由程式透過odbc讀入,也會發生這種狀況,讀入的會是[null]值

不過,還是謝謝您的建議!!
作者 : still(still) 貼文超過200則人氣指數超過10000點
[ 貼文 342 | 人氣 14970 | 評價 490 | 評價/貼文 1.43 | 送出評價 9 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/9/10 下午 03:21:37
'
'用VBA可以自動解決這問題:
'請於EXCEL column 1, row=1,2,3,4 頭打幾個數字, 並將整colunn改成文字格式=>
'發現其並未真的改成 string, 請執行下列程式就OK!
'
Public Sub change()
   Dim i As Long
   Dim str1 As String
   Dim blData As Boolean
   '
   blData = True
   i = 1
   Do
     str1 = Trim(Cells(i, 1))
     If str1 = "" Then
     blData = False 'exit Do Loop
     Else
     Cells(i, 1) = CStr(Cells(i, 1)) ' CInt, CDbl...
     i = i + 1 'count++
     End If
   Loop While blData
End Sub
作者 : bubucar(bubucar)
[ 貼文 57 | 人氣 9455 | 評價 20 | 評價/貼文 0.35 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/9/10 下午 05:14:45
謝謝您的vba程式!!
但一般的end user不會用vba,就算寫好給他載入執行就好,
也會覺得麻煩,不願意這樣操作
所以,我比較想知道的是,能不能透過excel的操作,來達到這個功能!

謝謝您的費心!!
作者 : demo999(DEMO999) Java優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 632 | 人氣 29373 | 評價 3840 | 評價/貼文 6.08 | 送出評價 20 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人bubucar註記此篇回應為很有道理 2004/9/10 下午 07:37:39
輸入時
輸入-> '123000 <---- 會被視為是文字
輸入-> 123000 <---- 會被視為是數值

不過你要能說服 user 記得打 ' 符號在最前面
作者 : hkln(HKLN.net) Perl卓越專家Oracle卓越專家資訊類作業求救優秀好手一般優秀好手程式設計甘苦談優秀好手C#卓越專家貼文超過2000則人氣指數超過100000點
[ 貼文 2135 | 人氣 122272 | 評價 14600 | 評價/貼文 6.84 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人bubucar註記此篇回應為很有道理 2004/9/10 下午 08:05:28
>但如果是由其他應用系統轉出的,user就不能確定什麼資料
>會轉到excel的哪個column,甚至有多少rows,

可否說說是用什麼方法轉出來呢?
如果可以修改這個方法的步驟,在轉出來之前把儲存格轉成文字,
也許可以解決這個問題。


>更何況
>轉出的資料中,同一個column也會存在有些是儲存格是文字,
>有些儲存格是數字的問題!


這就有點困難了,因為您提到用 ODBC 來讀取資料,
那已經假設了這個工作表是一個 Table ,而 Table 的每個 column
都只可含有同一種資料型態的資料。

如果有不同的型態的資料,用 ODBC 可能會出錯。


>同樣的由程式透過odbc讀入,也會發生這種狀況,讀入的會是[null]值


如果真的無法確保一個 column 有同一樣的資料型態的話,
我建議不要用 ODBC ,改用其它方法,例如直接開啟那個 Excel 檔案,
讀取儲存格的值。
作者 : still(still) 貼文超過200則人氣指數超過10000點
[ 貼文 342 | 人氣 14970 | 評價 490 | 評價/貼文 1.43 | 送出評價 9 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/9/11 上午 12:35:10
使用Excel 不會VBA, 其實就會有點跛腳...

你還是要先用程式檢查欄位資料的正確, 不管在Excel或其他讀他的程式, 不然保證你會做出一些垃圾資料 :) :)

作者 : bubucar(bubucar)
[ 貼文 57 | 人氣 9455 | 評價 20 | 評價/貼文 0.35 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/9/13 上午 09:21:12

>輸入時
>輸入-> ''123000 <---- 會被視為是文字
>輸入-> 123000 <---- 會被視為是數值
>
>不過你要能說服 user 記得打 '' 符號在最前面
>
謝謝您的建議!
這個方法我有想過,結果被打槍了! 
因為,"End user" 素質不一,他們覺得太麻煩了!
作者 : bubucar(bubucar)
[ 貼文 57 | 人氣 9455 | 評價 20 | 評價/貼文 0.35 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/9/13 上午 09:31:54

>使用Excel 不會VBA, 其實就會有點跛腳...
>
>你還是要先用程式檢查欄位資料的正確, 不管在Excel或其他讀他的程式, 不然保證你會做出一些垃圾資料 :) :)
>
>
若說"跛腳" 的話...
要是對象是"現代"商科系高中職以上學歷者,那真的很"跛腳"
不過,若是您知道"End user"的定義,包括了現場作業人員,
這可能是工廠的領班,而且是”有一點教育程度的”領班,或
是十幾廿年前畢業的高中職學歷人員,這樣說他們,那就有點
不仁道了!
在此先聲明,個人並無學歷的成見,只是,電腦資訊算是熱門
新興行業(或稱行頭),我們即使站在這個領域上,也必需就
使用者的素質立場作考量,才能算是好的設計人員!
之所以會在此提出這個討論問題,目的當然是希望能聽到有更
多的建議,您的建議,也給了我一層不同的考量,無論如何,
還是謝謝您的不吝指教!!
作者 : still(still) 貼文超過200則人氣指數超過10000點
[ 貼文 342 | 人氣 14970 | 評價 490 | 評價/貼文 1.43 | 送出評價 9 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/9/14 下午 05:12:34
我們公司常用的excel檔案, 許多都有我寫的VBA程式, user 也是要教育的, 何況寫好後只要真的有用, 他們也樂的輕鬆...

  包括報價的資料庫, 請款的....都有. 如果不寫VBA那就會看到他們資料弄得亂七八糟(一堆檔案), 查詢也查不到, 很麻煩! 必須將資料依照資料庫方式儲存, 然後列印時再顯示在其中一個sheet. 再久資料也在!

  還有問題是---老闆會先覺得你績效不彰(看不到要看的東西), 雖然user也要有些責任, 但你規劃執行不善, 會首當其衝. 想辦法先做一兩件case起來, 大家才會對你有信心!

作者 : bubucar(bubucar)
[ 貼文 57 | 人氣 9455 | 評價 20 | 評價/貼文 0.35 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/9/15 上午 09:26:46
謝謝您的說明!

這個問題的緣由是客戶報給我們公司的一張軟體報修才發現Excel的這個問題,
前幾天,我已經請我們公司的專案經理去客戶那說明情況,並也先給了一些處理
上的替代方案,有
1.請客戶的資訊室自行開發一支vba的程式(因為若是由我們給,會charge費用)
2.異常資料在Excel中如何識別,並加以調整,但需以人工方式
3.透過access開啟該excel檔案,可以更容易看出問題資料,並加以調整,但仍
  需以人工方式
另外,我也已經請專案經理去詢問這個excel的製作過程,是否由其他軟體轉出?
什麼軟體轉的?轉出後,有沒有做過什麼動作?
基本上,我們公司的開發人員,除了開發部頭頭外,一律不對外直接面對客戶的,
除非上頭批準了!我已將狀況向上反應過,要不要免費提供工具程式,就不是我能
決定的了!

我想..是我們的立場不同,所以看法會不一樣!
作者 : libar55(曾經)
[ 貼文 13 | 人氣 548 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/10/7 下午 03:36:19
我想..那就直接將所有的東西當文字呢...(但如果有要SUM的欄位一律當數字,,因為不可能有文字可以SUM的道理)
作者 : still(still) 貼文超過200則人氣指數超過10000點
[ 貼文 342 | 人氣 14970 | 評價 490 | 評價/貼文 1.43 | 送出評價 9 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/11/13 上午 08:28:02
VBA有這樣恐怖嗎?

還有程式是我寫出來的, 給你客戶也"違法"? 舉手之勞, 做與不做吧...跟他說這個網址, 上來我就可以讓事情解決了 :)

因為我還找不到其他的解決方式! 當資料都已經這樣了, 你總不能一格一格按ENTER來修正吧???
作者 : frp(坤哥) Access頂尖高手貼文超過500則
[ 貼文 899 | 人氣 1706 | 評價 4790 | 評價/貼文 5.33 | 送出評價 12 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人bubucar註記此篇回應為很有道理 2005/2/11 下午 06:55:39
提供給你 一些經驗 (處理資料 in Excel or Access) about VBA

1.Excel 判對資型別 的 RowScan=8 行....文字>數字 (利用 Type() 函數)

2.利用 Excel 本身的VBA 強制資料轉換 ....文字加 ' ,日期統一格式 yyyy/m/d
   針對 Null 也要強制寫入資料...避免 ODBC 誤判

3.直接匯入資料(Acess)...會比連結方便(例:設 Index Key or 後續加工處理)

4.加設判斷點~ 例如總量/總金額/筆數 (必須強制無誤)增加 User資料嚴謹度 ~

5.秀出異常的資料(不同顏色) 提供 User 修正~ (例 :Key值重複 / 資料型態錯誤)

6.非必要...儘可能 讓資料來源 是資料庫(非 Excel Sheet ) ~

7.程式規劃:在Microsoft VBA中可以控制 Microsoft 物件(Excel/Access/Word/...)~
   ...朝這方向前進~妳會發現資料處理粉容易~

作者 : tatami(tatami)
[ 貼文 77 | 人氣 5 | 評價 340 | 評價/貼文 4.42 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/4/5 上午 10:17:23

>謝謝您的vba程式!!
>但一般的end user不會用vba,就算寫好給他載入執行就好,
>也會覺得麻煩,不願意這樣操作
>所以,我比較想知道的是,能不能透過excel的操作,來達到這個功能!
>
>謝謝您的費心!!

在 Workbook 中
Private Sub Workbook_Open()
    '在此做轉換工作
End Sub

當 Excel 打開你製作的 File 時, 此 VBA 事件會自動執行, end user 的程度好壞一點都沒有關係
作者 : zxqwzxqw(zxqwzxqw)
[ 貼文 9 | 人氣 861 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/30 下午 02:51:20
objWorksheet.Columns(i).NumberFormat
作者 : joyhuang(joy)
[ 貼文 44 | 人氣 2684 | 評價 90 | 評價/貼文 2.05 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人bubucar註記此篇回應為最佳解答 2006/11/27 下午 10:05:17
在輸入之前, 如確定要轉文字, 則先定義該欄位為 "文字"如下之語法
    Range(x).NumberFormatLocal = "@"
再塞值就可以了
    Range("b3").Value = x
作者 : bubucar(bubucar)
[ 貼文 57 | 人氣 9455 | 評價 20 | 評價/貼文 0.35 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/28 上午 10:33:37

>在輸入之前, 如確定要轉文字, 則先定義該欄位為 '文字'如下之語法
> Range(x).NumberFormatLocal = '@'
>再塞值就可以了
> Range('b3').Value = x
>
嗯...這個方法不錯!
至少可以在程式中先行定義!

後續:
很久沒上來這裡,突然接到有人回應,心裡覺得有點驚訝!
沒想到這麼久的東西,仍然有人願意嘗試,心裡覺得很感動!
事過境遷後,目前已沒在用PB進行開發了!
換了一間公司,erp部份用的是Oracle的Developer2000及PL/SQL
當然也有其他的工具,像是JAVA, Javascript,甚至還有Notes Script
但上面這個方法,倒是可以運用在所有要透過odbc來處理Excel的程式語言中
實用性算是高的!
我重新看了之前其他人的回應,站在不同的角度,處理的方法也必然會有所不同
只是大家可以思考的是,倒底是要站在do the right thing還是do the thing right的立場?
若以do the thing right為立場,主要是求效率為優先,當然是以"先求有再求好"的方式處理
不過,要是以do the right thing,是要堅持做對的事,效率次之的
自從去上了管理學的課,深深的有所感嘆
要能do the right thing right實在是不容易達到的事
若要取其一而行,也只能看公司的政策了!
我想,公司的政策,與自己的堅持有所抵觸時,這個時候,
這個人的處理方法及態度,就能決定這個人的價值所在
供諸位主管職的朋友參考!
作者 : bubucar(bubucar)
[ 貼文 57 | 人氣 9455 | 評價 20 | 評價/貼文 0.35 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/11/28 上午 10:33:44

>在輸入之前, 如確定要轉文字, 則先定義該欄位為 '文字'如下之語法
> Range(x).NumberFormatLocal = '@'
>再塞值就可以了
> Range('b3').Value = x
>
嗯...這個方法不錯!
至少可以在程式中先行定義!

後續:
很久沒上來這裡,突然接到有人回應,心裡覺得有點驚訝!
沒想到這麼久的東西,仍然有人願意嘗試,心裡覺得很感動!
事過境遷後,目前已沒在用PB進行開發了!
換了一間公司,erp部份用的是Oracle的Developer2000及PL/SQL
當然也有其他的工具,像是JAVA, Javascript,甚至還有Notes Script
但上面這個方法,倒是可以運用在所有要透過odbc來處理Excel的程式語言中
實用性算是高的!
我重新看了之前其他人的回應,站在不同的角度,處理的方法也必然會有所不同
只是大家可以思考的是,倒底是要站在do the right thing還是do the thing right的立場?
若以do the thing right為立場,主要是求效率為優先,當然是以"先求有再求好"的方式處理
不過,要是以do the right thing,是要堅持做對的事,效率次之的
自從去上了管理學的課,深深的有所感嘆
要能do the right thing right實在是不容易達到的事
若要取其一而行,也只能看公司的政策了!
我想,公司的政策,與自己的堅持有所抵觸時,這個時候,
這個人的處理方法及態度,就能決定這個人的價值所在
供諸位主管職的朋友參考!
作者 : benson3857(benson)
[ 貼文 82 | 人氣 409 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/4/24 下午 01:31:57
我是本站會員 benson 現於中央大學念研究所,
我的研究主題如下:『虛擬知識社群知識分享行為及影響因素研究』
研究知識社群會員之知識分享的行為,樣本主要以本站之會員為對象
希望各位會員能協助本人,幫忙填寫下面 之問卷調查
問卷調查之連結為:http://www.my3q.com/home2/159/benson3857/92148.phtml
再次謝謝會員熱心的幫忙
 板主 : 小朱
 > 高手過招區 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 高手過招區 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
高手過招區
1 冼鏡光 410 
2 長長 350 
3 eBoy 290 
4 Benson 280 
5 速定 260 
6 HKLN.net 240 
7 青衫 210 
8 ozzy 190 
9 冷眼 150 
10 John 150 
高手過招區
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.09375