使用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 

一些事情:

  1. 本节:

     If "" & txt = "" Then insertCSV = "" Else 

    如果你只是想返回一个空string,如果txt是空的,你可以这样做:

     If Len(txt) = 0 Then Exit Function 
  2. 您不需要使用End If作为单行If语句。

  3. 这一行:

     if isNumeric(tmp) AND left(tmp, 1) <> "0" then tmp = tmp end if 

    你将价值分配给自己? 这有什么用途?

  4. 你不想用符号&copy;replace符号© &copy; ? 你写的方式是用&copy;replace整个文本&copy; (同样适用于其他testing)。 我想你会想这样做,而不是:

     If InStr(tmp, "©") Then tmp = Replace(tmp, "©", "&copy;") 

尝试进行这些更改,然后发布日常更新的版本,让我们看看它的外观。

更新 (根据最新评论 )

如果数据库已经存储了类似的值,那么您需要考虑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文件? (在这种情况下仍然适用)