Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 导出的TXT文件太大-代码错误?_Excel_Vba - Fatal编程技术网

Excel 导出的TXT文件太大-代码错误?

Excel 导出的TXT文件太大-代码错误?,excel,vba,Excel,Vba,我有一个宏可以将XLS导出到TXT,它工作得很好,只是生成的TXT不仅包含有用的数据,而且还包含该数据下面的空行。我可能弄错了,但看起来也导出了空的Excel单元格。有没有办法改进我的代码,只导出那些有数据的单元格?下面是要导出的XLS文件的链接。下面是生成的TXT文件的链接。使用键盘箭头键查看第1行下方的空选项卡,其中包含有用的数据。下面是代码: Option Explicit Sub Export_to_TXT_UTF16() Dim saveas_filename As Variant

我有一个宏可以将XLS导出到TXT,它工作得很好,只是生成的TXT不仅包含有用的数据,而且还包含该数据下面的空行。我可能弄错了,但看起来也导出了空的Excel单元格。有没有办法改进我的代码,只导出那些有数据的单元格?下面是要导出的XLS文件的链接。下面是生成的TXT文件的链接。使用键盘箭头键查看第1行下方的空选项卡,其中包含有用的数据。下面是代码:

Option Explicit

Sub Export_to_TXT_UTF16()

Dim saveas_filename As Variant
saveas_filename = Application.GetSaveAsFilename(FileFilter:="Unicode Text (*.txt), *.txt", Title:="SaveAs")
If saveas_filename = False Then
    Exit Sub
End If

With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
End With

ActiveSheet.Copy

With ActiveSheet.UsedRange
    .Value = .Value
End With

Rows(1).Delete          'DELETE ROW #1

Columns("C:G").Delete       'DELETE COLUMNS C-G

ActiveWorkbook.SaveAs Filename:=saveas_filename, FileFormat:=xlUnicodeText

ActiveWorkbook.Close SaveChanges:=False

With Application
    .ScreenUpdating = True
    .DisplayAlerts = True
End With

MsgBox "Your data has been exported!", vbExclamation, "Sheet Exported"

End Sub

您可能有不可打印的字符,如空格,或者更可能是回车符。你能运行下面的代码吗?然后重新运行上面的代码,并将结果返回给我

Sub CleanUpData()
    Dim Ws As Worksheet
    Dim Rng As Range, Cell As Range
    Dim ArrCodes
    Dim i As Long

    Set Ws = ActiveSheet
    On Error Resume Next
    Set Rng = Ws.UsedRange.SpecialCells(xlConstants, xlNumbers + xlTextValues)
    If Rng Is Nothing Then
        Exit Sub
    End If
    On Error GoTo 0

    ArrCodes = Array(127, 129, 141, 143, 144, 157, 160)

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    For Each Cell In Rng
        'Use the CLEAN function to remove 32 non printing chracters (0 to 31)
        'Trim is for removing leading and trailing blanks
        Cell = Trim(WorksheetFunction.Clean(Cell))
        'Now remove character code 127, 129, 141, 143, 144, 157, 160
        For i = LBound(ArrCodes) To UBound(ArrCodes)
            Cell = Replace(Cell, Chr(ArrCodes(i)), "")
        Next i
    Next Cell

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
作为替代方案,此代码将在所有工作表中循环,并将每个工作表保存为单独的文本文件。如果您只想将一张工作表保存为文本文件,只需不运行循环,就可以激活任何要导出为平面文件的页面

Sub SaveAllAsTextFile()

For Each xWs In Application.ActiveWorkbook.Worksheets
    xWs.Copy
    xTextFile = CurDir & "\temp_" & xWs.Name & ".txt"
    Application.ActiveWorkbook.SaveAs Filename:=xTextFile, FileFormat:=xlText
    Application.ActiveWorkbook.Saved = True
    Application.ActiveWorkbook.Close
Next

Dim shl As Object: Set shl = CreateObject("WScript.shell")
shl.CurrentDirectory = CurDir
shl.Run "cmd /C copy temp_*.txt " & ThisWorkbook.Name & ".txt" ' merge the temporary text files

'shl.Run "cmd /C del temp_*.txt" ' clean up the temporary text files


End Sub

对我来说很好。你确定这些行在某些单元格中没有不可见的字符例如:空格吗?使用.Find来查找最后一行,如图所示。各位,谢谢你们的输入。我上传的结果文件链接是在我的第一篇文章。如果您查看它,您将看到TXT中的问题到底是什么样子的@Siddharth Rout-我试图运行您共享的代码,但我始终存在调试错误。我可以与您共享我的Excel文件,以便您可以查看它吗?您好@ASH,谢谢您提供此代码。我照你说的做了,我想你的代码会清理空白,但结果文件是一样的:我已经在我的第一篇文章中添加了XLS和生成的TXT文件的链接,你能看一下吗?也许问题是我在一个工作簿中有两张工作表?我只是在你的特定文件上运行了你的原始代码,我看到末尾没有空格,没有空行,一点也不奇怪。现在,我对从您下载的文件夹中看到的名为“Sheet1”的XML文件运行了此操作。我在那个文件夹中没有看到任何XLS文件。我只是更新了我的原始答案。试试这个替代方案。我再次运行了你帖子中的第一个清理代码,然后是我的-没有任何更改。当我运行您的第二个代码时,我得到了一个运行时错误1004,这是由Application.ActiveWorkbook.SaveAs Filename:line引起的,基于调试。然而,我想首先确定我们讨论的是同一个问题:当你从我最初的帖子下载TXT文件时,你会看到第1行下面的空行吗?第456行是空的!是最后一个吗?若你们不想下载这个文件,只需点击它的名字,它就会在浏览器中打开。用鼠标选择文本,然后看到我说的空行。现在看看文件大小:10kb-d'd,你同意这对于一行文本来说太多了吗?我想这正是由455行空行造成的。现在的问题是:当你从最初的帖子中下载我的Excel文件,并在你的机器上使用帖子中的代码时,你会得到同样大的导出TXT文件,并且在第1行下面有同样的空行吗?如果是-这不是我的本地错误,而是代码的问题,这正是我的线程出现在这里的原因。