【问题标题】:Export excel to csv-Retain number format to Text导出excel到csv-保留数字格式到文本
【发布时间】:2017-10-21 08:06:19
【问题描述】:

我正在使用here 中的这段代码将 excel 转换为 csv 文件。它运行良好(感谢 Nat)。

现在我面临一个问题:因为我想从这个文件中读取以填写 Autocad 表,我需要将 csv 数字格式设置为“文本”格式(现在它是“常规”格式,这通常发生在它以excel打开)。当我导入我的 csv 数据时,它会省略前导零单元格并将 1:100 更改为 0.01。

当我用 excel 打开 csv 文件并将这些单元格格式更改为“文本”,然后保存并关闭文件时,它工作正常。由于我不希望每个用户手动执行此操作,我如何才能自动执行此过程(或首先以文本格式保存)。

谢谢

Private Sub Exporttocsv()
     Dim ColNum As Integer
      Dim Line As String
      Dim LineValues() As Variant
      Dim OutputFileNum As Integer
      Dim PathName As String
      Dim RowNum As Integer
      Dim SheetValues() As Variant

      PathName = Application.ActiveWorkbook.Path
      OutputFileNum = FreeFile

      Open PathName & "\Test.csv" For Output Lock Write As #OutputFileNum

      SheetValues = Sheets("Current Revision").Range("B2:CV98").value

    Dim RowMax
    RowMax = UBound(SheetValues)
    Dim ColMax
    ColMax = 99
    ReDim LineValues(1 To RowMax)

      For ColNum = 1 To ColMax
        For RowNum = 1 To RowMax
          LineValues(RowNum) = SheetValues(RowNum, ColNum)
        Next
        Line = Join(LineValues, ",")
        Print #OutputFileNum, Line
      Next
      Close OutputFileNum
    End Sub

【问题讨论】:

  • 可能简单地将SheetValues = Sheets("Current Revision").Range("B2:CV98").value 更改为SheetValues = Sheets("Current Revision").Range("B2:CV98").Text 即可达到您想要的效果。
  • 另外,为了检查csv 文件的外观,您需要以Notepad 之类的方式打开它。如果您只是在 Excel 中 open 文件,可能会有一些不需要的转换。
  • 我不明白到底是什么问题。您实际上是在将 csv 导入 AutoCAD 吗? AutoCAD是否因为缺少前导零而抱怨,并且比率(例如1:100)正在转换为小数(0.01)?还是 AutoCAD 抱怨是因为 前导零和比率?还有,最后一段,你的意思是如果你在Excel中打开csv文件,保存,然后在AutoCAD中导入,AutoCAD不会报错吗?
  • robinCTS,我实际上正在将 csv 导入 AutoCAD,并且比率(例如 1:100)正在转换为小数(0.01)并且前导零(例如 002)转换为 2。没有抱怨 feom AutoCAD。如果我在 Excel 中打开 csv 文件,保存它,然后在 AutoCAD 中导入它,是的,它工作正常。或者,要调整主代码,我需要一个宏来打开 csv 并将单元格的格式更改为 Text 并覆盖并保存它。希望这是有道理的。谢谢
  • 我也尝试在我的主 excel 文件中将它们更改为 "=""01:100""" 或 "="1:100" 但是当将 excel 转换为 csv 时,它们是原始文件(即 csv 中的 "=""01:100""")。当我使用 excel 打开 csv 时,单元格显示 1:100 但使用记事本(或查看 csv 的正确方法)它们不正确。

标签: excel vba csv transpose


【解决方案1】:

使用任何文本查看器/编辑器(如记事本等)验证 CSV 是否包含所需的值(例如 1:100 而不是 0.01)。

如果值的格式不正确,则将它们格式化为文本:

With Sheets("Current Revision").Range("B2:CV98")
.numberformat = "@"
.entirecolumn.autofit 'To avoid #### errors as we're using text property below
SheetValues = .text
End with

以上内容应替换原始代码中的这一行。

SheetValues = Sheets("Current Revision").Range("B2:CV98").value 

替代方法是在打印到文本文件之前修改数组中的值。

未经测试且是在移动设备上编写的,对于格式错误,我们深表歉意。希望它有效。

【讨论】:

  • @chilin,谢谢 :)
【解决方案2】:

要按原样将 1:100 比率写入 CSV,最好在将值写入 CSV 文件时使用类型转换。如下所示:

      LineValues(RowNum) = CStr(SheetValues(RowNum, ColNum))

但是,如果您想要前导零,我认为类型转换也不会保留前导零。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多