Excel互操作-提示保存未显示的Excel - c#.net

本文关键字:Excel net 显示 保存 互操作 提示 | 更新日期: 2023-09-27 17:53:24

我使用Excel互操作导出数据集到Excel文件。下面的代码直接导出并打开excel文件。我需要一个提示来要求用户保存、打开和取消。请帮. .

 public static void CreateWorkbook(DataSet ds, String path)
{
    int rowindex = 0;
    int columnindex = 0;
    Microsoft.Office.Interop.Excel.Application wapp = new Microsoft.Office.Interop.Excel.Application();
    Microsoft.Office.Interop.Excel.Worksheet wsheet;
    Microsoft.Office.Interop.Excel.Workbook wbook;
    wapp.Visible = false;
    wbook = wapp.Workbooks.Add(true);
    wsheet = (Worksheet)wbook.ActiveSheet;
    try
    {
        for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
        {
            wsheet.Cells[1, i + 1] = ds.Tables[0].Columns[i].ColumnName;
        }
        foreach (DataRow row in ds.Tables[0].Rows)
        {
            rowindex++;
            columnindex = 0;
            foreach (DataColumn col in ds.Tables[0].Columns)
            {
                columnindex++;
                wsheet.Cells[rowindex + 1, columnindex] = row[col.ColumnName];
            }
        }
    }
    catch (Exception ex)
    {
        String err = ex.Message;
    }
    wapp.UserControl = true;
    wapp.Visible = true;
}

Excel互操作-提示保存未显示的Excel - c#.net

这个问题有点过时了,但如果你还在寻求帮助:

简单地说,您需要一个SaveFileDialog或OpenFileDialog,我想你可以看到它们各自的功能。

制作起来也很简单:

SaveFileDialog saveDialog = new SaveFileDialog();

请参阅这篇MSDN文章。

OpenFileDialogs的工作方式相同,但请记住,这些对话框实际上自己不做任何事情。这些对话框所做的就是在用户点击OK时定义文件名和位置(它们被存储为属性)。

有两种方法来处理这些:使用事件FileOk(当OK被点击时引发)或使用showDialog()方法。当您使用该方法时,处理起来容易得多。

作为一个例子,如果你正在打开一个文件:

If saveDialog.ShowDialog() == DialogResult.OK Then
   /// Do stuff, like save the Excel sheet to the path in the dialog.
End If

注意它本身的作用:它只设置一个在对话框中输入的文件名。它不会保存任何东西。你仍然需要用Excel互操作方法调用save/open方法。

请记住,您可以预先设置某些东西,如初始目录或文件类型上面的 If语句使用文章中列出的相应属性。

在你的例子中,我看到'path'作为方法的参数。你可以做的是在这个方法调用之前(当然使用OpenFileDialog),添加上面的If/Then块来获得"打开"路径,并传递对话框。属性作为方法的路径

把这些放在一起,用于开头:

OpenFileDialog openDialog = new OpenFileDialog();
If openDialog.ShowDialog() == DialogResult.OK Then
       CreateWorkbook(ds:= dataset, openDialog.fileName)
End If

同样,记住这实际上并没有打开它。在你的方法的某个地方,在你定义了工作簿之后,你可以用wbook.Open(path)打开它。

最后,我会避免给用户控制权或使应用程序在调试之外可见。这是在询问左右的问题。

相反,在你的方法中插入这个位置:

SaveFileDialog saveDialog = new SaveFileDialog();
If saveDialog.ShowDialog() == DialogResult.OK Then
     wbook.Close(True, saveDialog.fileName, )
Else
     wbook.Close(False, , )
End If
wapp.Quit()

一旦你这样做,手动打开Excel进行编辑,如果它仍然是必要的。根据您的需要,您可能需要对这个想法进行修改,但我认为这通常是您所需要的。

编辑:为了理解我的代码与wbook。关闭,查看工作簿。MSDN中的关闭方法: https://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.close.aspx