Excel录入程序问题总结-操作Excel数据库、汉字转拼音问题、VS2005中文输入法全角问题

来源:互联网 发布:linux history 查找 编辑:程序博客网 时间:2024/06/18 05:29

      前几天给女朋友写了一个录入数据到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 事件添加响应函数: 呵呵,这样每次窗体获得焦点的时候都会重新设置输入法为半角格式(全角在这个程序中用不到)。

引用请注明作者:飘渺孤鸿