Export excel to csv-保留数字格式为文本
Export excel to csv-Retain number format to Text
我正在使用 中的代码将 excel 转置为 csv 文件。它工作完美(感谢 Nat)。
现在我遇到了一个问题:因为我想从这个文件中读取数据来填写 Autocad table,我需要将 csv 数字格式设置为 "Text" 格式(现在是 "General" 格式,通常在打开 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
要将 1:100 比率按原样写入 CSV,最好是在将值写入 CSV 文件时使用类型转换。如下所示:
LineValues(RowNum) = CStr(SheetValues(RowNum, ColNum))
但是,如果您想要前导零,我认为类型转换不会保留前导零。
使用记事本等任何文本 viewer/editor 验证 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
另一种方法是在打印到文本文件之前将数组中的值修改为。
未经测试并在移动设备上编写,对于格式不正确的问题深表歉意。希望有用。
我正在使用
现在我遇到了一个问题:因为我想从这个文件中读取数据来填写 Autocad table,我需要将 csv 数字格式设置为 "Text" 格式(现在是 "General" 格式,通常在打开 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
要将 1:100 比率按原样写入 CSV,最好是在将值写入 CSV 文件时使用类型转换。如下所示:
LineValues(RowNum) = CStr(SheetValues(RowNum, ColNum))
但是,如果您想要前导零,我认为类型转换不会保留前导零。
使用记事本等任何文本 viewer/editor 验证 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
另一种方法是在打印到文本文件之前将数组中的值修改为。
未经测试并在移动设备上编写,对于格式不正确的问题深表歉意。希望有用。