4

私は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
    }
}
4

3 に答える 3

9

Excel 2007 以降でXlFileFormat.xlWorkbookDefault評価されるため、コードを使用してブックを Open XML として保存します。XlFileFormat.xlOpenXMLWorkbookこれが警告の理由です。ファイルに XLS という名前を付けましたが、実際には XLSX です。

プロパティでファイル拡張子を xlsx に変更するsaveFileDialog.Filterか、.xml を使用して 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);
于 2012-05-08T12:22:44.830 に答える
2

アラートをオフに設定してみてください

oExcel.DisplayAlerts = false;   
于 2012-05-08T12:43:27.253 に答える
1

この問題は、Extension Hardening と呼ばれる機能が原因で発生します。詳細については、こちらを参照してください

残念ながら、上記のリンクには、少なくとも 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 ] を選択します。

名前として「<code>ExtensionHardening」と入力します (引用符なし)。

データの値が「<code>0」であることを確認します。

于 2012-05-08T12:24:07.000 に答える