【问题标题】:SaveFileDialog not properly close After Click on Cancle of SaveFileDialog单击 SaveFileDialog 的 Cancel 后 SaveFileDialog 未正确关闭
【发布时间】:2016-11-21 15:19:19
【问题描述】:

我正在使用 c# 处理 windows 应用程序,当我尝试从我的 DataGridView 导出到 excel 时,SaveFileDialog 打开,如果单击“保存”它运行良好并获取 Excelsheet,但是当单击“取消”按钮时它没有关闭 SaveFileDialogue。 我知道有很多类似的问题可用,但对我没有帮助。

代码段在这里..

 Microsoft.Office.Interop.Excel._Application excel = new Microsoft.Office.Interop.Excel.Application();
    Microsoft.Office.Interop.Excel._Workbook workbook = excel.Workbooks.Add(Type.Missing);
    Microsoft.Office.Interop.Excel._Worksheet worksheet = null;

    try
    {

        worksheet = workbook.ActiveSheet;

        worksheet.Name = "ExportedFromDatGrid";

        int cellRowIndex = 1;
        int cellColumnIndex = 1;

        int count = 1;
        progressBar1.Minimum = 1;


        for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)

        {
            for (int j = 0; j < dataGridView1.Columns.Count; j++)
            {
                if (cellRowIndex == 1)
                {
                    worksheet.Cells[cellRowIndex, cellColumnIndex] = dataGridView1.Columns[j].HeaderText;

                    cellRowIndex++;
                    worksheet.Cells[cellRowIndex, cellColumnIndex] = dataGridView1.Rows[i].Cells[j].Value.ToString();
                    cellRowIndex = cellRowIndex - 1;
                }
                else
                {
                    cellRowIndex++;

                    worksheet.Cells[cellRowIndex, cellColumnIndex] = dataGridView1.Rows[i].Cells[j].Value.ToString();

                    cellRowIndex = cellRowIndex - 1;
                }
                cellColumnIndex++;
            }
            cellColumnIndex = 1;
            cellRowIndex++;

            count++;
            progressBar1.Maximum = count;
            progressBar1.PerformStep();

        }


        SaveFileDialog saveDialog = new SaveFileDialog();
        saveDialog.Filter = "Excel files (*.xlsx)|*.xlsx|All files (*.*)|*.*";

        saveDialog.FilterIndex = 2;

        saveDialog.RestoreDirectory = true;
        saveDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);

        DialogResult dialogResult = saveDialog.ShowDialog();

        if (dialogResult == DialogResult.OK)
        {
            workbook.SaveAs(saveDialog.FileName);
            MessageBox.Show("Export Successful");
        }
        else if (dialogResult == DialogResult.Cancel)
        {
           if (MessageBox.Show("Are you sure you want to quit without saving?", "Quitting",
                 MessageBoxButtons.YesNo) == DialogResult.No)
            {
                this.DialogResult = DialogResult.None;

            }
        }
    }
    catch (System.Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        excel.Quit();
        workbook = null;
        excel = null;

    }

输出:

当我确认时,我想退出并按下是,我看到背面有另一个弹出窗口可见,即图像 3。单击取消按钮后,我的项目开始工作。这个弹窗是怎么来的?

谁能指出我正确的方向?

提前致谢。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    问题在于 Excel 会尝试自行处理未保存的文件,因此当您尝试使用未保存的文件退出/关闭时,它会弹出消息。如果您不需要它并且不想保存,您应该使用

    关闭工作簿
    workbook.Close(false, misValue, misValue) 
    

    命令。请参阅以下答案:
    How to close-without-save an Excel /xlsm workbook, w/ a custom function, from C# ,
    Closing Excel application with Excel Interop without save message

    【讨论】:

    • 我将答案标记为正确。提供的答案非常有帮助。谢谢@SashaDu
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多