web-dev-qa-db-ja.com

Excel Interopで既存のExcelファイルを保存/上書きする方法-C#

Excel相互運用機能を使用してExcelスプレッドシートへの変更を保存する方法はありますか(この場合、ワークシートを追加しています)、既存のファイルを変更で上書きするかどうかをユーザーに確認します。アプリケーションでスプレッドシートが開いていることをユーザーに見せたくないので、ファイルを上書きするかどうかを尋ねるメッセージボックスがポップアップするのは、場違いでユーザーを混乱させる可能性があります。

Workbook.SaveAs(fileloaction)メソッドを使用しています。

ここで、Excel相互運用のためのCOM参照オブジェクトを初期化します。

private Excel.Application app = null;
    private Excel.Workbook workbook = null;

    public Excel.Workbook Workbook
    {
        get { return workbook; }
        set { workbook = value; }
    }
    private Excel.Worksheet worksheet = null;
    private Excel.Range workSheet_range = null;

以下は、Excelファイルを閉じる/保存するために使用しているコードです。 workbook.close()メソッド行は、未処理の例外をスローすると報告されている行です。

 workbook.Close(true, startForm.excelFileLocation, Missing.Value);
            Marshal.ReleaseComObject(app);
            app = null;
            System.GC.Collect();
20
user1546315

基本的に、必要なのはExcelApp.DisplayAlerts = False-ただし、次のとおりです。

ExcelApp.DisplayAlerts = False
ExcelWorkbook.Close(SaveChanges:=True, Filename:=CurDir & FileToSave)

お役に立てれば

53
John Bustos

このコードのみが、停止オーバーライドアラートまたは既に使用されているテンプレートを必要とします。

ExcelApp.DisplayAlerts = False

8

私はこれが古い投稿であることを知っていますが、将来的にフラストレーションを引き起こすことなくこの作業を行う方法を共有したいと考えました。

まず、使用するのが好きではないもの:ExcelApp.DisplayAlerts = False

このフラグを設定すると、プログラム内だけでなく、Excelファイルにもこのプロパティが設定されます。つまり、ユーザーがファイルに変更を加えて(Xをクリックして)閉じた場合、ファイルを保存するように求められることはなく、後でフラストレーションが発生します。また、Excelが通常送信する他のプロンプトも無効にします。

保存する前にファイルが存在するかどうかを確認するのが好きです:

        if (File.Exists(SaveAsName))
        {
            File.Delete(SaveAsName); 
        }
0
user5581710