Excel 导出的TXT文件太大-代码错误?
我有一个宏可以将XLS导出到TXT,它工作得很好,只是生成的TXT不仅包含有用的数据,而且还包含该数据下面的空行。我可能弄错了,但看起来也导出了空的Excel单元格。有没有办法改进我的代码,只导出那些有数据的单元格?下面是要导出的XLS文件的链接。下面是生成的TXT文件的链接。使用键盘箭头键查看第1行下方的空选项卡,其中包含有用的数据。下面是代码: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
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行下面有同样的空行吗?如果是-这不是我的本地错误,而是代码的问题,这正是我的线程出现在这里的原因。