2016-10-31 73 views
1

我有兩個不同的Excel文件,並對兩者做了一些更改。當我另存...時,系統會提示每個文件確認現有文件以及覆蓋該文件的選項。我意識到我可以用Save()命令完全避免這種情況,但我試圖理解爲什麼會出現兩種不同的外觀覆蓋提示?爲什麼我會得到兩個不同的SaveAs覆蓋提示?

一切正常保存,沒有發生錯誤。

在我的C#代碼中,我使用的是MS Excel 14.0版本的對象庫。 (Excel 2010)
我使用的IDE是MS Visual Studio 2015社區。
操作系統是Win 7 x64。硬件風味AMD。

謝謝你的時間。

另存爲對話框1:

enter image description here

另存爲對話框2

SaveAs Dialog 2

我用來測試這個代碼...

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的主題不是主題,而第二個是。它與您保存的特定文件無關(實際上,您可以將同一文件保存兩次,仍然可以看到相同的行爲)。

的解決方法是在保存之前使Excel應用程序可見:

excelApp.Visible = true; 

這樣,Excel的用戶界面將被正確初始化。你根本無法期待一個無形的應用程序能夠正確地初始化其UI - Excel旨在用它的完整UI或根本沒有UI。

如果你想避免的提示,並自動覆蓋現有文件,你必須禁用顯示警報:

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

我試圖幫助有不同問題的人,並且我的解決方案涉及到這種情況。我不斷收到這兩個對話框。所以我覺得可能有些東西我錯過了,所以我沒有提交解決方案。自那以後,它一直是我的首選。但你是100%正確的。從你描述的方式來看,_Excel的設計或者是完全的用戶界面,或者根本就沒有用戶界面,這也是有道理的。我從來沒有想過簡單地讓應用可見,以解決這個難題。 – JohnG

+0

我不能夠感謝你,我很抱歉,這個問題不是地球崩潰,但你的解釋是現貨,它是有道理的。非常感謝你 ;-) – JohnG

相關問題