我正在使用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
答案 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))
但是,如果你想要领先的零,我不认为类型转换也保留了前导零。