首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于字符限制- Excel将文本截断为全文

基于字符限制- Excel将文本截断为全文
EN

Stack Overflow用户
提问于 2020-02-11 14:21:32
回答 2查看 122关注 0票数 0

我正在处理一些数据(DataSet#1),它使用一些非常规逻辑截断文本字段:

  • 如果"Service“>60个字符,则将名称缩减为<60个字符,但只有完整的单词

我的问题是,我需要在excel中格式化一些其他数据(DataSet#2),以匹配这个逻辑,该逻辑正在应用于我们报告服务器的后端(我无法控制)。似乎没有人能找到所有潜在的截断描述的列表。

DataSet#1是实时的,可以随时使用更新的数据重新提取,因此我需要创建一个模板,允许我从DataSet#2中的列表(它目前有完整的描述)中的信息提取到基于Dataset#1中经过修剪的服务类型描述的任何Dataset#1副本中。

示例:下面是完整的产品名称,以及我的DataSet#2中的产品名称:

  • "FNMA 1025小型住宅收入财产评估及FNMA 216增编“(73个字符,包括空格)

只要将文本裁剪为<60个字符(59个),就会产生:

  • "FNMA 1025小型住宅收入财产评估& FNM“

但是,在主数据(DataSet#1)中,这个产品的名称如下:

  • "FNMA 1025小型住宅收入财产评估“(56个字符,8个”单词“,包括&)

DataSet#1后端的逻辑已将产品的完整名称削减到60个字符以下,但只保留完整的单词(删除"FNM“部分单词)。

理想情况下,我必须能够获得一个具有完整描述名的列表--并在Excel (或VBA)中应用逻辑,这将产生与从其他数据集中修剪的数据相同的结果--然后允许我根据服务类型描述将数据集#2 (完整产品名称)中的信息提取到dataset#1中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-11 14:35:48

你可能需要这样的东西

代码语言:javascript
运行
复制
Function truncate_string(strInput As String, Optional lngChars As Long = 60)

Dim lngCharInstance As Long


lngCharInstance = Len(strInput)

While lngCharInstance > lngChars 
   lngCharInstance = InStrRev(strInput, " ", _
                    IIf(lngCharInstance >= Len(strInput), _
                    Len(strInput), lngCharInstance - 1))
Wend

truncate_string = Mid(strInput, 1, lngCharInstance)

End Function

这应该是这样的

truncate_string("FNMA 1025 Small Residential Income Property Appraisal & FNMA 216 Addendum")

并将按以下方式返回

FNMA 1025 Small Residential Income Property Appraisal &

就像这样,比如30个字符

truncate_string("FNMA 1025 Small Residential Income Property Appraisal & FNMA 216 Addendum",30)

这给

FNMA 1025 Small Residential

希望这有帮助,因为里面有一个循环,我会看看无限循环的可能性。

票数 0
EN

Stack Overflow用户

发布于 2020-02-12 01:04:37

您可以为此使用正则表达式。

代码语言:javascript
运行
复制
Option Explicit
Function trimLength(S As String, Optional Length As Long = 60) As String
    Dim RE As Object, MC As Object
    Dim sPat As String

sPat = "^.{1," & Length - 1 & "}(?=\s|$)"

If Len(S) > 60 Then
    Set RE = CreateObject("vbscript.regexp")
    With RE
        .Pattern = sPat
        .MultiLine = True
        Set MC = .Execute(S)
            trimLength = MC(0)
    End With
Else
    trimLength = S
End If

End Function

请注意,根据您的问题,我们从所需的长度中减去一个。

Regex解释

整字修剪长度

代码语言:javascript
运行
复制
^.{1,59}(?=\s|$)

选项:^$match在换行处重新调整

代码语言:javascript
运行
复制
- [Or match this alternative](https://www.regular-expressions.info/alternation.html) `$` 
    - [Assert position at the end of a line](https://developer.qcloudimg.com/http-save/yehe-900000/e3ec56fb81149c24b22cc99189e80902.png) `$`

RegexBuddy创建

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60170994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档