记C#和Excel开发

9月 10th, 2014 2,098 留下评论 阅读评论

需要一个windows环境下的工具,能够读写Excel。这个Excel比较复杂,内嵌VB脚本,写Excel的时候必须得保留这些原有的脚本数据。

介绍下这个VB脚本,就是给每一行数据提供下拉框进行一些备用数据的选择,比如打标签。这个下拉框并不是Excel提供的控件(控件绑定于具体的Cell或者坐标很麻烦),而是用弹窗实现的,全局共享一个弹窗数据源。这是一段在Excel文件中的VB代码。

最初开始用Python,靠xlrd和xlwt模块进行读写,读的确没什么问题也挺方便,但是写就有点纠结了,xlwt不能写已经存在的excel文件而是需要新创建一个文件然后开始写入然后替换原有文件,如果Excel文件中有设置好的一些格式、控件、脚本的话,就都没了。然后Python最麻烦的当然就是windows下是没有预装Python的,这个工具给别人使用还要带一个Python环境真是麻烦,然后文件就很多包括.py、双击运行的.bat等。

然后想到的就是能够在win环境下良好支持的C#,本科的时候还是学过C#的有那么一点点基础而且毕竟和Java比较像。C#提供的操纵Excel功能的确比较强大,但是没这么好用,很容易报异常需要耐心调试。但是能够编译成.exe,在win环境下运行起来到底方便。

VS创建项目时,会提示选择.Net Framework版本,尽量选择4.0(win7自带)或者更低的,以更好的跨平台;一开始用了默认的4.5(大概是安装VS时候给自动装上的,编译出来在某些win7环境中会报错)

md5的方法:最简单的是用Web模块里的那个方法,但是这个Web模块似乎不太跨平台;网上方法很多,但是算出来的答案居然都不太一样!选个靠谱的不容易...

写代码的时候遇到过的几个坑

xlsApp.Visible = false; (不然每次执行都会打开Excel再关闭)

xlsApp.DisplayAlerts = false; (不然保存的时候会各种提示确认比较烦)

filePath = filePath.Replace('/', '\\');   xlsBook.SaveAs ...(文件路径用 / 就会报异常)

xlsBook.Close(false, Type.Missing, Type.Missing); (没有这句话,程序执行完后Excel的进程就会留在内存中...执行多次就一堆死进程...)

微软的代码风格也就算了,操纵Excel的各种API的命令和使用方法,真是无法直视

Categories: Life in Coding 标签:, , ,
  1. 还没有评论呢。