Excel錄入程序問題總結-操作Excel數據庫、漢字轉拼音問題、VS2005中文輸入法全角問題

      前幾天給女朋友寫了一個錄入數據到Excel表的小程序(程序員同志們談戀愛,要積極發揮個人專長啊。一方面心疼MM,另一方面也展示一下作爲程序員的才智啊,呵呵)。就程序中遇到的一些小問題總結一下,以後遇到相同的問題就“有法可依”了,呵呵。

1.C#操作Excel數據庫

      程序功能很簡單,一個紙質表上的信息錄入到四個Excel表中(手工的話要錄入四次),沒什麼複雜功能,就是操作Excel表了。

      C#操作Excel表通常有兩種方式:將Excel表作爲數據庫使用Sql語句讀寫、將Excel表作爲普通文件使用Ole嵌入式讀寫。我選擇了將Excel表作爲數據庫方式讀寫的方式。

      通常Excel表都不是格式良好的數據庫。沒辦法,只好麻煩MM把表格自己修改一下了:將Excel中的標題行去掉、如果設置了單元格格式還要將單元格格式改回普通(插入的時候一定要改)。或者將數據之後設置了格式的單元格行全部刪除。

     可以將操作Excel的部分寫成一個類。程序序中加入using System.Data.OleDb;然後連接字符串:"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=路徑名/文件名.xls;Extended Properties=Excel 8.0;“也可以加上HDR=Yes;IMEX=1;(即:"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=文件路徑/Excel文件名.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'")HDR的作用是指示首行記錄是否作爲表頭。IMEX的作用是指示混合模式,包括數字0導入、1導出、和2混合模式。通常錄入數據時以Excel表中前八行的數據格式判斷列格式,如果在數字列中插入文本,並且IMEX爲1,就會出錯。我的選擇是兩個參數都不加,第一行作爲表頭。

      一個常用選擇Select語句可能是這樣:select * from [Sheet1$]

      或者:select max([序號]) from [Sheet1$]

      如果程序中sql語句用到了max函數就要注意了(我的程序中就用到了)。如果是數字行用max函數的話,會發現一個奇怪的問題,比如select max([序號]) from [Sheet1$],如果序號是1-10,那麼選擇的結果並不是10所在的行而是9(不知道是不是我沒設置IMEX參數的事啊,有興趣的試試吧)!對於數字列也是按照字符串從左到右一位一位排序的。所以排序結果從小到大是1、10、2、3、4、5、6、7、8、9; 我用的解決辦法是將序號全部搜索出來然後,轉換爲數字查找出最大的序號。 

      一個常用的插入語句可能是這樣:insert into [Sheet1$]([序號],[姓名]) values(200901440129,'樓主')

     或者:insert into [Sheet1$]([序號],[姓名]) values('200901440129','樓主')數字可作爲字符也可以作爲數字。 

2.漢字轉拼音的問題:

      在錄入數據時,不僅要錄入一箇中文姓名,還要求錄入相應的姓名拼音。爲了體貼MM,這部分工作當然得交給程序來做啦。

      VS2005還不夠體貼似乎沒有現成的類,好在網上英雄不少,呵呵,自己找一個就行了。漢字轉拼音基於與臨界漢字比較實現,我找了一個比較帥的,放在我的下載裏了,1個資源分,給自己賺分啊。有需要的可以去下。

3.VS2005中文輸入法全角問題

       相信這是一個很多人都遇到過的問題,在文本框中輸入中文時,如果彈出一個對話框或者窗體失去焦點後重新獲得焦點,再次輸入時,輸入法莫名其妙的轉換爲全角格式。

       在網上搜索了很多資料說是.Net FrameWork的問題。據說微軟出的補丁也不是很管用。有得說只要修改一下控件的IMEMode就可以了,我修改了一下,有時候管用有時候問題還是出現。

      沒辦法,只好自力更生了。既然知道問題是在窗體重新獲得焦點時出現的那就好辦了,只要將上面的解決辦法完善一下就好了,在窗體每次重新獲得焦點的時候都設置一次控件的ImeMode就好了,呵呵,爲窗體的 frmMain_Activated 事件添加響應函數: 呵呵,這樣每次窗體獲得焦點的時候都會重新設置輸入法爲半角格式(全角在這個程序中用不到)。

引用請註明作者:飄渺孤鴻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章