如何让Excel在单元格开始时忽略撇号

我正在写一个工具,用Excel工作表同步一个简单的数据库。 数据库中的表中的每个项目对应于工作表中的一行。 我使用C#和Excel interop com界面将Excel工作表读取到工具中,然后在同步之后比较项目的值(即Excel工作表中的一列),以确保它们相等。

昨天我发现一个比较不正确的情况:

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

第二个是我从Excel中读到的,正如你所看到的,它跳过了第一个撇号。 有没有办法告诉Excel将单元格视为文本(不,只是设置单元格的格式不起作用)?

我甚至试图复制VBA中单元格的值( 'hello' ),如下所示:

 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 

结果是目标单元格的值总是hello'

如果没有办法,我会不得不做一些丑陋的事情

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

恐怕“撇号'是Excel中的一个特殊字符,它显示为单元格中的第一个字符。 它告诉Excel将剩下的string视为文本,以便在单元格中input类似'34.2的内容,并将其视为string而不是数字(用于格式化等)。

我build议你做一些类似于你的build议的东西,除非你把它放到Excel中,检查第一个字符,并添加一个额外的'如果已经有一个。

或者,你可以在所有的值前添加一个撇号,如果你想把它们全部作为文本。 这样你就不需要额外的第一个字符检查。

查看与该单元格对应的Range对象的PrefixCharacter属性

从帮助:

如果TransitionNavigKeys属性为False ,则该前缀字符将为'用于文本标签或空白。 如果TransitionNavigKeys属性为True ,则该字符将是“用于左alignment标签”,用于右alignment标签,^用于居中标签,用于重复标签或空白。

TransitionNavigKeys部分涉及Lotus 1-2-3的兼容性,所以它很可能会成为False

根据以下文章回答:

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

(警告:可能会出现稍微令人讨厌的popup窗口)


编辑:其实这可能不会有任何用处,因为PrefixCharacter是只读:(

编辑2:我第一次是对的。 如果添加到单元格中的值以'开头,所以只读回PrefixCharacter plus Value和连接, PrefixCharacter 只要TransitionNavigKeysFalse ,那就是

请尝试使用targetcell.Value 。 。公式栏中可以看到公式,而值是单元格的评估值。

所以,我猜你会在原来的代码中使用.Formula 。 改变这个应该可以。

编辑:好吧,它没有工作(尴尬)。

Excel专门处理起始单引号,特别是甚至掩盖单元格/范围属性无法访问。 我能find的唯一解决方法基本上和你最初想的一样。 开始:

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

您可能会尝试在您的查询中对文本字段(''''+ dbField)进行单引号前导,以便对于embedded了单引号的字段,您的查询将返回:

 "''stuff in single quotes'" 

当放置在一个Excel单元格将转换为:

 "'stuff in single quotes'" 

对于没有引号的字符,你会得到:

 "'stuff that wasn't in quotes" 

当放置在一个Excel单元格将转换为:

 "stuff that wasn't in quotes" 

值得一试。 🙂