【问题标题】:Removing .txt from my file name and sheet name从我的文件名和工作表名中删除 .txt
【发布时间】:2017-07-06 10:22:12
【问题描述】:

请帮助大家!!在下面的代码部分(顺便说一句效果很好),我不断在实际文件名和工作表名中获取 .txt。我一直在寻找解决这个问题需要采取的措施,但我无法解决。我对 VBA 很陌生,所以我正在尽我所能请帮忙?!

 'Opens the folder to location to select txt file
  fileToOpen = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    If fileToOpen <> False Then
    Workbooks.OpenText fileName:=fileToOpen, _
    DataType:=xlDelimited, Tab:=True
    End If
 'Creates the file name based on txt file name
  fileName = Mid(fileToOpen, InStrRev(fileToOpen, "\") + 1)
 'Creates the sheet name based on the active txt file
  sheetName = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4)

 'Rename the original text file
   ActiveWorkbook.SaveAs ("S:\MERIT OUTPUTS FOLDER\MSI Recruitment 
  Limited\" & "DNU_" & fileName & ".txt") 

【问题讨论】:

  • 您的问题/错误是什么?出现运行时错误?或fileName 或sheetName 的值错误?
  • 分配sheetName 时,您不应该引用fileName 而不是活动工作簿名称吗?在 SaveAs 行中,删除 &amp; ".txt"。
  • 没有错误,但是当过程完成时,我的文件名中实际上有.txt字样,它也出现在工作表名称中。例如,它显示为 Test.txt.txt,因为文件格式是 .txt。我需要它来仅以 .txt 作为文件格式读取测试,而不是组成任何名称。
  • 由于您试图打开一个文本文件,其中只有一张工作表,您可以使用sheetName = ActiveWorkbook.Worksheets(1) 来获取工作表的名称
  • @SJR 谢谢你,它工作得很好。有工作表名称的原因是我没有愚蠢地包含的下一行代码是“ActiveWorkbook.SaveAs ("S:\MERIT OUTPUTS FOLDER\MSI Recruitment Limited\BACS File Original\" & _ fileName & ". CSV"), 文件格式:=xlCSV'

标签: vba excel


【解决方案1】:

也许您也可以只使用您的工作表名作为文件名,因为您已经从工作表名中删除了“.txt”。

'Opens the folder to location to select txt file
  fileToOpen = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    If fileToOpen <> False Then
    Workbooks.OpenText fileName:=fileToOpen, _
    DataType:=xlDelimited, Tab:=True
    End If

 'Creates the sheet name based on the active txt file
  sheetName = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4)

 'Rename the original text file
   ActiveWorkbook.SaveAs ("S:\MERIT OUTPUTS FOLDER\MSI Recruitment 
  Limited\" & "DNU_" & sheetName & ".txt") 

【讨论】:

    【解决方案2】:

    您可以使用正则表达式并提取不带扩展名的文件名并使用它

    public String extractFileName(String fullPathFile){
            try {
                Pattern regex = Pattern.compile(EXTRACT_FILE_NAME_REGEX);
                Matcher regexMatcher = regex.matcher(fullPathFile);
                if (regexMatcher.find()){
                    return regexMatcher.group(1);
                }
            } catch (PatternSyntaxException ex) {
                LOG.info("extractFileName::pattern problem <"+fullPathFile+">",ex);
            }
            return fullPathFile;
        }
    

    【讨论】:

    • 是的,但这是一个 Excel VBA 问题。
    • 什么是正则表达式?
    • 将 EXTRACT_FILE_NAME_REGEX 替换为 "([^\\\\/:*?\"|\r\n]+$)"
    猜你喜欢
    • 2013-04-28
    • 1970-01-01
    • 2018-11-10
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 2014-04-19
    • 2018-01-21
    相关资源
    最近更新 更多