2015-06-30 43 views
0

我从jquery数据表中获取信息并使用javascript创建csv格式的字符串,然后将该字符串发布到C#Web服务API调用以创建可以是下载。我发布到Web服务,而不是直接在JavaScript中创建下载文件,因为IE不喜欢这样做。我遇到的问题是我有一列可以包含字母数字或只是数字值。当数值非常长时,它们在Excel中打开时会转换为科学记数法。将javascript csv格式化的字符串强制为文本

    for (var row = 0; row < $rep_data.length; row++) { 
        //$str_return += '<tr>'; 
        detail = ''; 
        for (var col = 0; col < self.dataColumns.length; col++) { 
         //omit select/checkbox column and wtb image column 
         if (col != 0 && col != 1) { 
          if ($rep_data[row][self.dataColumns[col].data] == null) 
           detail += ','; 
          else { 
           var re = /^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[0-1]|0[1-9]|[1-2][0-9])T(2[0-3]|[0-1][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]+)?(Z|[+-](?:2[0-3]|[0-1][0-9]):[0-5][0-9])?$/; 
           if ($rep_data[row][self.dataColumns[col].data].match(re)) { 
            var formatedDT = moment($rep_data[row][self.dataColumns[col].data]); 
            detail += '"' + moment(formatedDT).format('M/D/YYYY h:mm:ss A') + '",'; 
           } 
           else { 
            var result = $rep_data[row][self.dataColumns[col].data].replace(/"/g, '""'); 
            result = '"' + result + '"'; 
            detail += result + ','; 
           } 
          } 
         } 
        } 
        detail = detail.substring(0, detail.length - 1) + '\n'; 
        $str_return += detail; 
       } 

我看过一些帖子前面加上关于“=”就这么把它视为一个forumla价值,但它似乎没有被工作或我在正确做事。

任何帮助将不胜感激。

+1

我不相信在Excel之外可以做任何事情来阻止这种行为。如果有的话,使用CSV等纯文本格式的可能性极小。 –

+0

这听起来非常特别。编辑这个问题也许值得反思。 – radicalmatt

+0

不是Excel专用的,我正在格式化一个如下所示的javascript字符串:“15061614380011”,“NEW”,“CITY”,“1234”,“NW TEST ST E”,“PASS CHRISTIAN”,“MS 811 INC” 6/16/2015 6:38:00 PM“,”N“,”AERATION CORE/LAWN“,”2015/6/16 2:38:00“ 当它到达C#代码时,它变成这样: \“15061614380011 \”,\“NEW \”,\“CITY \”,\“1234 \”,\“NW TEST ST E \”,“PASS CHRISTIAN \”,“MS 811 INC \”,\“ 6/16/2015 6:38:00 PM \“N \”,\“AERATION CORE/LAWN \”,\“2015年6月16日下午2:38:00 \” 我想能够格式化这些字符串中的任何一个,以便强制文本。我不希望用户必须在Excel中手动格式化列。 – bdk0172

回答

0

决定使用文本编辑器创建一个简单的csv文件,经过一些试验和错误后可以通过使用“=”来正确地格式化数字。当我第一次尝试使用它时,我没有正确地做到这一点。

       var re = /^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[0-1]|0[1-9]|[1-2][0-9])T(2[0-3]|[0-1][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]+)?(Z|[+-](?:2[0-3]|[0-1][0-9]):[0-5][0-9])?$/; 
           if ($rep_data[row][self.dataColumns[col].data].match(re)) { 
            var formatedDT = moment($rep_data[row][self.dataColumns[col].data]); 
            detail += '="' + moment(formatedDT).format('M/D/YYYY h:mm:ss A') + '",'; 
           } 
           else { 
            var result = $rep_data[row][self.dataColumns[col].data].replace(/"/g, '""'); 
            if (isNumeric(result)) 
             result = '="' + result + '"'; 
            else 
             result = '"' + result + '"'; 
            detail += result + ','; 
           } 

把这个函数来检查 “ISNUMERIC”: 功能ISNUMERIC(N){ 回报isNaN(parseFloat(n))的& & isFinite的(N); }

相关问题