【发布时间】:2016-06-27 14:35:06
【问题描述】:
我正在尝试在 VBA 中将 Excel 列截断为特定长度。
但是LEN 函数似乎不会将\n and \r 视为单个字符。
有没有其他函数可以给出字符串的确切长度?
例如,我正在尝试获取单元格中以下字符串的长度。 (a\r\nb\r\nc\r\nd)
a
b
c
d
获取长度的代码。
print len( replace(replace(sheet1.Cells(1,1).value, chr(10), "-" ), chr(13), "#"))
输出:
7
字符串的实际长度为10。
编辑
我终于明白了。它与空白字符无关,而是与其他一些特殊的 Unicode 字符有关。
VBA LEN 函数和 Java String.length() 方法不会给出字符串的大小,而是给出字符数。由于 Oracle 使用字节长度作为列的实际大小 (varchar(50) means 50 bytes),因此即使在截断之后也不允许插入字符串。
我最终使用以下代码在 Java 端截断字符串,因为我在 VBA 中找不到任何方法。
stringBytes = strCellValue.getBytes("UTF-8");
stringLength = stringBytes.length;
strCellValue = new String( stringBytes, 0, maxCellWidth, "UTF-8");
cell.setCellValue(strCellValue);
感谢 David Zemens 和 P57 提供的线索。
【问题讨论】:
-
如果你知道你要剪断的长度,试试
Application.Worksheetfunction.LEFT(string, # of chars you want to keep) -
它做同样的事情,它不考虑空白字符。我需要将 Excel 发送到 JDBC 将其放入 Oracle 表的服务器。使用了字符串的确切大小。
-
您确定
Len没有为您计算这些字符吗?这对我来说是 2Len(ChrW(10) & ChrW(13)) -
我正在从
notepad++复制文本,它会在选中时显示文本长度。Notepad++也计算特殊字符。我还尝试通过使用 Javascript 打印来复制字符串。在记事本中,我可以用#%替换\r\n,它给了我a#%b#%c#%d -
哇,复制粘贴到 Excel 中是非常重要的细节!您的回车符(字符代码 13)此时丢失,并且不再包含在单元格中的字符串值中。