如何让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
。 只要TransitionNavigKeys
是False
,那就是
请尝试使用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"
值得一试。 🙂