我正在構建一個ASP.NET MVC 2 Intranet應用程序,用戶將在其中上載數據文件。如果文件是Excel電子表格,則應該給用戶選擇他們想要導入的工作表。其中一些文件可能非常大,因此會異步導入。但是,在不保存/打開文件的情況下獲取工作表列表會很棒。無需打開文件即可在Excel工作簿中獲取工作表
這可能嗎?或者任何人都可以提出一個體面的解決方法(不要求在文本框中接受工作表名稱)?
我正在構建一個ASP.NET MVC 2 Intranet應用程序,用戶將在其中上載數據文件。如果文件是Excel電子表格,則應該給用戶選擇他們想要導入的工作表。其中一些文件可能非常大,因此會異步導入。但是,在不保存/打開文件的情況下獲取工作表列表會很棒。無需打開文件即可在Excel工作簿中獲取工作表
這可能嗎?或者任何人都可以提出一個體面的解決方法(不要求在文本框中接受工作表名稱)?
您可以通過使用System.IO.Packaging
庫來訪問該信息,該庫允許您訪問組成Excel文檔的XML,從而允許您查看組成Excel文檔的工作表。
另一種選擇是使用Open XML SDK 2.0並通過強類型對象訪問工作表,即WorkSheetPart
。既不會很快,也不會乾淨,因爲這將是一個很好的工作量,但除了Alex的建議之外,還有其他兩個選擇。
這聽起來很有希望,我會研究和更新線程,如果我得到它的工作。謝謝 – pjacko 2010-09-16 19:55:34
我能想到的唯一解決方法是,雖然我毫不猶豫地稱得上體面,但涉及到使用Silverlight並依賴於2007格式的Excel文件(Open XML或任何它所稱的)。然後,您可以使用Silverlight在本地打開該文件,並(駭客地)獲取工作表的列表。你也可以使用Silverlight來做實際的上傳。或者你可以提取相關的工作表,只上傳這些工作表。
謝謝亞歷克斯,不想走銀光的路線,但可能要! – pjacko 2010-09-16 19:54:16
如果您只是將數據導入到數據庫中,則可以使用OLE JET 4.0驅動程序並使用System.Data.SqlConnection.GetSchema(我認爲這是函數名稱)來訪問模式。
可以使用ADOX.Catalog列出工作表和命名範圍。 – Fionnuala 2010-09-15 22:10:25