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;
}
这个问题有点过时了,但如果你还在寻求帮助:
简单地说,您需要一个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