2

这是我的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是空的。

4

2 回答 2

5

如果要创建特定版本的 Excel 文件,则必须设置正确FileFormatSaveAs方法。

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

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


如果我想根据系统中安装的 excel 同时保存 2003 和 2007,那么我的 FileFormat 应该是什么?

如果要在 2003 和 2007 上保存,请不要像您一样设置文件格式,或者xlWorkbookDefault要使用的文件格式,具体取决于系统中安装的 Excel。

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

或者,您提出的解决方案似乎没有在fileName中设置扩展名,而是让Excel在检测到Excel版本后根据您指定的fileFormat以正确的扩展名完成fileName。你在这里使用:

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

关于链接FileFormat


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

于 2013-08-24T09:43:45.640 回答
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);
            }
于 2013-08-24T12:37:42.060 回答