使用VBScript创buildCSV文件。 一个函数来处理值使Excel感到高兴
我希望对以下function的改进意见/build议等。 它将被包裹在传统的ASP页面上传递给CSV文件的每个值上。 正如下面它处理所有情况下,我们正在对付,现在….
我想知道为什么如果Len(txt)= 0然后在创buildCSV文件的页面中运行时失败,但是在常规ASP页面中运行良好。 我可以使用如果“”&txt =“”然后使它在两个页面上工作
function insertCSV(txt) 'If Len(txt) = 0 Then If "" & txt = "" Then Exit Function Else Dim tmp tmp = txt if isNumeric(tmp) then if left(tmp, 1) = "0" then tmp = """" & tmp & """" else tmp = tmp end if else tmp = Replace(tmp, """", """""") if instr(tmp, ",") or instr(tmp, """") then tmp = """" & tmp & """" if instr(tmp, "®") then tmp = replace(tmp, "®", "®") if instr(tmp, "™") then tmp = replace(tmp, "™", "™") if instr(tmp, "©") then tmp = replace(tmp, "©", "©") if instr(tmp, vbcrlf) then tmp = replace(tmp, vbcrlf, "") if instr(tmp, "Â") then tmp = replace(tmp, "Â", "") end if insertCSV = tmp End If end function
一些事情:
-
本节:
If "" & txt = "" Then insertCSV = "" Else
如果你只是想返回一个空string,如果
txt
是空的,你可以这样做:If Len(txt) = 0 Then Exit Function
-
您不需要使用
End If
作为单行If
语句。 -
这一行:
if isNumeric(tmp) AND left(tmp, 1) <> "0" then tmp = tmp end if
你将价值分配给自己? 这有什么用途?
-
你不想用符号
©
replace符号©
©
? 你写的方式是用©
replace整个文本©
(同样适用于其他testing)。 我想你会想这样做,而不是:If InStr(tmp, "©") Then tmp = Replace(tmp, "©", "©")
尝试进行这些更改,然后发布日常更新的版本,让我们看看它的外观。
更新 (根据最新评论 )
如果数据库已经存储了类似的值,那么您需要考虑Web应用程序使用错误的编码来插入数据,并最终导致数据库中的编码不匹配。
- 将UTF-8string经典ASP转换为SQL数据库的答案
您不需要任何问题,Excel将以UTF-8
ASCII
将CSV解释为ASCII
。 有一个有用的技巧,愚弄Excel使用正确的编码,而不是假设ASCII,我总是使用这种技术,运作良好。 它涉及在显示数据之前写入BOM(字节顺序标记)到数据stream,告诉Excel数据是非ASCII
编码的UTF-8
。
'BOM to dup Excel into encoding the CSV correctly instead of using ASCII!!! Call Response.BinaryWrite(ChrB(239) & ChrB(187) & ChrB(191))
在使用Response.Write()
从insertCSV()
函数输出文本之前,应该指定它。
使用这种types的代码
if instr(tmp, "Â") then
当输出( Â
)试图做的是错误的是告诉你编码有问题。
有用的链接
- Microsoft Excel在.csv文件中损坏变音符号?
- 如何在PHP中输出一个UTF-8 CSV,Excel将正确读取?
- 哪种编码可以在Mac和Windows上使用Excel正确打开CSV文件? (在这种情况下仍然适用)