coddingtonbear / obsidian-csv-table

Have a CSV file you want to render some or all of the data from? This plugin allows you to display that data in your obsidian preview.
MIT License
113 stars 5 forks source link

Obsidian CSV Table

Have data in a CSV file that you'd like to render as a table in Obsidian? Now you can.

Quickstart

Imagine you have the following CSV file named countries.csv:

name,capitol,population
United States of America,"Washington, DC",328200000
Colombia,Bogota,50340000
Russia,Moscow,144400000

The following code block:

```csvtable
source: countries.csv
```

will render a table like:

name capitol population
United States of America Washington, DC 328200000
Colombia Bogota 50340000
Russia Moscow 144400000

Options

Expressions

This library uses filtrex for expression evaluation; see their documentation to see more information about the expression syntax and what functions are available: https://github.com/m93a/filtrex#expressions.

See "Filtering displayed rows" for an example of a filter expression in action, but realistically they work exactly as you'd probably expect.

Selecting particular columns

You can use the columns field to control which columns of your CSV file to render, e.g:

```csvtable
columns:
- name
- population
source: my_csv_file.csv
```
name population
United States of America 328200000
Colombia 50340000
Russia 144400000

It's also possible for you to set better names for your columns or use expressions:

```csvtable
columns:
- expression: name
  name: Country Name
- expression: population  / 1000000
  name: Population (Millions)
source: my_csv_file.csv
```
Country Name Population (Millions)
United States of America 328.2
Colombia 50.34
Russia 144.4

Filtering displayed rows

Maybe you would like to display only a subset of the rows of your CSV? If so, you can provide a filter expression to limit which rows are shown:

```csvtable
source: my_csv_file.csv
filter: population < 100000000
```
name population
Colombia 50340000

By default, the parser will attempt to cast the values of each field to an integer, boolean, or date object where appropriate for use in your filter expressions. Also, note that your filter expression can also be provided as a list; those expressions will be and-ed together, e.g.:

```csvtable
source: my_csv_file.csv
filter:
- population < 100000000
- name == "Colombia"
```

Note that the filtering language requires that you use double-quoted strings in comparisons -- if you had entered name == 'Colombia' above, the filter would not have returned results.

Sorting Rows

If you would like to sort the rows of your displayed CSV, you can provide a sort expression:

```csvtable
source: my_csv_file.csv
sortBy: name
```
name population
Colombia 50340000
Russia 144400000
United States of America 328200000

Additionally, you can specify your sortBy expression as a list; the document will be sorted by all specified fields in rank order:

```csvtable
source: my_csv_file.csv
sortBy:
- columnOne
- columnTwo
```

It's also possible for you to sort your displayed data in reverse order if you specify your sortBy expression using an extended format allowing you to specify both the expression and direction of sort:

```csvtable
source: my_csv_file.csv
sortBy:
- expression: name
  reversed: true
```
name population
United States of America 328200000
Russia 144400000
Colombia 50340000