如何使用 C# 和 Excel 2010 保存 Excel 文件而不会在打开时收到格式警告
本文关键字:Excel 格式 警告 何使用 2010 保存 文件 | 更新日期: 2023-09-27 18:33:41
我正在使用Excel 2010。我正在尝试使用此代码保存我的 excel 文件。它确实保存了一个.xls文件,但是当我打开该文件时,我收到以下消息:
您尝试打开的文件"tre.xls"的格式与文件扩展名指定的格式不同。在打开文件之前,请验证文件是否未损坏且来自推入源。是否要立即打开文件?
如果我按yes
文件就会打开。但是我需要什么才能摆脱这种格式弹出窗口?
我的代码:
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",打开没有问题。
==============最终解决方案 ===
==========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;
此问题是由称为扩展强化的功能引起的,您可以在此处找到有关它的更多信息。
不幸的是,上面的链接还指出,至少在 Office 14 之前,此代码没有预期的更改。
如果您不想寻找解决方案,而只是想解决问题,请在注册表中插入此注册表项以禁止通知:
[HKEY_CURRENT_USER'Software'Microsoft'Office'12.0'Excel'Security] “ExtensionHardening”=dword:00000000
您可以通过执行以下操作来完成上述操作:
打开注册表(开始 ->运行 -> regedit.exe
)。
导航到 HKEY_CURRENT_USER'SOFTWARE'MICROSOFT'OFFICE'12.0'EXCEL'SECURITY
。
在右侧窗口中单击鼠标右键,然后选择新建 -> DWORD
键入" ExtensionHardening
"作为名称(不带引号)
验证数据的值是否为" 0
"。