在Excel工作簿中获取工作表而无需打开文件

我正在构build一个ASP.NET MVC 2 Intranet应用程序,用户将在其中上传数据文件。 如果文件是Excel电子表格,则应该给用户select他们想要导入的工作表。 其中一些文件可能非常大,因此将被asynchronous导入。 但是,不用保存/打开文件就可以获取工作表列表。

这可能吗? 或者任何人都可以提出一个体面的解决方法(而不是在文本框中接受工作表名称)?

您可以通过使用System.IO.Packaging库来访问这些信息,该库允许您访问组成Excel文档的XML,从而可以查看构成Excel文档的工作表。

另一个select是使用Open XML SDK 2.0并通过强types对象(即WorkSheetPart访问Worksheets。 既不会很快,也不会干净,因为这将是一个很好的工作量,除了Alex的build议,还有其他两个select。

我能想到的唯一的解决方法,虽然我毫不犹豫地称得上体面,涉及使用Silverlight,并依赖于2007格式(Open XML或任何它所谓的)的Excel文件。 然后,您可以使用Silverlight在本地打开文件,并(骇客)获取工作表的列表。 你也可以使用Silverlight来做实际的上传。 或者你可以提取相关的工作表,只上传这些。

如果您只是将数据导入数据库,则可以使用OLE JET 4.0驱动程序,并使用System.Data.SqlConnection.GetSchema(我认为这是函数名称)访问模式。