如何保存一个Excel文件,而无需打开时得到一个格式化警告,使用C#和Excel 2010(How

2019-09-17 02:24发布

我使用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
    }
}

Answer 1:

有了您的代码保存工作簿打开XML,因为XlFileFormat.xlWorkbookDefault评估为XlFileFormat.xlOpenXMLWorkbook为Excel 2007+。 这是警告的原因是:你指定的文件为XLS,但实际上它是一个XLSX。

您可以更改文件的扩展名在以XLSX saveFileDialog.Filter财产或强制Excel对象中使用XLS格式保存XlFileFormat.xlExcel8

编辑
使用此功能来保存文档:

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


Answer 2:

尝试设置警报,OFF

oExcel.DisplayAlerts = false;   


Answer 3:

这个问题从被叫分机强化功能的结果,你可以找到更多关于它的信息在这里 。

不幸的是,上面还连接器的状态,有这个代码没有预期的变化,直到至少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 “。



文章来源: How do I save an Excel file without getting a format warning when opening, using C# and Excel 2010