2016-11-27 35 views
0

我正在嘗試將整個Excel數據讀取爲文本數組(與單元格中顯示的文本完全相同)。將Excel範圍讀取爲文本數組(表示顯示在屏幕上的單元格的字符串)

我使用此代碼對Excel內容轉換爲數組

Microsoft.Office.Interop.Excel.Range range = excelSheet.get_Range("A1", "P" + excelRowCount); object[,] values = (object[,])(range.Text);

,但我得到錯誤,如不能轉換爲DBNull反對[,]

如果我更換代碼將工作range.Textrange.Valuerange.Value2 但是,這不會給出正確的數據,例如,如果單元格中的數據是11:00:00 PM range.Value給出0.95833333333333337 在這裏我需要使用DateTime.FromOADate()方法值0.95833333333333337轉換爲下午11時00分00秒

但是,如果我去excelSheet.Cells[rowNo, columnNo].Text我會得到正確的文本,即:因爲有40K 00 PM,但將放緩的過程:11:00記錄在Excel表格中。

有沒有什麼辦法可以得到精確的文本像object[,] values = (object[,])(range.Value);數組,爲什麼range.Text不工作?

回答

0

https://fastexcel.wordpress.com/2011/11/30/text-vs-value-vs-value2-slow-text-and-how-to-avoid-it/

如果您嘗試獲得。文本從多個小區到一個變種(varr =範圍(「A1:A10」)文本),你沒有得到結果的數組。相反,如果範圍中的所有單元格都包含相同的值,並以相同的方式格式化,則會得到單個格式化的值,但是如果任何單元格具有不同的值或格式,則會得到Null(這可能是一個有用的技巧)。

該文章還與您的速度問題與每個單元格.Text同意。 但.Text嘗試讀取很多單元格屬性(包括所需的日期格式) - 這就是爲什麼它很慢。

另外請注意,如果單元格內容不合適,.Text可能會返回######,因此您必須自動設置所有列/行...

相關問題