操作Excel,不同版本之间的差异,如何解决?

xxj 2004-10-11 04:59:02
已经有很多方面的文章介绍操作EXCEL的,由于客户安装的EXCEL版本有从95、97、2000、2002、2003等众多版本,每个版本的Application中的一些方法都不一样的:例如
Excel.ApplicationClass xlsApplication = new Excel.ApplicationClass();
xlsApplication.Workbooks.Add("工作簿");
Excel.Worksheet sheet =(Excel.Worksheet) xlsApplication.Workbooks[1].Worksheets[1];

#region 写数据
for(int k = 0; k < this.DataSource.Columns.Count;k++)
{
sheet.Cells[1,k + 1] = this.DataSource.Columns[k].ColumnName;
}
for(int i = 0;i < this.DataSource.Rows.Count; i++)
{
for(int j = 0; j < this.DataSource.Columns.Count;j++)
{
if(this.DataSource.Columns[j].DataType == typeof(string))
sheet.Cells[ i + 2,j+1] = "'" + this.DataSource.Rows[i][j].ToString();
else
sheet.Cells[ i + 2,j+1] = this.DataSource.Rows[i][j];
}
}

#endregion
xlsApplication.Workbooks[1].SaveAs(fileName,Excel.XlFileFormat.xlWorkbookNormal,"","",false,false,Excel.XlSaveAsAccessMode.xlNoChange,null,false,null,null,null);
xlsApplication.Visible = true;

WorkBook的SaveAS方法在Excel 2000和2003里面就是不一样的

即使是一样的,但由于开发的时候,只能引入一个版本的Excel,要么引入2000的,要么2003
不可能都兼顾,怎么办?
...全文
477 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xxj 2004-10-15
俺自己找到了,我根本不用Excel Application.虽然哥们都提出了合理化的建议,但是坦白的讲,很多人的想法,我都觉得有缺陷.
1、arbinger(阿彬哥) 的缺陷,无法在安装有不同版本的OFFICE机器上编译
2、BackStrokeFish(一只仰泳的鱼) ,方法可行,但还不是最佳解决办法
3、Excel Application 会创建一些进程,虽然很多人都去杀进程,但是有时候并不能杀掉
我的解决方法,使用Fomula One组件,然后把你的程序做成一个安装程序,Fomula One组件自动安装到本地机。
  • 打赏
  • 举报
回复
仰泳的鱼儿 2004-10-13
用Application.SendKey("{^s}");
再发送"报表名",最后发送{"{Enter}"}试验一下.我做的是Excel可见的.
晚绑定技术还没找到资料.哪有?能否提示一下.
  • 打赏
  • 举报
回复
arbinger 2004-10-13
找到solution了.可以在装有低版本的office的机器上编译就OK了.因为VS.NET总是倾向于把office的COM组件cast到现有环境下的最新版本.所以,即使我引用了excel9.dll,也仍然被cast到了excel11了.
Solution2: 用late binding技术啦. ;-)
再一个不能称为Solution的solution:在导出EXCEL前期,让excel窗口可见,即使不能automation地保存,但是内容都在里面了,提示用户手动保存好了.呵呵.
----------------------------------
综上,最懒的方法:第三种
最好的方法 late binding
相对省事的方法,换编译环境了,前提是你能有(或者借用)一台有低版本office,并能够编译VS.NET project的机器哦~
就这些,大家赐教!
  • 打赏
  • 举报
回复
123456754321 2004-10-12
有一些差别的

  • 打赏
  • 举报
回复
littlechang 2004-10-12
好象还是有一些差别的,我也常受到这个问题的困扰,不得其解
关注中
  • 打赏
  • 举报
回复
linaren 2004-10-12
应该没问题的,调用的接口是不变的,EXCEL的版本只是内部实现变化
(只要你没用到某个版本的特有功能)
  • 打赏
  • 举报
回复
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2004-10-11 04:59
社区公告

让您成为最强悍的C#开发者