2009-08-26 218 views
9

我正在編寫一個工具,它可以將簡單的數據庫與Excel工作表進行同步。數據庫中的表中的每個項目對應於工作表中的一行。我使用C#和Excel interop com界面將Excel工作表讀入工具,然後在同步之後比較項目的值(即Excel工作表中的一列),以確保它們相等。如何讓Excel在單元格開頭忽略單引號

昨天,我發現那裏的比較是不正確的情況下:

"'<MedalTitle>' Medal - <MedalDescription>" 
"<MedalTitle>' Medal - <MedalDescription>" 

第二個是一個我從讀取Excel中,並且你可以看到它跳過了第一個單引號。有沒有辦法告訴Excel將單元格視爲文本(不,只是設置單元格的格式不起作用)?

我甚至嘗試在VBA到細胞的複製值(「你好」)是這樣的:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
    Target.Offset(1, 0).Value = Target.Worksheet.Range("b2").Value 
    Target.Offset(2, 0).Value = Target.Worksheet.Range("b2").Formula 
    Target.Offset(3, 0).Formula = Target.Worksheet.Range("b2").Formula 
    Target.Offset(4, 0).Formula = Target.Worksheet.Range("b2").Value 
End Sub 

結果是目標單元格的值總是你好」

如果沒有辦法,我只好做一些醜陋的像

if (dbitem.value[0] == ''') 
{ 
    // stuff 
} 
else 
{ 
    // regular comparison 
} 

回答

9

恐怕撇號'是Excel中的一個特殊字符時,如你發現它出現在細胞中的第一個字符。它告訴Excel將其餘的字符串視爲文本,以便您可以在單元格中輸入類似'34.2的東西,並將其視爲字符串而不是數字(用於格式化等)。

我建議你做一些類似於你的建議的東西,除非你把它放到Excel中,檢查第一個字符,並且如果已經有一個字符,就添加一個額外的'

或者,您可以在所有值上加上一個撇號 - 如果您希望它們全部爲文本。這樣你就不需要額外的第一個字符檢查。

1

嘗試改爲。 .Formula是公式欄中顯示的公式,而.Value是單元格的評估值。

所以,我猜你會在原始代碼中使用.Formula。改變這個應該可行。

編輯:好吧,它沒有工作(尷尬)。

Excel專門處理起始單引號,所以特別是甚至掩蓋單元格/範圍屬性都無法訪問。我能找到的唯一解決方法基本上與您最初的想法相同。這裏所說:

If VarType(cell) = 8 And Not cell.HasFormula Then 
GetFormulaI = "'" & cell.Formula 
Else 
GetFormulaI = cell.Formula 
End If 
+0

不,這沒有幫助 - 自己試試。查看我更新的VBA功能。 – Srekel 2009-08-26 10:12:51

4

看其對應於細胞

從幫助Range對象的PrefixCharacter屬性:

如果TransitionNavigKeys屬性是 False,這個前綴字符將是' 一個文本標籤或空白。如果 TransitionNavigKeys屬性是True, 這個角色將是「一個 左對齊的標籤,」對於 右對齊的標籤,^爲 中心的標籤,\用於重複 標籤,或空白。

TransitionNavigKeys部分涉及到Lotus 1-2-3兼容性,因此它比有可能會基於在物品來False

回答更多:

http://excel.tips.net/Pages/T003332_Searching_for_Leading_Apostrophes.html

(警告:有點惱人的彈出窗口,可能會出現)


編輯:其實這大概是不會因爲PrefixCharacter只讀:(

而沒有任何用途edit2:我第一次是對的。 PrefixCharacter只有在添加到單元格中的值以'開頭,所以只讀回PrefixCharacter加上Value並連接時纔會填充。只要TransitionNavigKeysFalse,即

0

你可能一個單引號的文本字段未決的預試(「」「」 + dbField)在查詢以便與嵌入的單引號字段中輸入您的查詢將返回:

"''stuff in single quotes'" 

其被放置在一個Excel單元將轉換爲:

"'stuff in single quotes'" 

對於未加引號字符,你會得到:

"'stuff that wasn't in quotes" 

其被放置在一個Excel單元將轉換爲:

"stuff that wasn't in quotes" 

值得一試。 :-)

相關問題