Browse Source

excel export day1

TonyKang 8 năm trước cách đây
mục cha
commit
63cd1f39d1
3 tập tin đã thay đổi với 141 bổ sung0 xóa
  1. 75 0
      modules/reports/util/rpt_excel_util.js
  2. 1 0
      package.json
  3. 65 0
      test/unit/excel_export/testZip.js

+ 75 - 0
modules/reports/util/rpt_excel_util.js

@@ -0,0 +1,75 @@
+/**
+ * Created by Tony on 2017/4/1.
+ */
+var JV = require('../rpt_component/Jpc_ValueDefine');
+
+const dftHeadXml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
+
+function writeContentTypes(sheets) {
+    var rst = [];
+    rst.push[dftHeadXml + '\r\n'];
+    rst.push['<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">'];
+    //...
+    rst.push['<Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/>'];
+    rst.push['<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>'];
+    rst.push['<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>'];
+    rst.push['<Default Extension="xml" ContentType="application/xml"/>'];
+    rst.push['<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>'];
+    rst.push['<Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/>'];
+    rst.push['<Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/>'];
+    for (var i = 0; i < sheets.length; i++) {
+        rst.push('<Override PartName="/xl/worksheets/' + sheets[i].sheetName + '.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>')
+    }
+    rst.push['<Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/>'];
+    rst.push['</Types>'];
+    return rst;
+}
+function writeRootRels(){
+    var rst = [];
+    rst.push[dftHeadXml + '\r\n'];
+    rst.push['<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">'];
+    rst.push['<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>'];
+    rst.push['<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>'];
+    rst.push['<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>'];
+    //rst.push['']; ...
+    rst.push['</Relationships>'];
+    return rst;
+}
+function writeApp(sheets) {
+    var rst = [];
+    rst.push[dftHeadXml + '\r\n'];
+    rst.push['<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">'];
+    rst.push['<Application>Microsoft Excel</Application>'];
+    rst.push['<DocSecurity>0</DocSecurity>'];
+    rst.push['<ScaleCrop>false</ScaleCrop>'];
+    rst.push['<HeadingPairs>'];
+    rst.push['<vt:vector size="2" baseType="variant">'];
+    rst.push['<vt:variant><vt:lpstr>¹¤×÷±í</vt:lpstr></vt:variant>'];
+    rst.push['<vt:variant><vt:i4>' + sheets.length + '</vt:i4></vt:variant>'];
+    rst.push['</vt:vector>'];
+    rst.push['</HeadingPairs>'];
+    rst.push['<TitlesOfParts>'];
+    rst.push['<vt:vector size="' + sheets.length + '" baseType="lpstr">'];
+    for (var i = 0; i < sheets.length; i++) {
+        rst.push('<vt:lpstr>' + sheets[i].sheetName + '</vt:lpstr>')
+    }
+    rst.push['</vt:vector>'];
+    rst.push['</TitlesOfParts>'];
+    rst.push['<Company>SmartCost</Company>'];
+    rst.push['<LinksUpToDate>false</LinksUpToDate>'];
+    rst.push['<SharedDoc>false</SharedDoc>'];
+    rst.push['<HyperlinksChanged>false</HyperlinksChanged>'];
+    rst.push['<AppVersion>12.0000</AppVersion>'];
+    //rst.push[''];
+    rst.push['</Properties>'];
+    return rst;
+}
+function writeCore() {
+    //
+}
+
+module.exports = {
+    exportExcel: function (pageData, options) {
+        var rptOptions = (options || {singlePage: false, fileName: 'report'});
+    }
+}

+ 1 - 0
package.json

@@ -18,6 +18,7 @@
   "dependencies": {
     "bluebird": "^3.5.0",
     "excel-export": "^0.5.1",
+    "jszip": "^3.1.3",
     "xlsx": "^0.9.6"
   }
 }

+ 65 - 0
test/unit/excel_export/testZip.js

@@ -0,0 +1,65 @@
+/**
+ * Created by Tony on 2017/3/31.
+ */
+var test = require('tape');
+var JSZip = require("jszip");
+
+var fs = require('fs');
+
+test('test zip excel files: ', function (t) {
+    //rptUtil.setReportDefaultCache();
+    var file = '[Content_Types].xml';
+    var data = fs.readFileSync('../../../tmp/excel_test_raw_data/08-2/[Content_Types].xml', 'utf8', 'r');
+    var zip = new JSZip();
+    zip.file(file, data, {compression: 'DEFLATE'});
+
+    var zip_rels = zip.folder('_rels');
+    file = '.rels';
+    data = fs.readFileSync('../../../tmp/excel_test_raw_data/08-2/_rels/.rels', 'utf8', 'r');
+    zip_rels.file(file, data, {compression: 'DEFLATE'});
+
+    var zip_docProps = zip.folder('docProps');
+    file = 'app.xml';
+    data = fs.readFileSync('../../../tmp/excel_test_raw_data/08-2/docProps/app.xml', 'utf8', 'r');
+    zip_docProps.file(file, data, {compression: 'DEFLATE'});
+    file = 'core.xml';
+    data = fs.readFileSync('../../../tmp/excel_test_raw_data/08-2/docProps/core.xml', 'utf8', 'r');
+    zip_docProps.file(file, data, {compression: 'DEFLATE'});
+
+    var zip_xl = zip.folder('xl');
+    file = 'sharedStrings.xml';
+    data = fs.readFileSync('../../../tmp/excel_test_raw_data/08-2/xl/sharedStrings.xml', 'utf8', 'r');
+    zip_xl.file(file, data, {compression: 'DEFLATE'});
+    file = 'styles.xml';
+    data = fs.readFileSync('../../../tmp/excel_test_raw_data/08-2/xl/styles.xml', 'utf8', 'r');
+    zip_xl.file(file, data, {compression: 'DEFLATE'});
+    file = 'workbook.xml';
+    data = fs.readFileSync('../../../tmp/excel_test_raw_data/08-2/xl/workbook.xml', 'utf8', 'r');
+    zip_xl.file(file, data, {compression: 'DEFLATE'});
+
+    var zip_rels2 = zip_xl.folder('_rels');
+    file = 'workbook.xml.rels';
+    data = fs.readFileSync('../../../tmp/excel_test_raw_data/08-2/xl/_rels/workbook.xml.rels', 'utf8', 'r');
+    zip_rels2.file(file, data, {compression: 'DEFLATE'});
+    var zip_theme = zip_xl.folder('theme');
+    file = 'theme1.xml';
+    data = fs.readFileSync('../../../tmp/excel_test_raw_data/08-2/xl/theme/theme1.xml', 'utf8', 'r');
+    zip_theme.file(file, data, {compression: 'DEFLATE'});
+
+    var zip_worksheets = zip_xl.folder('worksheets');
+    file = 'sheet1.xml';
+    data = fs.readFileSync('../../../tmp/excel_test_raw_data/08-2/xl/worksheets/sheet1.xml', 'utf8', 'r');
+    zip_worksheets.file(file, data, {compression: 'DEFLATE'});
+    //sheet1.xml
+
+    zip.generateNodeStream({type:'nodebuffer',streamFiles:true})
+        .pipe(fs.createWriteStream('../../../tmp/outExcel.xlsx'))
+        .on('finish', function () {
+            // JSZip generates a readable stream with a "end" event,
+            // but is piped here in a writable stream which emits a "finish" event.
+            console.log("outExcel.xlsx was written.");
+            t.pass('just pass for excel(xlsx) output!');
+            t.end();
+        }
+    );
+});