将excel导出为csv – 将数字格式保留为文本

我从这里使用这个代码来转换excel到csv文件。 这是工作完美(感谢纳特)。

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

当我用Excel打开CSV文件,并将这些单元格格式更改为“文本”,然后保存并closures文件,它工作正常。 我怎么能自动化这个过程(或者首先保存文本格式),因为我不希望每个用户手动执行此操作。

谢谢

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 

validationCSV是否包含您想要的值(例如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 

上面应该replace原来的代码中的这一行。

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

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

未经testing并在手机上书写,抱歉格式不对。 希望它的作品。

对于将1:100的比率原样写入CSV,最好的方法是在将值写入CSV文件时使用types转换。 如下所示:

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

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