将excel导出为csv-Retain数字格式为Text

时间:2017-10-21 08:06:20

标签: excel vba csv transpose

我正在使用here中的代码将Transposed转换为excel转换为csv文件。它的工作完美(感谢Nat)。

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

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

由于

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

2 个答案:

答案 0 :(得分: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 

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

未经测试并写在手机上,抱歉格式不正确。希望它有效。

答案 1 :(得分:0)

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

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

但是,如果你想要领先的零,我不认为类型转换也保留了前导零。