2014-01-10 32 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