与Excel斗争的两天!!!
我们小组接手的项目是几个教育软件的开发。
三天前,领导给我安排新的任务了。
客户要求用Excel统计学生的学习时间,学习心得之类的。
领导问我做过吗?以前做过b/s的Response输出至Excel,我轻蔑(现在看见这两字,就想都想扁自己的臭脸)的答应了。
可后来这两天郁闷的我差点吐血。
Microsoft.Office.Interop.Excel;类来实现的
具体的实现代码,网上遍地都是。就不贴这些过时的代码了。
不过,我很讨厌用ado.net来操作Excel,真他娘的别手,格格不入。
切入重点...
首先,Excel表中可以分为多个的Sheet,客户要求:比如点击学习心得,就显示学习心得的Sheet,点击其他就显示相对应的Sheet
第一感觉是不是很简单?应该是小设置一个属性就over了吧。
Not,I'm让它愁死了。
根本就找不到这个属性,有一个Select()的方法,不管用。
我花了一天的时间尝试了各种的方法,晚上回家去阳台仰天长叹,苍天啊,赐个女人提提神吧。咳咳... Sorry 吹过了
不过确实伤死了不少脑细胞,(闭嘴)
第二天 同事无意的一个字让我茅坑(se)顿开,(还敢)
宏
没错,我用的方法就是宏,Excel里面工具-》宏
创建宏 在模块*的编辑器中键入:
Sub StudyFind()
Sheets("学习心得").Select
End Sub
在创建一个
Sub StudyTime()
Sheets("学习时间").Select
End Sub
建立完毕了,来看在C#中的调用。
成功了,打开Excel文件的时候会默认显示在指定的Sheet上面,
但是Excel会有一个提示,提示你...?自己不尝试说再多也白费。
其次,比如修改Excel的操作,修改前Excel是打开状态的,修改后应该关闭掉。问题来了:
office的这个Excel组件提供了一个Quit()方法来关闭Excel,但是你在打开进程查看的时候这个进程依然在这里,
Google去,找到如下代码。
这个代码很好的解决了这个问题,进程以标识准确的关闭了。
代码不是我写的,但我把这段代码搬到博客是有道理的,
代码第6行excel.Hwnd 这个属性我一直找不到,百度 google搜遍了 也没解决。
有一刹那我怒发冲冠三千尺,一度想把电脑砸掉,幸好祖宗在天有灵,大叫stop,这可给我醍醐灌顶了,电脑是公司的,砸了要赔钱+走人的。 跑题了...![]()
问题出在
Microsoft.Office.Interop.Excel;
Interop.Excel;
这两个组件的Excel类非常的类似,但是有区别。
比如:Microsoft.Office.Interop.Excel 组件有hwnd属性,取得Excel用的是Range.Text
而Interop.Excel就没有hwnd属性了,取Excel用的是Range.Value
本来我以为用的是Microsoft.Office.Interop.Excel组件的,后来才看出来原来的时候我添加了Interop.Excel;
引用Microsoft.Office.Interop.Excel组件,问题解决。
总算写完了,本来昨天就用Word 写了的,马上就要写完的时候,突然office给我关闭了,在打开一看全部成了乱码,(office2003)
唉,没法形容那股气。只是默默把开发Word 2003的微软团队集体问候了一遍。
ps:说的这点东西都是自己摸索的,如有错误或者更好的解决方案。请各位务必纠正。
QQ:549306388(如有看不明白的找我要代码)



ApplicationClass xapp 
