上回书说到,最近我在写一个Office PIA的程序。我先是写了一个独立的小工程,完美地实现了对Excel Workbook的各种操作,并且也反复作了测试。然后往我们真实的项目里合并。这里有个伏笔:我们team用的是Visual Studio 2008,而我个人用的是Visual Studio 2010。我没忘记在我的Visual Studio 2010工程里面把.Net Framework的版本设置为3.5。这个地方要跟我们实际的项目保持一致,这一点我还是很注意的。

谁曾想,合并的时候出了问题,编译出现一大堆错误。

比如说这个方法:

        /// <summary>/// Creates the excel doc./// </summary>/// <param name="fileName">the excel doc filename</param>public void CreateWorkbook(string fileName){try{this.CurrentWorkbook = this.Application.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);this.LatestWorksheet = this.CurrentWorkbook.Sheets[1] as Excel.Worksheet;this.CurrentWorksheet = this.LatestWorksheet;string fullPath = this.GetActualFullPath(fileName);this.LatestWorksheet.SaveAs(fullPath,this.currentFileFormat,Type.Missing,Type.Missing,Type.Missing,Type.Missing);}catch (Exception ex){this.Close();throw ex;}}

这段代码,在Visual Studio 2010里面编译没有任何问题,在Visual Studio 2008里面编译时却出现了这样的错误:

Compile error: No overload for method 'SaveAs' takes '6' arguments ......

修改成这样的代码,才在Visual Studio 2008下编译通过(当然也能够在Visual Studio 2010下编译通过):

        /// <summary>/// Creates the excel doc./// </summary>/// <param name="fileName">the excel doc filename</param>public void CreateWorkbook(string fileName){try{this.CurrentWorkbook = this.Application.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);this.LatestWorksheet = this.CurrentWorkbook.Sheets[1] as Excel.Worksheet;this.CurrentWorksheet = this.LatestWorksheet;string fullPath = this.GetActualFullPath(fileName);this.LatestWorksheet.SaveAs(fullPath,this.currentFileFormat,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Excel.XlSaveAsAccessMode.xlExclusive,Type.Missing,Type.Missing,Type.Missing);}catch (Exception ex){this.Close();throw ex;}}

同样的问题多处出现。比如说Visual Studio 2010下能编译通过的这段代码:

        /// <summary>/// Create new worksheet and insert it after current worksheet./// </summary>/// <param name="worksheetName">name of the new worksheet</param>public void AddWorksheetAfter(object worksheetName){this.LatestWorksheet = this.CurrentWorkbook.Worksheets.Add(Type.Missing, worksheetName) as Excel.Worksheet;this.Save();}

在Visual Studio 2008下编译遭遇这样的错误:

Compile error: No overload for method 'Add' takes '2' arguments ......

改成下面这样才解决:

        /// <summary>/// Create new worksheet and insert it after current worksheet./// </summary>/// <param name="worksheetName">name of the new worksheet</param>public void AddWorksheetAfter(object worksheetName){this.LatestWorksheet = this.CurrentWorkbook.Worksheets.Add(Type.Missing, worksheetName, Type.Missing, Type.Missing) as Excel.Worksheet;this.Save();}

这是为什么呢?首先请不要疑神疑鬼,不要惊慌,要相信科学,遇到问题要广泛地借助Google和MSDN这两个好工具。

Visual Studio 2008编译出错的地方,全都是出在Office PIA的Interop COM组件的可选参数之处。在Visual Studio 2010中,尽管我的.Net Framework版本选择的是3.5,但是由于Visual Studio 2010的编辑器本身支持C# 4.0的一些“语法糖”,C# 4.0对于COM组件的互操作性作了增强,支持了可选参数的省略,因此我在编程中省掉了那一大堆Type.Missing。这样,我在Visual Studio 2010下写的代码显得很简洁。当然也正是这些地方造成了在Visual Studio 2008下编译的困扰。

MSDN中相关的链接如下:

  • Named and Optional Arguments (C# Programming Guide) http://msdn.microsoft.com/en-us/library/dd264739.aspx

问题的查找与解决并不复杂。尽管这是由Visual Studio 2010的新特性给我造成的小麻烦,但是遇到这样的小麻烦,心情还是很愉悦的,我不认为这是什么坏事情。

当Office PIA遭遇C# 4.0相关推荐

  1. 关于.NET操作Office(Office PIA)

    今天写了个小程序,用.NET操作Office模板文件,生成期望的Word文件.开发环境运行正常,可放到另一台机器上就不好用,提示找不到COM-. 确认目标机器安装了Office,而且版本和开发环境一样 ...

  2. 未能加载文件或程序集“Microsoft.Office.Interop.Owc11, Version=11.0.0.0, ...”或它的某一个依赖项~[解决方案]...

    配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误信息: 未能加载文件或程序集"Microsoft.Office.I ...

  3. Office PIA:关于Office PIA应用程序的部署

    基于Office PIA的应用程序,要想在客户的电脑上顺利地运行起来,可以有这几种办法: 方法一:让客户在安装Office的时候顺便安装".Net可编程性支持"(.Net Prog ...

  4. 我的Office PIA之路(一) Microsoft.Office.Interop.Excel.dll 的获取

    最近有一个项目,是要用程序把学校里一个年级的学籍信息经过处理合成一个表,小学共六个年级,生成六张表,而且是*.xls文件,通过查找资料我决定使用Office PIA来试试.我最开始查到我资料是说要在A ...

  5. System.IO.FileNotFoundException: 未能加载文件或程序集“Microsoft.Office.Interop.Excel, Version=11.0.0.0, Cultur

    c# 程序突然出错 System.IO.FileNotFoundException: 未能加载文件或程序集"Microsoft.Office.Interop.Excel, Version=1 ...

  6. 未能加载文件或程序集“Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=7

    未能加载文件或程序集"Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e ...

  7. Spire.Office for .NET 7.9.0 update

    Spire.Office for .NET [网上有破解版]is a combination of Enterprise-Level Office .NET API offered by E-iceb ...

  8. Office 2016 定制安装工具 v1.0 | Office 2016 自定义安装组件

    软件简介 以往Office的安装包都采用的是MSI安装器,允许用户在安装时选择安装的组件,但是微软发布的Office2016安装包只提供了C2R(ClickToRun)方式,因此默认情况下用户无法选择 ...

  9. office java_PageOffice for Java v4.0 免费试用版

    PageOffice免费版实现了在线编辑保存Word.Excel.PPT.WPS等Office文档的基本功能,对于简单的在线Office办公.追踪Word修订痕迹.全文检索的实现已经绰绰有余. Pag ...

  10. XDOC Office Server 发布 1.1.0 版本,支持 PDF 加水印

    XDOC Office Server 是一个 JavaEE 服务,用于将 Office 文档转换为 PDF,格式兼容性好. 版本更新 支持 &_watermark 参数,对生成的 PDF 加水 ...

最新文章

  1. html判断对错,Html翻转校园试题
  2. 将unicode编码的txt文件转为utf-8编码
  3. 图像显著区域检测代码及其效果图 saliency region detection
  4. C++学习成长的四个层次
  5. “天才”少年!4位90后摘得全球顶尖数学大奖,90%获奖者不满30岁
  6. java适配器模式_适配器模式的设计,你get到了吗?
  7. 组合数学 —— 康托展开
  8. 苹果隐私追踪新规发布后 Android广告支出涨10%
  9. 关于小微商户反欺诈监控指标的内容参考
  10. jquery中有.post,.get,$.getJSON为什么没postJSON
  11. UEFI原理与编程(十):UEFI的基础服务-系统表
  12. 2021全国人工智能大赛(NAIC)视觉编码赛道初赛一阶段baseline分享
  13. c语言 闹铃 程序,C语言程序-闹铃
  14. becon帧 wifi_构造并发送Beacon帧以伪造任意WiFi热点
  15. 全球排名前10位的广告公司
  16. Thinkphp重复字段过滤
  17. msm8996的gpio和irq
  18. 程序员的自我修养——链接、装载与库
  19. TikTok全球月活用户突破10亿大关
  20. 菜鸟也能飞:SQL数据库实战专业教程(二)

热门文章

  1. git # 请输入一个提交信息以解释此合并的必要性
  2. String 常见面试题和解析
  3. 用python模拟登录淘宝并获取所有订单
  4. scala 作用域保护
  5. 基于51单片机的智能室内迷你大棚
  6. 全国计算机等级考试二级java教程_全国计算机等级考试二级教程--Java语言程序设计必杀秘诀 PDF 下载...
  7. 07-项目训练_Layer
  8. meshing-球体网格划分
  9. 百度团购导航的服务态度,真让我无语了
  10. I18n切换简体繁体英文设置vue项目的meta标签内容和title标题: