Рабочая книга не определена в js-xlsx

Я использую Js-xlsx API для экспорта данных в файл.xlsx. Я пытался написать пример кода, используя AngularJs, и я не смог этого достичь. Workbook is not definedЯ ссылаюсь на вики, но я не смог его найти. Пожалуйста, помогите мне, кто-нибудь знает, как записать в список данных в файл.xlsx, используя Js-xlsx.

Фрагмент кода,

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.2/xlsx.core.min.js"></script>

...

<button ng-click="ExportData()">Export<button>

AngularJs Controller

$scope.ExportData= function(){

var workbook=new Workbook();// throws not defined
$scope.dataArrayForExportCsv=[ {userName:data.userName, age:data.age} ];
workbook = sheet_from_array_of_arrays($scope.dataArrayForExportCsv);
XLSX.writeFile(workbook, 'sample.xlsx');
}

1 ответ

Решение

Я смог решить эту проблему, используя следующую ссылку. Если вам нужно стилизовать файл.xlsx, вы должны превратить его в народный проект под названием xlsx-style. Когда я пишу этот пост, ветка не сливается с xlsx master. Так что вам нужно скачать необходимые файлы JS, используя npm.

Импортировать jszip.js а также xlsx.min.js файлы в ваш HTML-файл и делать кодирование. Вы можете использовать Cell object добавить стили ячейки.

Пример кода в стиле Cell.

 function sheet_from_array_of_arrays(data, opts) {
        var ws = {};
        var range = {s: {c:10000000, r:10000000}, e: {c:0, r:0 }};
        for(var R = 0; R != data.length; ++R) {
            for(var C = 0; C != data[R].length; ++C) {
                if(range.s.r > R) range.s.r = R;
                if(range.s.c > C) range.s.c = C;
                if(range.e.r < R) range.e.r = R;
                if(range.e.c < C) range.e.c = C;
                var cell = {};

                 //Set Header col styles
                 if(R <= 0){
                   cell = {
                    v: data[R][C],
                    s : {
                            fill : {
                                    fgColor : {
                                        theme : 8,
                                        tint : 0.3999755851924192,
                                        rgb : '7DCEA0'
                                    }
                                            },
                                            font : {
                                                color : {
                                                    rgb : "FFFFFF"
                                                },
                                                bold : true,
                                                sz : "14"
                                            }
                                        }
                  };
    } else if (data[R][C] == "SUCCESSFUL") {
          //You can check any conditions on text and add styles you wanted.
    }else{

         //Set other cells styles
         cell = {
                                            v : data[R][C],
                                            s : {
                                                fill : {
                                                    fgColor : {
                                                        theme : 8,
                                                        tint : 0.3999755851924192,
                                                        rgb : '08CB26'
                                                    }
                                                },
                                                font : {
                                                    color : {
                                                        rgb : "FFFFFF"
                                                    },
                                                    bold : true
                                                },
                                                border : {
                                                    bottom : {
                                                        style : "thin",
                                                        color : {
                                                            theme : 5,
                                                            tint : "-0.3",
                                                            rgb: "E8E5E4"
                                                        }
                                                    }
                                                }
                                            }
                                        };

       }

                if(cell.v == null) continue;
                var cell_ref = XLSX.utils.encode_cell({c:C,r:R});

                if(typeof cell.v === 'number') cell.t = 'n';
                else if(typeof cell.v === 'boolean') cell.t = 'b';
                else if(cell.v instanceof Date) {
                    cell.t = 'n'; cell.z = XLSX.SSF._table[14];
                    cell.v = datenum(cell.v);
                }
                else cell.t = 's';

                ws[cell_ref] = cell;
            }
        }

Установить ширину кол

                        var wscols = [ {
                            wch : 40
                        }, {
                            wch : 40
                        }, {
                            wch : 20
                        }, {
                            wch : 20
                        }, {
                            wch : 40
                        }, {
                            wch : 40
                        }, {
                            wch : 20
                        }, {
                            wch : 20
                        }, {
                            wch : 20
                        }, {
                            wch : 20
                        }, {
                            wch : 20
                        }, {
                            wch : 40
                        }, {
                            wch : 40
                        } ];
       ws = sheet_from_array_of_arrays(myRestData);
       ws['!cols'] = wscols;
       ...
Другие вопросы по тегам