计算Excel中字符串前的空格数

时间:2014-02-19 07:49:18

标签: excel

导出到Excel的程序会在单个列中创建一个带缩进列表的文件,如下所示:

Column A
 First Text
  Second Text
   Third Text
  Fourth Text
 Fifth Text

如何在excel中创建一个函数来计算文本字符串前的空格数?

在这个例子中,返回:1表示第一个文本行,3表示第一行,等等。

最好寻求非VBA解决方案。

8 个答案:

答案 0 :(得分:11)

TRIM在这里没有帮助,因为它会删除单词之间的双重空格。

主要想法是在修剪过的字符串中找到第一个字母,并在原始字符串中找到它的位置:

=FIND(LEFT(TRIM(A1),1),A1)-1

答案 1 :(得分:2)

尝试以下:

=FIND(" ",A1,1)-1

它计算单元格中第一个找到的空白字符的位置,并将其减少1以反映该位置之前的字符数。

答案 2 :(得分:1)

您可以在Ms Excel本身中尝试此功能:

=LEN(A1)-LEN(SUBSTITUTE(A1," ",""))

如果结果位于单个单元格中,则会应用此选项。如果是整行/列,只需相应地拖动公式。

答案 3 :(得分:0)

根据http://www.mrexcel.com/forum/excel-questions/61485-counting-spaces.html,您可以尝试:

=LEN(Cell)-LEN(SUBSTITUTE(Cell," ","")) 

其中Cell是您的目标单元格(即A1,B1,D3等)。

我的例子:

B8: =LEN(F8)-LEN(SUBSTITUTE(F8," ",""))

F8: [ this is a test    ]

produces 4 in B8.

上面的方法将计算字符串之前的空格(如果有的话),单个字之间和字符串之后(如果有的话)。它不会计算没有实际空白字符的可用空间。因此,如果我在上面的示例中在测试后插入了两个空格,则总计数将增加到6。

答案 4 :(得分:0)

正如其他答案中所指出的,你不能真正使用TRIMSUBSTITUTE作为单词之间的潜在空格,或者最后会给你错误的结果。

但是,这个公式可行:

=MATCH(TRUE,MID(A1,COLUMN($A$1:$J$1),1)<>" ",0)-1

您需要将其作为数组公式输入,即按 Ctrl - Shift - 输入而不是 Enter

如果您期望超过10个空格,请将$J替换为字母表中更下方的列字母!

答案 5 :(得分:0)

这是我的解决方案。如果左边5个字符等于“_____”(5个空格),则返回5,否则查找4个空格,依此类推。

=IF(LEFT(B1,5)="     ",5,IF(LEFT(B1,4)="    ",4,IF(LEFT(B1,3)="   ",3,IF(LEFT(B1,2)="  ",2,1))))

答案 6 :(得分:0)

你之前在答案中几乎得到了LEN + TRIM,你只需要将两者结合起来:

[Route("feedback")]
[HttpPost]
public void Add(FeedbackRequest feedback)
{
    var Response = HttpContext.Current.Response;

    string filePath = "C:\\testfile.txt";
    var file = new FileInfo(filePath);

    if (file.Exists)
    {
        Response.Clear();
        Response.ClearHeaders();
        Response.ClearContent();
        Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
        Response.AddHeader("Content-Length", file.Length.ToString());

        //Doesn't work with plain/text either
        Response.ContentType = "application/force-download";
        Response.Flush();
        Response.TransmitFile(file.FullName);
        try
        {
            Response.End();
        }
        catch (ThreadAbortException err)
        {

        }
        catch (Exception err)
        {
        }
    }

}

答案 7 :(得分:0)

如果缩进,则可以创建如下的个人功能:

Function IndentLevel(Cell As Range)
'This function returns the indentation of a cell content
Application.Volatile
'With "Application.Volatile" you can make sure, that the function will be 
 recalculated once the worksheet is recalculated
'for example, when you press F9 (Windows) or press enter in a cell
IndentLevel = Cell.IndentLevel
'Return the IndentLevel
End Function

这仅在缩进时有效,您可以在“单元格格式”->“对齐”中看到此属性。

之后,您可以看到缩进级别。

enter image description here