您下載的數據是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;
}
}
}
}
下載的數據是否也使用BinaryFormatter序列化? – dburner
您下載的數據是一個Excel文件 - 沒有直接轉換爲DataTable方法。您需要下載Excel文件,將其保存在某處,然後從中提取數據。 – dash