Need help with csv-writer?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

ryu1kn
160 Stars 24 Forks MIT License 176 Commits 10 Opened issues

Description

Convert objects/arrays into a CSV string or write them into a CSV file

Services available

!
?

Need anything else?

Contributors list

# 41,248
Haskell
vscode
vscode-...
Visual ...
155 commits
# 74,834
D
utf8
micro-l...
C
3 commits
# 277,842
JavaScr...
TypeScr...
Shell
CSV
1 commit
# 86,589
Google
C++
phantom...
Chrome
1 commit
# 350,050
Shell
CSV
npm-pac...
C
1 commit

Build Status Coverage Status Code Climate

CSV Writer

Convert objects/arrays into a CSV string or write them into a file. It respects RFC 4180 for the output CSV format.

Prerequisite

  • Node version 4 or above

Usage

The example below shows how you can write records defined as the array of objects into a file.

const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({
    path: 'path/to/file.csv',
    header: [
        {id: 'name', title: 'NAME'},
        {id: 'lang', title: 'LANGUAGE'}
    ]
});

const records = [ {name: 'Bob', lang: 'French, English'}, {name: 'Mary', lang: 'English'} ];

csvWriter.writeRecords(records) // returns a promise .then(() => { console.log('...Done'); });

// This will produce a file path/to/file.csv with following contents: // // NAME,LANGUAGE // Bob,"French, English" // Mary,English

You can keep writing records into the same file by calling

writeRecords
multiple times (but need to wait for the fulfillment of the
promise
of the previous
writeRecords
call).
// In an `async` function
await csvWriter.writeRecords(records1)
await csvWriter.writeRecords(records2)
...

However, if you need to keep writing large data to a certain file, you would want to create node's transform stream and use

CsvStringifier
, which is explained later, inside it , and pipe the stream into a file write stream.

If you don't want to write a header line, don't give

title
to header elements and just give field IDs as a string.
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({
    path: 'path/to/file.csv',
    header: ['name', 'lang']
});

If each record is defined as an array, use

createArrayCsvWriter
to get an
csvWriter
.
const createCsvWriter = require('csv-writer').createArrayCsvWriter;
const csvWriter = createCsvWriter({
    header: ['NAME', 'LANGUAGE'],
    path: 'path/to/file.csv'
});

const records = [ ['Bob', 'French, English'], ['Mary', 'English'] ];

csvWriter.writeRecords(records) // returns a promise .then(() => { console.log('...Done'); });

// This will produce a file path/to/file.csv with following contents: // // NAME,LANGUAGE // Bob,"French, English" // Mary,English

If you just want to get a CSV string but don't want to write into a file, you can use

createObjectCsvStringifier
(or
createArrayCsvStringifier
) to get an
csvStringifier
.
const createCsvStringifier = require('csv-writer').createObjectCsvStringifier;
const csvStringifier = createCsvStringifier({
    header: [
        {id: 'name', title: 'NAME'},
        {id: 'lang', title: 'LANGUAGE'}
    ]
});

const records = [ {name: 'Bob', lang: 'French, English'}, {name: 'Mary', lang: 'English'} ];

console.log(csvStringifier.getHeaderString()); // => 'NAME,LANGUAGE\n'

console.log(csvStringifier.stringifyRecords(records)); // => 'Bob,"French, English"\nMary,English\n'

API

createObjectCsvWriter(params)

Parameters:
  • params

    
    
    
    • path
      
      

    Path to a write file * header

    >

    Array of objects (

    id
    and
    title
    properties) or strings (field IDs). A header line will be written to the file only if given as an array of objects. * fieldDelimiter
     (optional)
    
    

    Default:

    ,
    . Only either comma
    ,
    or semicolon
    ;
    is allowed. * recordDelimiter
     (optional)
    
    

    Default:

    \n
    . Only either LF (
    \n
    ) or CRLF (
    \r\n
    ) is allowed. * headerIdDelimiter
     (optional)
    
    

    Default:

    undefined
    . Give this value to specify a path to a value in a nested object. * alwaysQuote
     (optional)
    
    

    Default:

    false
    . Set it to
    true
    to double-quote all fields regardless of their values. * encoding
     (optional)
    
    

    Default:

    utf8
    . * append
     (optional)
    
    

    Default:

    false
    . When
    true
    , it will append CSV records to the specified file. If the file doesn't exist, it will create one.

    NOTE: A header line will not be written to the file if

    true
    is given.
Returns:

createArrayCsvWriter(params)

Parameters:
  • params

    
    
    
    • path
      
      

    Path to a write file * header

    >
    (optional)

    Array of field titles * fieldDelimiter

     (optional)
    
    

    Default:

    ,
    . Only either comma
    ,
    or semicolon
    ;
    is allowed. * recordDelimiter
     (optional)
    
    

    Default:

    \n
    . Only either LF (
    \n
    ) or CRLF (
    \r\n
    ) is allowed. * alwaysQuote
     (optional)
    
    

    Default:

    false
    . Set it to
    true
    to double-quote all fields regardless of their values. * encoding
     (optional)
    
    

    Default:

    utf8
    . * append
     (optional)
    
    

    Default:

    false
    . When
    true
    , it will append CSV records to the specified file. If the file doesn't exist, it will create one.

    NOTE: A header line will not be written to the file if

    true
    is given.
Returns:

CsvWriter#writeRecords(records)

Parameters:
  • records

    >

    Depending on which function was used to create a

    csvWriter
    (i.e.
    createObjectCsvWriter
    or
    createArrayCsvWriter
    ), records will be either a collection of objects or arrays. As long as the collection is iterable, it doesn't need to be an array.
Returns:

createObjectCsvStringifier(params)

Parameters:
  • params

    
    
    
    • header
      >

    Array of objects (

    id
    and
    title
    properties) or strings (field IDs) * fieldDelimiter
     (optional)
    
    

    Default:

    ,
    . Only either comma
    ,
    or semicolon
    ;
    is allowed. * recordDelimiter
     (optional)
    
    

    Default:

    \n
    . Only either LF (
    \n
    ) or CRLF (
    \r\n
    ) is allowed. * headerIdDelimiter
     (optional)
    
    

    Default:

    undefined
    . Give this value to specify a path to a value in a nested object. * alwaysQuote
     (optional)
    
    

    Default:

    false
    . Set it to
    true
    to double-quote all fields regardless of their values.
Returns:

ObjectCsvStringifier#getHeaderString()

Returns:

ObjectCsvStringifier#stringifyRecords(records)

Parameters:
  • records
    >
Returns:

createArrayCsvStringifier(params)

Parameters:
  • params

    
    
    
    • header
      >
      (optional)

    Array of field titles * fieldDelimiter

     (optional)
    
    

    Default:

    ,
    . Only either comma
    ,
    or semicolon
    ;
    is allowed. * recordDelimiter
     (optional)
    
    

    Default:

    \n
    . Only either LF (
    \n
    ) or CRLF (
    \r\n
    ) is allowed. * alwaysQuote
     (optional)
    
    

    Default:

    false
    . Set it to
    true
    to double-quote all fields regardless of their values.
Returns:

ArrayCsvStringifier#getHeaderString()

Returns:

ArrayCsvStringifier#stringifyRecords(records)

Parameters:
  • records
    >>
Returns:

Request Features or Report Bugs

Feature requests and bug reports are very welcome: https://github.com/ryu1kn/csv-writer/issues

A couple of requests from me when you raise an issue on GitHub.

  • Requesting a feature: Please try to provide the context of why you want the feature. Such as, in what situation the feature could help you and how, or how the lack of the feature is causing an inconvenience to you. I can't start thinking of introducing it until I understand how it helps you 🙂
  • Reporting a bug: If you could provide a runnable code snippet that reproduces the bug, it would be very helpful!

Development

Prerequisite

  • Node version 8 or above
  • Docker

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.