Excel Interop另存为excel 2007中的兼容性检查程序

时间:2013-08-24 09:11:31

标签: c# excel excel-interop

以下是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为空。

2 个答案:

答案 0 :(得分:4)

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

即使您在路径中设置了.xls,如果未指定文件格式,也将使用运行版本的Excel来使用SaveAs方法保存文件。这意味着如果您使用Excel 2007或更高版本打开Excel 1997-2003文件,如果未设置SaveAs参数,FileFormat方法将默认将文件保存为Excel 2007文件。 / p>

  

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


  

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

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

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

,您建议的解决方案似乎没有在fileName中设置扩展名,并让Excel根据您在检测到Excel版本后指定的fileFormat以正确的扩展名完成fileName。您正在使用:

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

关于FileFormat

的链接

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

答案 1 :(得分:0)

我做了类似的事情:

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);
            }