2016-10-31 5 views
1

私は2つの異なるExcelファイルを持ち、両方でいくつかの変更を行います。 [保存]をクリックすると、各ファイルに既存のファイルとそのファイルを上書きするかどうかを確認するメッセージが表示されます。代わりにSave()コマンドでこれを回避することはできますが、2つの異なる上書きプロンプトが表示される理由を理解しようとしています。2つの異なるSaveAs上書きプロンプトが表示されるのはなぜですか?

すべてが正しく保存され、エラーは発生しません。

私のC#コードでは、バージョンMS Excel 14.0オブジェクトライブラリを使用しています。 (Excel 2010)
私が使用しているIDEは、MS Visual Studio 2015コミュニティです。
オペレーティングシステムはWin 7 x64です。ハードウェアフレーバーAMD。

ありがとうございます。

名前を付けて保存]ダイアログ1:2

SaveAs Dialog 2

ダイアログ

enter image description here

名前を付けて保存、私はこれをテストするために使用されるコード...あなたはここを参照してください何

using System; 
using System.Windows.Forms; 
using Microsoft.Office.Interop.Excel; 
using Excel = Microsoft.Office.Interop.Excel; 
namespace SO_Question 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
     InitializeComponent(); 
     EditSaveExcelFiles(); 
     } 

     public static void EditSaveExcelFiles() 
     { 
     object misValue = System.Reflection.Missing.Value; 
     string file1 = @"C:\Users\John\Documents\New Folder\MyExcel.xlsx"; 
     string file2 = @"C:\Users\John\Documents\New Folder\MyExcel2.xlsx"; 
     Excel.Application ExcelApp = new Excel.Application(); 
     Workbook workBook1 = ExcelApp.Workbooks.Open(file1, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue); 
     Workbook workBook2 = ExcelApp.Workbooks.Open(file2, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue); 
     Worksheet workSheet1 = (Worksheet)workBook1.Worksheets.get_Item("Sheet1"); 
     Worksheet workSheet2 = (Worksheet)workBook2.Worksheets.get_Item("Sheet1"); 

     // do some stuff 
     workSheet1.Cells[1, 1] = "Grazer14"; 
     workSheet2.Cells[1, 1] = "Grazer24"; 

     // Different overwrite dialogs? 
     try 
     { 
      workBook1.SaveAs(file1, Excel.XlFileFormat.xlOpenXMLWorkbook, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); 
      workBook2.SaveAs(file2, Excel.XlFileFormat.xlOpenXMLWorkbook, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); 
     } 
     catch (Exception e) 
     { 
      //when user clicks "No" or "Cancel" 
      //MessageBox.Show("No or Cancel: " + e.StackTrace); 
     } 
     workBook2.Close(true, misValue, misValue); 
     workBook1.Close(true, misValue, misValue); 
     ExcelApp.Quit(); 
     System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook1); 
     System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook2); 
     System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelApp); 
     } 
    } 
} 
+0

どのようにそれが最初のスクリーンショットがパスに「新規フォルダ」を欠落していることになることができますか?あなたが投稿したコードを使ってスクリーンショットが撮られたことは確かですか? – dlatikay

+0

唯一の違いは、保存しているファイル形式だけです。違いがその原因である必要があります。インタラクティブに異なるSaveAsオプションを試してみたらどうなりますか? – ChrisF

+0

@dlatikayはい、以前の画像でした。今更新しましたありがとうございます。 – JohnG

答えて

1

それは、最初のメッセージボックスディスプレーサExcelによるyedはテーマではなく、2番目のものはテーマです。保存している特定のファイルとは何の関係もありません(実際には、同じファイルを2回保存しても同じ動作を続けることができます)。

修正が保存する前に、Excelアプリケーションが見えるようにすることです:

excelApp.Visible = true; 

そうすれば、エクセルUIが適切に初期化されます。目に見えないアプリがUIを正しく初期化することは期待できません.Excelは完全なUIで動作するように設計されています。

プロンプトを回避し、自動的に既存のファイルを上書きしたい場合は、表示アラートを無効にする必要があります。

excelApp.DisplayAlerts = false; 
workBook1.SaveAs(file1); 
excelApp.DisplayAlerts = true; 
+0

私は別の問題を持つ人を助けようとしていた。私は2つのダイアログを得続けました。だから、私が欠けていたものがあるかもしれないと感じたので、私は解決策を提出しなかった。それはそれ以来、私のために頭の傷つき者でした。しかし、あなたは100%正しいです。また、_Excelは完全なUIで動作するように、またはUIが全くないように設計されていると言っても意味がありません。この問題を解決するためにアプリケーションを表示させることは決してありませんでした。 – JohnG

+0

私は十分にあなたに感謝することはできませんし、その問題は地球が壊れるわけではなかったが、あなたの説明にスポットがあり、それは理にかなっていることを申し訳ありません。どうもありがとうございました ;-) – JohnG

関連する問題