如何让Excel忽略单元格开头的撇号

10
我正在编写一个工具,用于将简单数据库与Excel表格同步。数据库表中的每个条目对应工作表中的一行。我使用C#和Excel互操作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
}
4个回答

10

很抱歉,撇号 ' 在Excel中作为单元格中的第一个字符时是特殊字符,就像你发现的那样。 它告诉Excel将字符串的其余部分视为文本,这样您就可以在单元格中输入像 '34.2 这样的内容,并将其视为字符串而不是数字(用于格式化等)。

我建议您采取与您建议的类似的方法,只是在将其放入Excel中时,请检查第一个字符,并在已经存在时添加额外的'

或者,您可以在所有值前加上撇号-如果您希望它们全部作为文本处理。 这样您就不需要额外的第一个字符检查。


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是只读的 :( 编辑2:我第一次就是正确的。只要TransitionNavigKeysFalse,那么PrefixCharacter只被填充到以'开头的单元格中,所以只需读取PrefixCharacter加上Value并连接即可。

1
尝试使用targetcell.Value.Formula是公式栏中看到的公式,而.Value是单元格的计算值。
所以,我猜你在原始代码中也使用了.Formula。更改它应该可以解决问题。
编辑:好吧,它没有起作用(尴尬)。
Excel特殊处理起始单引号...甚至不允许访问晦涩的单元格/范围属性。我找到的唯一解决方法基本上与你最初想到的相同。以下是解决方法:
If VarType(cell) = 8 And Not cell.HasFormula Then
 GetFormulaI = "'" & cell.Formula
Else
 GetFormulaI = cell.Formula
End If

不,那并没有帮助 - 你自己试试看。请查看我的更新的VBA函数。 - Srekel

0

你可以尝试在查询中给文本字段加上单引号('''' + dbField),这样对于包含单引号的字段,你的查询就会返回:

"''stuff in single quotes'"

如果放置在Excel单元格中,将会转换为:

"'stuff in single quotes'"

对于不在引号中的字符,您将获得:

"'stuff that wasn't in quotes"

当放置在Excel单元格中时,将转换为:

"stuff that wasn't in quotes"

值得一试。:-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接