我对MSOffice如何处理数字格式有一个挑战。
虽然我认为这是类似的根本原因:Stop Excel from automatically converting certain text values to dates
这是不同的,因为这不是日期格式,这涉及到Excel和PowerPoint与VBA。
我将数据从dB中提取到CSV文件中,并且正在对PPT模板中的某些文本标记(例如@@ReplaceText@@)执行.Replace。(网站上有一个很好的帖子,关于如何做到这一点,我现在似乎找不到)
有一个字段我需要处理,那就是跟踪指标,这个字段是我的dB中的文本,但它可以包含特殊字符-特别是$和%。
例如,我可以在CSV文件中看到以下值:“增加市场份额”、"1234“、"$10”、"28%“。
我希望VBA将这一切都当作文本处理,这样%和$字符就是maintained...but...Excel将数据作为数字读取,并保留$或%符号。PowerPoint去掉了$或%符号,并将28%转换为0.28,将$10转换为10。
根据上面的问题,在Excel中将"=""28%"""添加到.csv中,将在PowerPoint中给出确切的文字文本。
在强制space以文本字符串形式读取数据时,添加前面的Excel或'字符是有效的。但是PowerPoint忽略了它,行为与上面一样。例如28%到0.28。
我尝试使用下面的格式,但由于数据是可变的,我不知道应用哪种情况。
sCurrentText = Format(sCurrentText, "$#")或sCurrentText = Format(sCurrentText, "0.0%")
如果语句因为$或%不存在于VBA看到的内容中而不起作用(例如,$或%字符已经消失)
If sCurrentText Like "*$*" Then或If sCurrentText Like "*%" Then
因此,我的问题是,如何强制VBA将CSV文件中的内容作为文本,并忽略将$或%作为特殊字符处理,而只将它们保留在CSV中?
发布于 2016-04-28 01:05:42
您没有具体指定要对CSV文件中的数据执行什么操作,但我假定您正在尝试在VBA中打开该文件。
如果您使用OpenText打开CSV文件(如下所示),则Excel将以它认为合适的格式自动解析数据。例如:
Workbooks.OpenText fileName:="directory", DataType:=xlDelimited, Comma:=True如果希望VBA仅将数据作为文本处理,则可以使用不同的方法打开CSV文件。
Sub OpenCSVFile()
Dim ff As Long, iRow As Long, iCol As Long
Dim FilePath As String
Dim FileBuffer As String 'Entire CSV file as one string
Dim LineSeparatedFile() As String 'Array of data separated into lines
Dim LineData() As String 'Array of comma separated values for that line
ff = FreeFile
Open FilePath For Binary Access Read As #ff
FileBuffer = Space$(LOF(ff))
Get #ff, , FileBuffer
Close #ff
LineSeparatedFile = Split(txtBuffer, vbCrLf)
For iRow = 0 To UBound(LineSeparatedFile)
LineData = Split(LineSeparatedFile(i), ",")
For iCol = 0 To UBound(LineData)
'Code to do something with each entry.
'Eg. print to cell as text
ThisWorkbook.Sheets(1).Cells(iRow + 1, iCol + 1).NumberFormat = "@"
ThisWorkbook.Sheets(1).Cells(iRow + 1, iCol + 1).Value = LineData(iCol)
Next iCol
Next iRow
End Subhttps://stackoverflow.com/questions/36893436
复制相似问题