以下是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为空。
答案 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。您正在使用:
xlExcel8
Excel8 xlXMLSpreadsheet
Excel电子表格格式。另请注意,如果在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);
}