我使用ASP.NET和C#(代码隐藏)开发了一个SharePoint WebPart。
需要做的一件事是启动Excel另存为对话框,以便用户可以保存Excel文件。
在“SharePoint Server”框中,此功能可正常运行。当我单击“导出”时,按预期显示Excel“另存为”对话框。
但是,从客户端计算机(例如我的),此功能无法正常工作。单击“导出”时,Excel“另存为”对话框不会出现。
正在启动此对话框的代码段...
xlApp.DisplayAlerts = false;
//xlWorkBook.Save();
Microsoft.Office.Interop.Excel.Dialog dialog = xlApp.Dialogs[Microsoft.Office.Interop.Excel.XlBuiltInDialog.xlDialogSaveAs];
dialog.Show(Type.Missing, // document_text
Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, // type_num
Type.Missing, // prot_pwd
Type.Missing, // backup
Type.Missing, // write_res_pwd
Type.Missing, // read_only_rec
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
xlApp.DisplayAlerts = true;
你知道造成这种差异的原因是什么吗?我应该调查一些特别的事情吗?
感谢您的帮助, -Krishna
答案 0 :(得分:1)
您必须明白,当您在Web服务器上使用上述代码时,您在Web服务器上运行Excel,而不是在客户端计算机上运行。
您无法在客户端/服务器环境中执行您要执行的操作/ w Interop。通常,您不应该在Web服务器上使用COM Interop / w Office组件。
您应该使用比Interop更安全的服务器来构建Excel文件。我过去曾使用过XMLSS(我打赌Office有一种更新的XML格式):
http://msdn.microsoft.com/en-us/library/aa140066(v=office.10).aspx
但是Excel甚至可以打开HTML表格,因此根据您尝试的操作,您可以将HTML写入客户端并为其提供.xls扩展名。
如果您无法避免使用Interop(虽然我强烈建议您避免使用它),那么您需要做的是确保您的Interop代码是线程安全可靠的,并将Excel文件保存到本地在服务器上找到,然后强制客户端浏览器“另存为”。您还需要一种机制来在一段时间后清理旧文件。最好在内存中完成所有操作并将结果流式传输到客户端。以下链接包含有关如何强制“另存为”的信息。
http://www.west-wind.com/weblog/posts/2007/May/21/Downloading-a-File-with-a-Save-As-Dialog-in-ASPNET