我有一個Excel 2007工作簿,其中包含我正在使用ADO.NET導入到DataTable
對象中的數據表。有沒有更好的方式在Excel中表示「空」值?
通過一些實驗,我設法找到了兩種不同的方法來指示電池,應該以「空」的ADO.NET來處理:
- 細胞是完全空白。
- 該單元包含
#N/A
。
不幸的是,這兩個是有問題的:
我的大部分在Excel中的數據列是通過公式生成的,但它不可能在Excel中生成一個公式,結果在一個完全空白細胞。只有一個完全空白的單元格纔會被認爲是空的(一個空字符串將不起作用)。
計算結果爲
#N/A
(由於實際的查找錯誤,或者因爲使用了NA()
功能)將被認爲無效的任何結構式。這似乎是理想的解決方案,直到我發現Excel工作簿必須打開才能正常工作。只要關閉工作簿,OLEDB就會突然開始將所有這些#N/A
視爲字符串。這填寫DataTable時會導致類似下面的異常:輸入字符串格式不正確。無法在Value列中存儲<#N/A>。預期的類型是Int32。
問:我怎麼能指示,而不必有打開工作簿時,我填的是DataTable
通過Excel公式一個空值?或者可以做些什麼來使#N/A
的值即使在工作簿關閉時也被視爲空值?
在情況下,它是很重要的,我的連接字符串使用以下方法建立:
var builder = new OleDbConnectionStringBuilder
{
Provider = "Microsoft.ACE.OLEDB.12.0",
DataSource = _workbookPath
};
builder.Add("Extended Properties", "Excel 12.0 Xml;HDR=Yes;IMEX=0");
return builder.ConnectionString;
(_workbookPath
是完整路徑到工作簿)。
我試過IMEX=0
和IMEX=1
但它沒有區別。
I不能真正看到這個問題嗎?你有可能修改公式嗎? – Cilvic 2011-04-21 20:09:39
@Cilvic,對不起,你是對的。我會添加一個。 – devuxer 2011-04-21 20:21:04
@Cilvic,是的,我完全可以編輯公式。我需要知道的是公式結果將在null中。一旦我知道了,我可以編輯公式以在我需要任何時候生成該值。 – devuxer 2011-04-21 20:31:27