2011-07-06 17 views
2

我想插入符号 - 白方(统一25A1)到Excel电子表格,但不断收到错误:德尔福 - 添加特殊字符在Excel

我试图无济于事如下:

1. WorkSheet.Cells[CurrRow,CurrCol].Formula := '=ChrW(&H25A1)'; 

2. WorkSheet.Cells[CurrRow,CurrCol].Formula := '=Char(25A1)'; 

运行宏并没有帮助,因为它说'?'

真的希望有人能够帮助我解决这个

+0

“我不断收到错误”不是太有用。你得到什么错误? –

+0

你为什么要这么做? 'Char(25A1)'的结果将是一个常数,为什么不把Unicode字符直接放入单元格的值中,而没有任何公式? –

+0

请更新您的delphi版本。总是这样做很重要。 –

回答

3

Excel的COM接口是一个Unicode API。 Excel在内部使用Unicode字符串。只需在Delphi WideString中将特殊字符传递给Excel即可。您不需要Excel公式。

WorkSheet.Cells[CurrRow,CurrCol].Value := WideString(#$25A1); 

如果您正在使用德尔福的Unicode版本(即2009年或更高版本),那么您可以在源代码中的Unicode字符,如果你让你的源代码中的UTF-8文件。

WorkSheet.Cells[CurrRow,CurrCol].Value := WideString('□'); 

如果您开始添加非ANSI字符,IDE会将您的源文件转换为UTF-8。

+0

这条线路工作。非常感谢你......在这一行上花了近三个小时。 – Amiru

1

你可能会得到它在Excel会显示在单元格为#VALUE!错误消息。为一个你喂它一个十六进制字符串,而它想要一个正常的数字。对于另一个你给Char函数一个超出其可接受范围的数字。对于CHAR的Excel帮助具体指出:

1到255之间的数字,指定 您需要哪个字符。该 字符从字符集由计算机

使用 看来,Excel没有任何ChrW功能。而且我找不到任何接受数字值并将其转换为等同Unicode字符的函数。

查看帮助,插入Unicode字符的方式是使用键盘上的数字值(按住Alt键)或使用菜单:插入,文本,符号,Unicode(十六进制)。您应该能够模拟键盘输入,并且该菜单应该可以通过COM模型使用,但是不确定字符选择是否是。

话虽如此,如果你正在寻找一种方式插入来自德尔福Unicode文本为Excel单元格,那么你应该需要做的是:

WorkSheet.Cells[CurrRow, CurrCol].Value := Chr(#$25A1); 

而且我只使用了德尔福(!)Chr函数,因为你做到了。你可以简单地在Delphi源文件中输入一个包含你需要的字符的文本字符串。

+0

嗨Marjan,谢谢你的回复。我真正想插入的是excel中单元格内的白色正方形。所以你显示的代码不起作用。我现在完全迷失了 – Amiru

+0

@Amiru:是的,对不起,我忘了'#'和@David转换为WideString的权利。 –