Excel Interop另存为在Excel 2007中提供兼容性检查器

这里是我的SaveAs方法的代码:

 m_FilePath="D:\Build\abc.xlsx" m_objOpt=System.Reflection.Missing.Value; m_objBook.SaveAs(m_FilePath, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, XlSaveAsAccessMode.xlShared, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt); 

现在我的问题不是如何禁用兼容性检查器,这已被多次回答。 我的问题是为什么兼容性检查器一切就绪。 excel如何知道该文件是有excel 2003的痕迹。D:\ Build是空的。

如果要创build特定版本的Excel文件,则必须SaveAs方法中设置正确的FileFormat

即使在path中设置.xls ,如果未指定文件格式,则将使用运行的Excel版本通过SaveAs方法保存文件。 这意味着如果使用Excel 2007或更高版本打开Excel 1997-2003文件,则如果未设置FileFormat参数, SaveAs方法将默认将文件保存为Excel 2007文件。

可选对象。 保存文件时使用的文件格式。 有关有效select的列表,请参阅FileFormat属性。 对于现有文件,默认格式是指定的最后一种文件格式; 对于新文件,默认值是正在使用的Excel版本的格式


什么应该是我的FileFormat然后,如果我想保存在2003和2007取决于系统中安装哪个Excel?

不要像设置文件那样设置文件格式,要么根据系统中安装的Excel来保存2003和2007, xlWorkbookDefault是要使用的文件格式。

您需要检测当前版本的Excel,以便在文件名中设置正确的扩展名(.xls或.xlsx) 。 如果扩展名与所使用的实际文件格式不一致,则在打开文件时,将显示一条消息,指出扩展名与文件格式不对应。

或者 ,您提出的解决scheme似乎没有在fileName中设置扩展名,并让Excel使用基于检测到Excel版本后指定的fileFormat的正确扩展名来完成fileName。 在这里你正在使用:

  • 56: xlExcel8 Excel8
  • 46: xlXMLSpreadsheet Excel电子表格格式。

链接关于FileFormat


另请注意,如果在Excel 2003文件中使用某些Excel 2007function,则不会阻止显示兼容性检查程序。 要隐藏消息,可以将Application.DisplayAlerts属性设置为false

我做了这样的事情:

 if (11.0 < Convert.ToDouble(report.Version)) { //For excel 2003 workbook.SaveAs(filename, 56, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); } else { //For excel 2007 and above workbook.SaveAs(filename, 51, misval, misval, misval, misval, XlSaveAsAccessMode.xlShared, misval, misval, misval, misval, misval); }