10

我正在编写一个将简单数据库与 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

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

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

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

4 回答 4

10

恐怕撇号'是 Excel 的特殊字符,当它作为您发现的单元格中的第一个字符出现时。它告诉 Excel 将字符串的其余部分视为文本,以便您可以'34.2在单元格中输入类似的内容,并将其视为字符串而不是数字(用于格式化等)。

我建议做一些类似于你建议的事情,除了你将它放入 Excel 的位置,检查第一个字符,'如果已经有一个字符,则添加一个额外的字符。

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

于 2009-08-26T10:27:53.210 回答
4

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

从帮助:

如果TransitionNavigKeys属性为 False,则此前缀字符将为文本标签的 ' 或空白。如果 TransitionNavigKeys属性是True,则此字符将是 ' 用于左对齐标签," 用于右对齐标签,^ 用于居中标签,\ 用于重复标签或空白。

TransitionNavigKeys部分与 Lotus 1-2-3 兼容性有关,因此很可能是False

根据文章回答:

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

(警告:可能会出现稍微烦人的弹出窗口)


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

编辑2:我第一次是对的。PrefixCharacter仅当添加到单元格的值以 ' 开头时才会填充,因此只需读回PrefixCharacter加号Value并连接即可。只要TransitionNavigKeysFalse,就是

于 2009-08-27T01:46:57.017 回答
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
于 2009-08-26T09:35:15.547 回答
0

您可以尝试在查询中为您的文本字段('''' + dbField)预先添加一个单引号,以便对于嵌入单引号的字段,您的查询将返回:

"''stuff in single quotes'"

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

"'stuff in single quotes'"

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

"'stuff that wasn't in quotes"

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

"stuff that wasn't in quotes"

值得一试。:-)

于 2009-08-27T02:49:43.640 回答