Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Excel互操作另存为在Excel 2007中提供兼容性检查器_C#_Excel_Excel Interop - Fatal编程技术网

C# Excel互操作另存为在Excel 2007中提供兼容性检查器

C# Excel互操作另存为在Excel 2007中提供兼容性检查器,c#,excel,excel-interop,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_ob

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

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

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

可选对象。保存文件时要使用的文件格式。暂时 有效选项列表,请参见FileFormat属性。对于现有的 文件,默认格式为最后指定的文件格式用于新的 文件,默认为所用Excel版本的格式



如果我想同时保存2003和2003,那么我的文件格式应该是什么 2007取决于系统中安装的excel

不要像您那样设置文件格式,或者
xlWorkbookDefault
是您希望在2003和2007两个版本上保存时使用的文件格式,具体取决于系统中安装的Excel

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

,您建议的解决方案似乎没有在文件名中设置扩展名,并让Excel根据检测到Excel版本后指定的文件格式使用正确的扩展名填写文件名。您使用的是:

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



另外请注意,如果在Excel 2003文件中使用某些Excel 2007功能,则不会阻止显示兼容性检查器。要隐藏消息,可以将属性设置为
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);
            }
if(11.0
我是否知道您正在打开一个2003 Excel文件,对其执行某些修改,并仅通过依赖此代码将其保存为2007(或更高版本)文件?我不明白您所说的打开2003 Excel文件的意思?是的,我的开发环境有excel 2003,但是使用它的客户端有excel 2007,我指的是一个*.xls文件。问题是:您是否正在使用此代码打开一个*.xls文件并将其保存为*.xlsx文件?@varocabas否我没有打开任何已保存的xls这是一个新实例,它是以家长身份创建的。internet连接不会很快恢复,也无法提供帮助。尽管如此,我的回答还是与克里斯的回答一致(+1代表他)如果我想在2003年和2007年都保存,那么我的文件格式应该是什么呢?这取决于安装在system@Shrivallabh不要像您那样设置文件格式,或者
xlWorkbookDefault
是要在2003年和2007年保存的文件格式,具体取决于系统中安装的excel。您需要检测Excel的当前版本,以便在文件名中设置正确的扩展名(.xls或.xlsx)。如果扩展名与所使用的实际文件格式不一致,则在打开文件时会出现一条消息,说明扩展名与文件格式不一致。如果您愿意,我可以用某种方法更新我的答案。@Shrivallabh但如果您在Excel 2003文件中使用某些Excel 2007功能,则不会阻止显示兼容性检查器。要隐藏消息,可以将属性设置为False。很高兴我能提供帮助:)。我将编辑我的答案,以反映我最后的评论,因为我没有正确理解你试图做什么。对我来说,这是一个格式问题,正如你在最后告诉我的那样。谢谢!