如何在保存Excel文件时不使用C#和Excel 2010打开格式警告

我正在使用Excel 2010.我想这样保存我的Excel文件,这个代码。 它确实保存了一个.xls文件,但是当我打开这个文件时,我收到了这个消息:

您尝试打开的文件“tre.xls”与文件扩展名指定的格式不同。 在打开文件之前,validation该文件是否已损坏,并且是否来自所调用的源。 你想现在打开文件吗?

如果我按yes的文件打开。 但是,我需要摆脱这种格式popup?

我的代码:

 using System; using System.Windows.Forms; using ExcelAddIn1.Classes; using ExcelAddIn1.Classes.Config; using Microsoft.Office.Interop.Excel; using Application = Microsoft.Office.Interop.Excel.Application; using System.Runtime.InteropServices; private void Foo(object sender, EventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "Execl files (*.xls)|*.xls"; saveFileDialog.FilterIndex = 0; saveFileDialog.RestoreDirectory = true; saveFileDialog.CreatePrompt = true; saveFileDialog.FileName = null; saveFileDialog.Title = "Save path of the file to be exported"; if (saveFileDialog.ShowDialog() == DialogResult.OK) { // Save. // The selected path can be got with saveFileDialog.FileName.ToString() Application excelObj = (Application)Marshal.GetActiveObject("Excel.Application"); Workbook wbook = excelObj.ActiveWorkbook; wbook.SaveAs(saveFileDialog.FileName, XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, false, false, XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); wbook.Close(); } } 

当我以正常的方式保存在Excel中,我得到“Book1.xlsx”,这是没有问题的打开。

=============最终解决scheme============

 private void Foo(object sender, EventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "Execl files (*.xls)|*.xls"; saveFileDialog.FilterIndex = 0; saveFileDialog.RestoreDirectory = true; saveFileDialog.CreatePrompt = true; saveFileDialog.FileName = null; saveFileDialog.Title = "Save path of the file to be exported"; if (saveFileDialog.ShowDialog() == DialogResult.OK) { Application excelObj = (Application)Marshal.GetActiveObject("Excel.Application"); Activate(); // <-- added (recommend by msdn, but maybe not nessary here) Workbook wbook = excelObj.ActiveWorkbook; wbook.SaveAs(saveFileDialog.FileName, XlFileFormat.xlExcel8, Type.Missing, Type.Missing, false, false, XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); // wbook.Close(); // <-- don't want this anymore } } 

使用您的代码将工作簿保存为Open XML,因为XlFileFormat.xlWorkbookDefault评估为Excel 2007+的XlFileFormat.xlOpenXMLWorkbook。 这是警告的原因:您将该文件命名为XLS,但实际上是XLSX。

您可以在saveFileDialog.Filter属性中将文件扩展名更改为xlsx,或使用XlFileFormat.xlExcel8强制Excel对象保存为XLS格式。

编辑
使用这个来保存你的文档:

 wbook.SaveAs(saveFileDialog.FileName, XlFileFormat.xlExcel8, Type.Missing, Type.Missing, false, false, XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 

尝试将警报设置为OFF

 oExcel.DisplayAlerts = false; 

这个问题是由一个名为Extension Hardening的function引起的,您可以在这里find更多关于它的信息 。

不幸的是,上面的链接还指出,至less在Office 14之前,这个代码没有预期的变化。

如果您不想查找解决scheme,但只想解决问题,请在registry中插入此密钥以取消通知:

 [HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security] “ExtensionHardening”=dword:00000000 

您可以通过执行以下操作来完成上述操作:

打开您的registry( 开始 – > 运行 – > regedit.exe )。

导航到HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\OFFICE\12.0\EXCEL\SECURITY

右键单击右边的窗口,selectNew – > DWORD

input“ ExtensionHardening ”作为名称(不带引号)

validation数据的值是否为“ 0 ”。