2014-01-10 30 views
0

我試圖從SharePoint網站上的Excel文件網址提取數據,並把它放在一個數據數據表,但得到這個錯誤:從內存流將數據轉換成數據表

輸入流不是有效的二進制格式。起始內容(以字節爲單位)是:50-4B ................

這裏是我使用的代碼: -

WebClient webClient = new WebClient(); 
webClient.Credentials = CredentialCache.DefaultNetworkCredentials; 
byte[] data = webClient.DownloadData("http://sp2010sw127:2000/eur/Home/TestLibrary/Details.xlsx"); 
MemoryStream memoryStreamOfFile = new MemoryStream(data); 
BinaryFormatter formatter = new BinaryFormatter(); 
memoryStreamOfFile.Seek(0, SeekOrigin.Begin); 
DataTable dt = (DataTable)formatter.Deserialize(memoryStreamOfFile); 

請諮詢。

+0

下載的數據是否也使用BinaryFormatter序列化? – dburner

+0

您下載的數據是一個Excel文件 - 沒有直接轉換爲DataTable方法。您需要下載Excel文件,將其保存在某處,然後從中提取數據。 – dash

回答

0

您下載的數據是Excel電子表格;這與DataTable完全不同;當你嘗試執行以下操作:

DataTable dt = (DataTable)formatter.Deserialize(memoryStreamOfFile); 

然後你試圖反序列化表示Excel電子表格導入一個DataTable對象,這是不可能的字節流。

相反,你也可以先下載文件:

WebClient webClient = new WebClient(); 
webClient.Credentials = CredentialCache.DefaultNetworkCredentials; 
webClient.DownloadFile(
       "http://sp2010sw127:2000/eur/Home/TestLibrary/Details.xlsx", 
       "C:\\Details.xlsx"); 

然後使用下面的方法(我已經從我的答案here定製):

DataTable myData = LoadFromExcelFile("C:\\Details.xlsx"); 

請注意,您想要考慮一個更合適的位置來保存文件,並且您還需要查看SELECT查詢以從工作表中獲取所需的列(在下面的示例中,名稱爲[Sheet1$])。

public DataTable LoadFromExcelFile(string filePath) 
{ 
    String excelConnString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0\"", filePath); 
    //Create Connection to Excel work book 
    using (OleDbConnection excelConnection = new OleDbConnection(excelConnString)) 
    { 
     //Create OleDbCommand to fetch data from Excel - you can query the sheet as if it were a sql table effectively 
     using (OleDbCommand cmd = new OleDbCommand("SELECT [Column1],[Column2],[Column3] from [Sheet1$]", excelConnection)) 
     { 
      excelConnection.Open(); 
      using (OleDbDataReader dReader = cmd.ExecuteReader()) 
      { 
       DataTable myData = new DataTable(); 
       myData.Load(dReader); 
       return myData; 
      } 
     } 
    } 
} 
+0

感謝您的回覆....但不幸的是,它在下面的代碼行提供了例外。 webClient.DownloadFile( 「HTTP:// sp2010sw127:2000 /歐元/主頁/ TestLibrary/Details.xlsx」, 「C:\\ Details.xlsx」); – Rameez

+0

什麼是例外?在上面的回覆中,您錯過了URL中的http://。還檢查您有權將文件保存到'C:\' – dash

+0

錯誤是「在Web客戶端請求期間發生異常」,aLSO我擁有完全權限並已正確提供地址 – Rameez