我有两个不同的Excel文件,并对两者进行一些更改。当我保存为...时,会提示每个文件确认现有文件以及覆盖它的选项。我知道我可以完全避免使用Save()命令,但我试图理解为什么有两个不同的外观覆盖提示?
一切都妥善保存,不会发生错误。
在我的C#代码中,我使用的是MS Excel 14.0对象库版本。 (Excel 2010)
我使用的IDE是MS Visual Studio 2015社区
操作系统是Win 7 x64。硬件风味AMD。
感谢您的时间。
SaveAs对话1:
SaveAs对话框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 :(得分:1)
您在此处看到的是Excel显示的第一个消息框不是主题,而第二个消息框是。它与您正在保存的特定文件无关(事实上,您可以将同一文件保存两次并仍然看到相同的行为)。
修复方法是在保存之前使Excel应用程序可见:
excelApp.Visible = true;
这样,Excel UI将被正确初始化。您根本无法期望隐形应用程序正确初始化其用户界面 - Excel旨在使用完整的UI或根本不使用UI。
如果要避免提示并自动覆盖现有文件,则必须禁用显示警报:
excelApp.DisplayAlerts = false;
workBook1.SaveAs(file1);
excelApp.DisplayAlerts = true;