node-csv icon indicating copy to clipboard operation
node-csv copied to clipboard

Add an optional callback to ColumnOptions to allow custom formatting at the column level

Open RonnBlack opened this issue 3 years ago • 1 comments

Summary

Add an optional callback function to the ColumnOptions object that can be used to perform custom formatting or additional processing of a specific columns.

Motivation

Of of the box csv-stringify only supports formatting by data type. This does not allow different formats for different types of columns. For example a column that contain dates as opposed to a column that is a date-time. The same situation occurs when you have a output that requires both numbers and currencies.

Alternative

I am currently constructing an array of functions that are applied in a ForEach() to the rows of the original input.

stringify(
          rows.map(row => {
            this.formatters?.forEach( fmt => fmt(row) );
            return row;
          }),
          {
            header: addHeader,
            columns: this.columns
          }
)

A working Sample is here: https://stackblitz.com/edit/typescript-column-format-ks3cs3?file=report-utils/csv-utils.ts

Draft

stringify(
      testData,
      {
        header: true,
        columns: [
          {key:'strVal', header: 'String'},
          {key:'dVal', header: 'Date', (value) => { return value.LocaleDateString(); }},
          {key:'dtVal', header: 'Date Time', (value) => { return `${value.toLocaleDateString()} ${value.toLocaleTimeString()}` }},
          {key:'currVal', header: 'Currency', (value) => { return value.toFixed(2); }}
        ]
)

Additional context

Add any other context or screenshots about the feature request here.

RonnBlack avatar Feb 09 '22 20:02 RonnBlack

It seems reasonable, I'll start looking into it.

wdavidw avatar Feb 10 '22 12:02 wdavidw