線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3220
推到 Plurk!
推到 Facebook!

Excel載入到DBGrid第一列資料變數值

尚未結案
sssp116
一般會員


發表:23
回覆:27
積分:10
註冊:2008-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-04-22 14:31:53 IP:60.248.xxx.xxx 訂閱
利用ADO等元件成功讀取Excel到DBGrid了,但是現在有個問題就是說
我Excel裡面第一列的資料是英數合起來的會員帳號,看過Excel裡面的儲存格格式都設為文字了
當初在資料庫裡面的資料型態就是以Char為主了,只是現在讀進來以後第一列的資料變成只能顯示數字
例如: 會員帳號 會員姓名 E-Mail 聯絡地址
000000000000王二明 c@com 台北市等

我第二個資料的會員帳號為kthe1204,可是只要有英文參入在裡面的情形下就無法顯示,因為他自動把資料型態改為數值了
只有第一列會這樣子,後面的包含姓名地址等等~中英數都可以顯現出來的,因為並沒有修改任何參數也沒有更改資料型態下
不太曉得為什麼會這樣子呢~而且還有個問題就是說我程式寫死他的欄寬~可是只有Colunms[0]有效果~其餘都沒有呢
以下為我的開檔程式碼:

[code cpp]
void __fastcall TForm1::FLB1DblClick(TObject *Sender)
{
ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" FLB1->FileName ";Extended Properties=Excel 8.0;Persist Security Info=False";
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("select * from [Sheet1$]");
ShowMessage("檔案已成功開啟,資料將顯示於左方欄位中。");
ADOQuery1->Open();
Form1->Caption = "網頁會員資料庫 Excel檔案已載入,請勿重複開啟。 檔名:" FLB1->FileName;
DBGrid2->Columns[0].Items[0]->Width = 60;
DBGrid2->Columns[1].Items[0]->Width = 200;
DBGrid2->Columns[2].Items[0]->Width = 80;
DBGrid2->Columns[3].Items[0]->Width = 150;
DBGrid2->Columns[4].Items[0]->Width = 75;
DBGrid2->Columns[5].Items[0]->Width = 30;
DBGrid2->Columns[6].Items[0]->Width = 250;
DBGrid2->Columns[7].Items[0]->Width = 50;
}
[/code]

不好意思小弟還是這論壇的新手,昨天有發文過一篇一樣是讀取Excel的文章想問問看是否可以用BCB內建的VCL元件來做讀取等動作
可是今天一看已經被刪文了,可能我發了不適當的文而被刪掉!這點我道歉,但是可以在刪之前告知一下說我哪個地方發言不當而必須做刪文動作的警示嗎
因為如果不知道任何資訊所發的文就被刪掉,那這樣子不曉得如何去改我怕以後還會有不當的文章又發出來導致讓大家感到不適
小弟雖是新手但是有心想學,這些東西既不是功課也不是什麼專案工作等等,小弟純粹是有很大的興趣想來做些東西增加經驗
麻煩論壇上的各位高手們,包含版主等可以給新人一個機會去成長!絕對會知錯能改,努力向上的!拜託一下了~拜託
編輯記錄
sssp116 重新編輯於 2010-04-22 14:32:50, 註解 無‧
sssp116 重新編輯於 2010-04-22 14:34:10, 註解 無‧
sssp116 重新編輯於 2010-04-22 14:35:54, 註解 無‧
sssp116 重新編輯於 2010-04-22 14:37:00, 註解 無‧
sssp116 重新編輯於 2010-04-22 14:42:16, 註解 不好意思這篇應該放在C++區‧
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-04-22 15:27:49 IP:114.32.xxx.xxx 未訂閱
您好,

以您的例子, 把 123 改成 '123 (即前加一單引號)
看看

也就是說, 文數字欄位都加單引號再傳出給 XLS 比較保險

請試看看, 我沒實測哦

------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
sssp116
一般會員


發表:23
回覆:27
積分:10
註冊:2008-12-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-04-22 15:47:40 IP:60.248.xxx.xxx 訂閱
不好意思,我的會員資料有2千多筆
這樣子每筆前面都要加上這個有點困難耶
而且剛測了一下依然沒辦法顯示呢
還是只能顯示純數字資料
謝謝大大~我會再試試看的^^
===================引 用 st33chen 文 章===================
您好,

以您的例子, 把 123 改成 '123 (即前加一單引號)
看看

也就是說, 文數字欄位都加單引號再傳出給 XLS 比較保險

請試看看, 我沒實測哦

st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-04-22 16:27:22 IP:114.32.xxx.xxx 未訂閱
sorry, 我看錯了, 以為是 dbgrid 轉出到 xls

如果是 xls 轉入到 dbgrid 的話
那 dbgrid 所連結的 table 的相對應欄位設為 string 型
然後從 xls 讀到的該欄位的值若為數字 用 inttostr 或 floattostr 轉成字串後再存入 table 的對應欄位

再 say sorry,
我看了一下您的程式, 是直接把 xls 當 table 使用, 這樣的話, 應該是改xls的第一筆資料就可以,
我記得是以第一筆的各欄位資料型態當成 table 的 欄位型態

請 再試一下.

===================引 用 sssp116 文 章===================
不好意思,我的會員資料有2千多筆
這樣子每筆前面都要加上這個有點困難耶
而且剛測了一下依然沒辦法顯示呢
還是只能顯示純數字資料
謝謝大大~我會再試試看的^^
===================引 用 st33chen 文 章===================
您好,

以您的例子, 把 123 改成 '123 (即前加一單引號)
看看

也就是說, 文數字欄位都加單引號再傳出給 XLS 比較保險

請試看看, 我沒實測哦

------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2010-04-22 16:35:26, 註解 無‧
st33chen 重新編輯於 2010-04-22 16:36:55, 註解 無‧
st33chen 重新編輯於 2010-04-22 16:38:17, 註解 無‧
sssp116
一般會員


發表:23
回覆:27
積分:10
註冊:2008-12-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-04-23 14:58:24 IP:60.248.xxx.xxx 訂閱
不好意思,要從數值轉換為字串這部分是沒問題,但是現在是想說是什麼原因導致DBGrid裡面會無法顯示某些Excel的資料
像我又試了幾個我自己另外新增的Excel檔,都存成97-2003格式。現在很奇怪的問題來了~(我詢問另一位工程師也都覺得很奇怪)
第一:DBGrid裡面的屬性皆無改
第二:新增的資料表為Book1,欄位有帳號及姓名,讀進去DBGrid以後,變成有英數一起的數值可顯現,純數字卻無法顯現,這跟我第一次遇到的問題剛好是相反過來的,第一次讀我網頁會員資料檔進去是只能顯示純數字,有英數一起的皆無法顯現,這問題真的很神奇
第三:再新增一資料表為Book2,欄位裡面只有單存的英文及數字組合,讀進去DBGrid之後,最上方欄位的標題可顯現英文及數字,下方欄位開始接無法顯現英文了,只能顯現數字
第四:在我的程式裡面我有針對DBGrid的屬性寫了兩個function來控制欄寬及Title至中,程式碼如下:
[code cpp]
void __fastcall TForm1::DBGrid_Columns() //欄寬
{
DBGrid2->Columns[0].Items[0]->Width = 60;
DBGrid2->Columns[0].Items[1]->Width = 100;
DBGrid2->Columns[0].Items[2]->Width = 80;
DBGrid2->Columns[0].Items[3]->Width = 200;
DBGrid2->Columns[0].Items[4]->Width = 50;
DBGrid2->Columns[0].Items[5]->Width = 120;
DBGrid2->Columns[0].Items[6]->Width = 90;
DBGrid2->Columns[0].Items[7]->Width = 20;
DBGrid2->Columns[0].Items[8]->Width = 40;
DBGrid2->Columns[0].Items[9]->Width = 40;
DBGrid2->Columns[0].Items[10]->Width = 70;
DBGrid2->Columns[0].Items[11]->Width = 70;
DBGrid2->Columns[0].Items[12]->Width = 100;
DBGrid2->Columns[0].Items[13]->Width = 50;
}

[/code]

[code cpp]
void __fastcall TForm1::DBGrid_Title() //至中
{
DBGrid2->Columns[0].Items[0]->Title->Alignment = taCenter;
DBGrid2->Columns[0].Items[1]->Title->Alignment = taCenter;
DBGrid2->Columns[0].Items[2]->Title->Alignment = taCenter;
DBGrid2->Columns[0].Items[3]->Title->Alignment = taCenter;
DBGrid2->Columns[0].Items[4]->Title->Alignment = taCenter;
DBGrid2->Columns[0].Items[5]->Title->Alignment = taCenter;
DBGrid2->Columns[0].Items[6]->Title->Alignment = taCenter;
DBGrid2->Columns[0].Items[7]->Title->Alignment = taCenter;
DBGrid2->Columns[0].Items[8]->Title->Alignment = taCenter;
DBGrid2->Columns[0].Items[9]->Title->Alignment = taCenter;
DBGrid2->Columns[0].Items[10]->Title->Alignment = taCenter;
DBGrid2->Columns[0].Items[11]->Title->Alignment = taCenter;
DBGrid2->Columns[0].Items[12]->Title->Alignment = taCenter;
DBGrid2->Columns[0].Items[13]->Title->Alignment = taCenter;
}
[/code]

此一部分我已經修改完畢且正常,謝謝
編輯記錄
sssp116 重新編輯於 2010-04-27 08:39:28, 註解 無‧
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-04-23 18:30:37 IP:114.32.xxx.xxx 未訂閱
可否把 xls 檔傳上來讓大家試一下

thanks
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
sssp116
一般會員


發表:23
回覆:27
積分:10
註冊:2008-12-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-04-26 13:07:30 IP:60.248.xxx.xxx 訂閱
不好意思,因為顧及到廠商資料隱私權的關係,小弟自己做了一個Excel檔符合我從網頁資料庫轉出來的檔案格式是符合的,一樣在我的程式裡面發生的問題是相符的。我再把我程式發生的問題再簡述一次,謝謝各位大大。
第一:會員帳號部分,只要有英文存在皆無法顯示,只能顯示存文字

欄寬以及至中部分已經可以正常,是我參數給錯的關係,謝謝。

謝謝。
===================引 用 st33chen 文 章===================
可否把 xls 檔傳上來讓大家試一下

thanks
編輯記錄
sssp116 重新編輯於 2010-04-26 13:11:22, 註解 無‧
sssp116 重新編輯於 2010-04-26 13:13:05, 註解 無‧
sssp116 重新編輯於 2010-04-27 08:24:04, 註解 我有另外發一篇文裡面有我的Excel檔,不會利用修改上傳,抱歉。‧
sssp116 重新編輯於 2010-04-27 08:40:39, 註解 無‧
sssp116
一般會員


發表:23
回覆:27
積分:10
註冊:2008-12-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-04-27 08:44:46 IP:60.248.xxx.xxx 訂閱
各位我已經發現是Excel本身的問題了,我新發的那篇文所含的Excel檔
一開始一樣第一行無法顯示英數只能顯示純數字,但是我往後面看了之後發現
郵遞區號明明也是以文字儲存,為什麼前面三個可以顯示後面兩個卻不可以呢?!
果然被我發現了在Excel裡面有個叫做忽略錯誤的功能,可能不曉得什麼原因一定要把儲存格裡面的資料
通通忽略錯誤,這樣子所有資料就可以正常顯示。
這是小弟找到的一個方法,希望還有其他方法可以在程式裡面動態讓Excel裡面儲存格格式相符
小弟會持續Debug,有試出來會PO上來我的方法,也謝謝各位大大們的不吝指教。
編輯記錄
sssp116 重新編輯於 2010-04-27 08:45:32, 註解 無‧
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2010-08-08 00:17:55 IP:124.8.xxx.xxx 訂閱
只要把 Extended Properties 加上 "IMEX=1" 就可以了
例如:"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" FLB1->FileName ";Extended Properties=\"Excel 8.0; IMEX=1\";Persist Security Info=False";

但是,縱使加上了 IMEX=1 也只會掃描前 8 列資料來決定使用什麼資料型態
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
編輯記錄
sryang 重新編輯於 2010-08-08 00:41:24, 註解 無‧
系統時間:2024-03-29 22:00:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!