首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击“SaveFileDialog of SaveFileDialog”后,SaveFileDialog未正确关闭

单击“SaveFileDialog of SaveFileDialog”后,SaveFileDialog未正确关闭
EN

Stack Overflow用户
提问于 2016-11-21 06:52:36
回答 1查看 478关注 0票数 0

我正在使用c#处理windows应用程序,当我试图从DataGridView导出到excel时,SaveFileDialog打开,如果单击Save‘,但单击Cancel按钮时,它不是关闭SaveFileDialogue。我知道有许多类似的问题,但没有帮助我。

这里的代码片段。

代码语言:javascript
复制
 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。在clik on cancle按钮之后,我的项目工作。这个弹出式是怎么来的?

谁能给我指明正确的方向?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-21 07:19:19

问题是Excel试图单独处理未保存的文件,因此当您试图退出/关闭未保存的文件时,它会弹出消息。如果您不需要它,并且不希望保存,则应该用

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40714385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档