2017-12-18 17 views
1

サンプルのExcelファイルを作成しようとしていますが、 'fs.createWriteStreamは関数ではありません。'というエラーが表示されます。以下 は、[ファイル] -Ionic | TypeError | fs.createWriteStreamは関数ではありません

import { Component } from '@angular/core'; 
import { NavController, Platform } from 'ionic-angular'; 
import * as Excel from "exceljs/dist/exceljs.js"; 

@Component({ 
    selector: 'page-home', 
    templateUrl: 'home.html' 
}) 
export class HomePage { 

    constructor(platform: Platform) { 
    platform.ready().then(() => { 
     this.createSheetUsingExcelJs(); 
    }); 
    } 

    ionViewDidLoad() { 
    } 

    createSheetUsingExcelJs() { 
    let workbook = new Excel.Workbook(); 
    var worksheet = workbook.addWorksheet('My Sheet'); 

    worksheet.columns = [ 
     { header: 'Id', key: 'id', width: 10 }, 
     { header: 'Name', key: 'name', width: 32 }, 
     { header: 'D.O.B.', key: 'DOB', width: 10 } 
    ]; 
    worksheet.addRow({ id: 1, name: 'Ionic Android', dob: new Date(1970, 1, 1) }); 
    worksheet.addRow({ id: 2, name: 'Ionic iOS', dob: new Date(1965, 1, 7) }); 
    var tempFilePath = 'C:/Users/mahmad/Downloads/temp.xlsx'; 
    console.log(workbook); 

    workbook.xlsx.writeFile('temp.xlsx').then(function() { 
     console.log('file is written'); 
    }); 
    } 
} 

を作成するためのコードであるtypescriptですへのJavaScriptファイルからインポートするには、この問題に

答えて

0

import * as Excel from "exceljs/dist/exceljs.js";

を解決するためのソリューションを提案してください、あなたはライブラリのタイプ定義ファイルを使用する必要があります。

npmで利用できます。

ドゥ:輸入するためには

npm i @types/exceljs --save-dev 

import * as Excel from 'exceljs'; 

あなたはrepo

+0

私はコマンドを使用してみましたが、今私はエラーを取得しています。 – user320676

+0

どこに投げているのですか? libに問題がある場合はgithubの問題を呼び出す価値があるかもしれません –

+0

起動画面にスローされます。私のHomePageコンストラクタも呼び出されません。 – user320676

0

最後に、タスクがts-xlsx libraryを使用して行われ、 "DefinitelyTyped" のテストファイル内のサンプルを確認することができます。 「:プロパティを読み取ることができません未定義の 『プロトタイプ』キャッチされない例外TypeError」 は、以下の私のコード -

import { Component, Injectable } from '@angular/core'; 
import { NavController, Platform } from 'ionic-angular'; 
import * as XLSX from 'ts-xlsx'; 
import { File } from '@ionic-native/file'; 
import { EmailComposer } from '@ionic-native/email-composer'; 

declare var cordova: any; 
declare var window; 

@Component({ 
    selector: 'page-home', 
    templateUrl: 'home.html', 
    providers: [File] 
}) 

@Injectable() 
export class HomePage { 

    sheetNames: string[] = [] 
    sheets: any; 

    constructor(public emailComposer: EmailComposer, platform: Platform, public file: File) { 
    var objects = [["Header 1", "Header 2", "Header 3"], ["Value 1 1", "Value 1 2", "Value 1 3"], ["Value 2 1", "Value 2 2", "Value 2 3"]]; 

    platform.ready().then(() => { 
     console.log(cordova.file.externalCacheDirectory + "report.xlsx"); 
     this.createXSLX(objects); 
     this.sendEmail(cordova.file.externalCacheDirectory + "report.xlsx"); 
    }); 
    } 

    createXSLX(data: any) { 

    var pathFile = ""; 
    var fileName = "report.xlsx"; 
    let ws_name = "OrderDetails"; 

    let wb: XLSX.IWorkBook = { 
     SheetNames: [], 
     Sheets: {}, 
     Props: {} 

    }; 
    let ws = this.sheet_from_array_of_arrays(data, {}); 

    /* add worksheet to workbook */ 
    wb.SheetNames.push(ws_name); 
    wb.Sheets[ws_name] = ws; 
    let wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'binary' }); 

    let xslxBlob = new Blob([this.s2ab(wbout)], { type: "application/octet-stream" }); 
    pathFile = cordova.file.externalCacheDirectory; 
    this.file.writeFile(pathFile, fileName, xslxBlob); 
    }  

    sendEmail(data) {  
    this.emailComposer.isAvailable().then((available: boolean) => { 
     if (available) { 
     //Now we know we can send 
     } 
    }); 

    let email = { 
     to: '', 
     attachments: [data], 
     subject: 'XLSX File', 
     body: 'How are you? Nice greetings from Leipzig', 
     isHtml: true 
    }; 

    // Send a text message using default options 
    this.emailComposer.open(email); 
    } 


    datenum(v, date1904): any { 
    if (date1904) v += 1462; 
    let epoch: any = Date.parse(v); 
    return (epoch - new Date(Date.UTC(1899, 11, 30)).getTime())/(24 * 60 * 60 * 1000); 
    } 

    sheet_from_array_of_arrays(data, opts) { 
    let ws = {}; 
    let range = { s: { c: 10000000, r: 10000000 }, e: { c: 0, r: 0 } }; 
    for (let R = 0; R != data.length; ++R) { 
     for (let 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; 
     let cell: any = { v: data[R][C] }; 
     if (cell.v == null) continue; 
     let 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 = this.datenum(cell.v, null); 
     } 
     else cell.t = 's'; 

     ws[cell_ref] = cell; 
     } 
    } 
    if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range.s, range.e); 
    return ws; 
    } 

    s2ab(s) { 
    let buf = new ArrayBuffer(s.length); 
    let view = new Uint8Array(buf); 
    for (let i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; 
    return buf; 
    } 
} 
関連する問題