18

私はExcelファイルを作成するためにexceljsモジュールを使用しています。問題は、パスに作成も保存もされていないことです。

var excel = require('exceljs');
var options = {
    filename: './streamed-workbook.xlsx',
    useStyles: true,
    useSharedStrings: true
};

var workbook = new Excel.stream.xlsx.WorkbookWriter(options);
var sheet = 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: 'John Doe', dob: new Date(1970,1,1)});
worksheet.addRow({id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)});
worksheet.commit();

workbook.commit().then(function(){
    console.log('xls file is written.');
});

しかし、コードを実行しても何も起こりません。エクセルは作成していません。ここで何が欠けていますか?

*********************** 編集 **************************コードに次の変更を加えましたが、まだ機能していません。

        var Excel = require('exceljs');
        var 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: 'John Doe', dob: new Date(1970,1,1)});
        worksheet.addRow({id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)});
        workbook.commit();
        workbook.xlsx.writeFile('./temp.xlsx').then(function() {
            // done
            console.log('file is written');
        });
4

6 に答える 6

8

そのため、workbook.commit() が原因でエラーが発生していることがわかりました。コミットを削除すると、すべてが魅力的に機能し始めました。以下は、Excel ファイルを作成およびダウンロードする作業コード全体です。

注: tempfileという npm モジュールを使用して、作成された Excel ファイルの一時ファイル パスを作成しています。このファイル パスは自動的に削除されます。お役に立てれば。

try {
        var 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: 'John Doe', dob: new Date(1970,1,1)});
        worksheet.addRow({id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)});

        var tempFilePath = tempfile('.xlsx');
        workbook.xlsx.writeFile(tempFilePath).then(function() {
            console.log('file is written');
            res.sendFile(tempFilePath, function(err){
                console.log('---------- error downloading file: ' + err);
            });
        });
    } catch(err) {
        console.log('OOOOOOO this is the error: ' + err);
    }
于 2016-09-25T10:15:46.813 に答える
0

コードに誤りがあります。

My Sheet を 1 つの変数で宣言し、コード全体で別の変数を使用しています。

var sheet = workbook.addWorksheet('My Sheet');

worksheet .columns = [ { ヘッダー: 'ID', キー: 'ID', 幅: 10 }, { ヘッダー: '名前', キー: '名前', 幅: 32 }, { ヘッダー: 'DOB', キー: 'DOB'、幅: 10 } ];

worksheet .addRow({id: 1, name: 'John Doe', dob: new Date(1970,1,1)});

worksheet .addRow({id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)});

ワークシート.commit();

変数SheetWorksheetに変更します。以下のコードのように

var worksheet = workbook.addWorksheet('My Sheet');

worksheet .columns = [ { ヘッダー: 'ID', キー: 'ID', 幅: 10 }, { ヘッダー: '名前', キー: '名前', 幅: 32 }, { ヘッダー: 'DOB', キー: 'DOB'、幅: 10 } ];

worksheet .addRow({id: 1, name: 'John Doe', dob: new Date(1970,1,1)});

worksheet .addRow({id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)});

ワークシート.commit();

これで問題が解決するはずです。ありがとう

于 2016-07-14T12:41:01.450 に答える
0
var excel = require("exceljs");
var workbook1 = new excel.Workbook();
workbook1.creator = 'Me';
workbook1.lastModifiedBy = 'Me';
workbook1.created = new Date();
workbook1.modified = new Date();
var sheet1 = workbook1.addWorksheet('Sheet1');
var reHeader=['FirstName','LastName','Other Name'];
var reColumns=[
    {header:'FirstName',key:'firstname'},
    {header:'LastName',key:'lastname'},
    {header:'Other Name',key:'othername'}
];
sheet1.columns = reColumns;
workbook1.xlsx.writeFile("./uploads/error.xlsx").then(function() {
    console.log("xlsx file is written.");
});

これにより、アップロード フォルダーに xlsx ファイルが作成されます。

于 2016-08-31T06:39:23.357 に答える