Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将数据导出到excel/csv angularjs时设置列宽和换行符属性_Javascript_Angularjs_Node.js_Excel_Csv - Fatal编程技术网

Javascript 将数据导出到excel/csv angularjs时设置列宽和换行符属性

Javascript 将数据导出到excel/csv angularjs时设置列宽和换行符属性,javascript,angularjs,node.js,excel,csv,Javascript,Angularjs,Node.js,Excel,Csv,我已经创建了一个ng指令,它解析数据,并在单击应用该指令的按钮时将数据导出到excel。下面是将数据导出为csv格式的代码 angular.module('employeesApp') .directive('exportdetailsCsv', ['$parse', 'DetailsManagerService', function ( $parse, DetailsManagerService) { return { restrict: 'A'

我已经创建了一个ng指令,它解析数据,并在单击应用该指令的按钮时将数据导出到excel。下面是将数据导出为csv格式的代码

angular.module('employeesApp')
    .directive('exportdetailsCsv', ['$parse', 'DetailsManagerService', function ( $parse, DetailsManagerService) {
        return {
            restrict: 'A',
            scope: false,
            link: function(scope, element, attrs) {
                var data = '';
                var csv = {
                    stringify: function(str) {
                        return '"' +
                            str.replace(/^\s\s*/, '').replace(/\s*\s$/, '') // trim spaces
                                .replace(/"/g,'""') + // replace quotes with double quotes
                            '"';
                    },
                    generate: function(claimDetails, employeeCode, employeeName) {
                        var dataToExport = claimDetails;
                        var dataLength = Object.keys(dataToExport).length;
                        var tableColumnsCount = Object.keys(dataToExport).length;

                        var row1 = [];
                        row1.push("Title");
                        row1.push(dataToExport["title"]);

                        var row2 = [];
                        row2.push("Employee Name");
                        row2.push(employeeName);

                        var row3 = [];
                        row3.push("Employee Code");
                        row3.push(employeeCode);

                        var row4 = [];
                        row4.push("Project");
                        row4.push(dataToExport["project"]);


                        data = row1 + "\n" + row2 + "\n" + row3 + "\n" + row4;

                    },
                    link: function(fileName, inData, fileType) {
                        var bData = inData ? inData : data;
                        if (bData && bData.length > 0) {
                            var blob = new Blob([bData], {type: (fileType || "text/csv") + ";charset=utf-8"});
                            saveAs(blob, fileName || 'Details.csv');
                            data = [];
                        }
                    }
                };
                $parse(attrs.exportdetailsCsv).assign(scope.$parent, csv);
            }
        };
    }]);

我面临的问题是,正在导出的数据比excel工作表的默认列宽长,这导致数据在excel打印输出中被截断。这里的问题是,由于我在JS中构建整个数据,因此我无法使用HTM页面的CSS属性。所以我想知道是否有可能通过代码设置像换行和列宽这样的选项?或者,如果有任何方法可以替代我在这里尝试的方法。

使用CSV,您无法格式化数据或Excel样式。这只是为了导出数据

您可以尝试一些外部工具,如:

检查此项。它将尝试在加载文件后立即下载。这是基于我之前在评论中链接到的。它还包括脚本的缩小版本。查看
TableToExcel
变量,特别是其中设置的
模板

根据您的理解,Excel文件是基于XML的,因此您可以使用简单的HTML样式表来增加宽度、设置颜色或边框。从代码笔中,这是表格格式的相关位:

<table 
    cellspacing="0" 
    rules="rows" 
    border="1" 
    style="color:Black;background-color:White;border-color:#CCCCCC;border-width:1px;border-style:None;width:100%;border-collapse:collapse;font-size:9pt;text-align:center;"
>
</table>

如果您有复杂的需求,这可能会变得复杂。在这种情况下,Sathish关于使用Excelbuilderjs的建议并不坏


代码笔需要调整,具体取决于excel的版本等。我希望这能帮助您开始。

如果我以excel格式导出数据,即将文件类型更改为excel格式,该怎么办。在这种情况下,我可以将数据的格式发送到excel吗?您的意思是说数据为csv格式,并将文件重命名为.xls?否。在代码中创建blob时,我们提到了文件类型等。我要求在那里进行更改。我不知道blob类。但我确信,它不会将csv数据转换为excel数据。Sathish是对的,你不能像那样简单地将csv转换为excel。仅仅因为excel可以打开一个文件,并不意味着它是一个原生excel文件。本机excel实际上是XML(尝试在winzip中打开一个xlsx文件,看看里面有什么…)。可以让您了解什么是excel文件以及如何在JavaScriptg中创建excel文件。我所做的是制作一个HTML模板,然后将这些数据插入到该模板中。这很有魅力。你能回答这个问题吗,伙计,不。我就是给你这个链接的那个人。@Jorg这个问题有可能吗?这不是一个特定的角度或节点问题,顺便说一句,这是一个使用JavaScript创建excel文件的问题。同意!一开始我的疑问是,这个问题是否是因为ng csv节点模块而发生的。但最终证明是另一个问题。@MitakshGupta你能回答这个问题吗