Как отключить диалоговое окно с приглашением при сохранении файла Excel, созданного с помощью C #, в случае возникновения конфликта? - PullRequest
0 голосов
/ 28 февраля 2019

Я создаю файл Excel с использованием C # и задаю для параметра ConflictResolution значение Excel.XlSaveConflictResolution.xlLocalSessionChanges в функции SaveAs().

Я также устанавливаю app.UserControl в значение false, но диалоговое окно приглашения всегда будетпоказать.

что я должен сделать, чтобы отключить диалог

string fileName = "f:\\ok.xlsx";

object missing = Type.Missing;

Excel.Application app = new Excel.Application();
app.Visible = false;
app.UserControl = false;
Excel.Workbook book = app.Workbooks.Add(missing);
Excel.Worksheet sheet = book.ActiveSheet as Excel.Worksheet;
sheet.Name = "s1";
sheet.Cells[1 , 1] = "id";
book.SaveAs(fileName , Excel.XlFileFormat.xlWorkbookDefault ,
            missing , missing , missing , missing ,
            Excel.XlSaveAsAccessMode.xlNoChange ,
            Excel.XlSaveConflictResolution.xlLocalSessionChanges ,
            missing , missing , missing , missing);
book.Close(missing , missing , missing);
app.Quit();

1 Ответ

0 голосов
/ 28 февраля 2019

Чтобы отключить предупреждения Excel при записи файла, просто используйте .DisplayAlerts = false;

Пример кода, который я сейчас использую для сохранения своих файлов Excel:

public void SaveExcelFile(Excel.Application app, string exportPath)
{
    try
    {
        //Stops from asking to overwrite
        app.DisplayAlerts = false;
        Excel._Worksheet sheet = app.ActiveSheet;

        //Save and close
        sheet.SaveAs(exportPath);
    }
    catch (Exception ex)
    {
        //If something fails, show the error
        Console.WriteLine("ERROR: Failed to save Excel file! " + ex);
    }
    finally
    {
        //Makes sure that there aren't any lingering Excel processes
        app.Quit();
    }
}

Работает как шармдля меня.Важной частью этого фрагмента является строка app.DisplayAlerts = false;.Это перестанет спрашивать, хотите ли вы сохранить файл или перезаписать существующий файл с тем же именем.Если вы не хотите автоматически перезаписывать файлы, опасаясь потери данных, я не рекомендую отключать оповещения.

Примечание. Оборачивать все это в try-catch не всегда рекомендуется,Для сложности программы, которая использует этот метод, я знаю, где может возникнуть ошибка (.SaveAs(exportPath); в случае, если поставляемый exportPath не существует или является опечаткой или любой другой причиной, по которой он выдает ошибку).Вероятно, было бы лучше всего обернуть sheet.SaveAs(exportPath); в try-catch, просто чтобы быть уверенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...