【问题标题】:Force value in javascript csv formatted string to be text强制javascript csv格式字符串中的值为文本
【发布时间】:2015-06-30 16:24:56
【问题描述】:

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

                    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;
                }

我看过一些关于在值前加上“=”的帖子,因此它被视为论坛,但它似乎没有工作,或者我做错了什么。

任何帮助将不胜感激。

【问题讨论】:

  • 我不相信在 Excel 之外可以做任何事情来阻止这种行为。如果有,那么在像 CSV 这样的纯文本格式上是不可能的。
  • 这听起来很特别。可能值得编辑问题以反映更多。
  • 不是 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","6/16/2015 2:38:00 PM" 当它到达 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\",\"6/16/2015 2:38:00 PM\" I希望能够格式化这些字符串中的任何一个,以便强制文本。我不希望用户必须在 Excel 中手动格式化列。
  • @user3379395 “我遇到的问题是我有一列可以包含字母数字或仅包含数值。当数值非常长时,在 Excel 中打开时会将它们转换为科学计数法。 "听起来很特别。这不是一个 JavaScript 问题。

标签: javascript c# jquery excel csv


【解决方案1】:

决定使用文本编辑器创建一个简单的 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); }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多