2014-01-21 33 views
-1

我使用open XML导出excel文件。 SpreadsheetDocument.Create需要文件目的地。如何获取文件路径和名称来保存该文件?

我想从类似于SaveFileDialogWinforms中获得此文件目标。 我如何从用户获取文件目的地?我使用Asp.Net 4.0和OpenXML SDK 2.5。

SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(destination, SpreadsheetDocumentType.Workbook); 
+0

请给予更多信息。你正在建立一个网站,一个Windows窗体等... –

+1

所以你想从一个['SaveFileDialog'](http://msdn.microsoft.com/en-us/library/system.windows.forms.savefiledialog(v = vs.110).aspx)?你遇到了什么问题? –

+0

这个问题被标记为asp.net,我不知道这是否正确 – Liath

回答

-1

使用Environment.SpecialFolder枚举。如果您正在查找我的文档,则:

var destination = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(destination, SpreadsheetDocumentType.Workbook); 
+2

我不相信这回答了这个问题 - 我认为OP想要得到来自用户的位置 – Liath

+0

是的,我想从用户那里获取位置。用户可以将文件位置保存在任何目录中。 – cejoseph

0

当Web服务器将文件流式传输到客户端时,您无法控制目标文件夹。所有你能做的就是:

  • 指定内容类型(以帮助客户在决定如何处理)
  • 指定文件名
  • (我认为)告诉客户端浏览器将文件保存与展示它(例如,PDF通常显示在浏览器中,但正确设置流可能会强制保存文件对话框)

如果您需要“缓存”文件离开Web服务器,您导出到服务器进程已写入permis的服务器文件夹sions去。然后你流到客户端 - 客户端将从浏览器获得提示并保存在他们想要的地方。

例如,看看Server.MapPath - 它会将虚拟路径映射到服务器上的物理路径。权限问题依然存在。

根据您的具体情况,如果导出库有返回字节数组或流的方式,而不是保存到文件,则可以避免保存到服务器。在这种情况下,您只需将返回结果传送给请求者。

我不熟悉您使用的SDK,但快速谷歌搜索揭示了一个流将文档返回的这个方法:

using (MemoryStream stream = new MemoryStream()) 
{ 
    using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook, true)) 
    { 
     ... work with the spreadsheetDocument, if needed 

     ... prepare and stream to browser 
    } 
} 

Here's引用到你的SDK,我发现

+0

是的,像你解释。但我没有任何解决方案在网上做到这一点。我该怎么做? – cejoseph

+0

我不熟悉你提到的SDK。看看它是否有其他重载的'Create'方法或其他方法A)创建你的文档并B)将结果返回到内存中 –

0
之一

即使使用打开/保存对话框,也可以显示客户端位置而不是服务器位置。所以这里的问题是,你想将该文件保存到客户端机器还是在服务器机器上?

如果要将其保存到客户端计算机上,请先将其保存在服务器上,然后再按其名称和位置进行保存,然后再启动下载。它会在客户端浏览器中自动提示下载对话框,并且用户可以选择位置和文件名(取决于客户端浏览器设置)。

如果您只想在服务器上保存它,那么在生成电子表格之前,请提示用户输入文件名(在生成请求的页面上)。如果用户可以访问某些文件夹,则还可以提示用户选择其中一个文件夹,否则根据您的选择/要求选择一个。使用文件名和位置来生成电子表格。

相关问题