【问题标题】:Excel VBA, Keep Formatting when saving as a .txtExcel VBA,保存为.txt时保持格式
【发布时间】:2018-04-15 07:11:14
【问题描述】:

我正在将一个固定宽度的文本文件导入 Excel,然后将其导出。 我试图弄清楚如何在保存时保持格式。
在导入时,我尝试使用 .NumberFormat,它在导入时强制格式化,但在导出时会丢失格式。

我已导入的文本文件:

我的导出程序:

Option Explicit
Sub CreateFixedWidthFile(strFile As String, ws As Worksheet, s() As Integer)
  Dim i As Long, j As Long
  Dim strLine As String, strCell As String

  'get a freefile
  Dim fNum As Long
  fNum = FreeFile

 'open the textfile
  Open strFile For Output As fNum
 'loop from first to last row
 'use 2 rather than 1 to ignore header row
  For i = 2 To ws.Range("a65536").End(xlUp).Row
    'new line
    strLine = ""
    'loop through each field
    For j = 0 To UBound(s)
      'make sure we only take chars up to length of field (may want to 
      output some sort of error if it is longer than field)
      strCell = Left$(ws.Cells(i, j + 1).Value, s(j))
      'add on string of spaces with length equal to the 
      'difference in length between field length and value length
        strLine = strLine & strCell & String$(s(j) - Len(strCell), Chr$(32))
    Next j
    'write the line to the file
    Print #fNum, strLine
  Next i
 'close the file
  Close #fNum
End Sub

调用它:

Sub CreateFile()
  Dim sPath As String
  sPath = Application.GetSaveAsFilename("", "Text Files,*.txt")
  If LCase$(sPath) = "false" Then Exit Sub
  'specify the widths of our fields
  'the number of columns is the number specified in the line below +1
  Dim s(5) As Integer
 'starting at 0 specify the width of each column
  s(0) = 10
  s(1) = 2
  s(2) = 9
  s(3) = 10
  s(4) = 1
  s(5) = 20
 'write to file the data from the activesheet
  CreateFixedWidthFile sPath, ActiveSheet, s
End Sub

导出的文本文件(请参阅第 6 列的格式现在是十进制和科学记数法):

【问题讨论】:

  • 使用 .Text 而不是 .Value 有帮助吗?
  • 我要测试一下看看
  • 现在我想起来了,其中一些是 ID # 即。 ssn、驾照、序列号等。所以文本可能就可以了。

标签: excel vba csv text export-to-csv


【解决方案1】:

您正在导出 ,这是您通常想要使用的,以便保留实际的

如果您想要这些值的字符串表示形式在工作表上显示,您需要导出单元格的文本,而不是它们的值。

strCell = Left$(ws.Cells(i, j + 1).Text, s(j))

请注意,这将失去数字精度,并且您现在将数字视为文本,如果需要再次将这些值作为数字处理,这将带来问题。

【讨论】:

  • 现在唯一的问题是,
  • 对不起,我按回车,它无法编辑评论。一个空格:30 600000 导出为:306 00000
  • 检查您的数据,Range.Text 会为您提供工作表上显示的格式化单元格值
  • 让它工作了!我使用 Workbooks.OpenText 导入文件,现在我已将它从 scripting.filesystemobject 和 Mid 函数更改为 OpenTextFile。不是真正的问题,但它没有打开它自己的 excel 窗口中的文件,只是在同一个工作表中设置单元格值。
猜你喜欢
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多