Table Share

How to Share CSV Files Online (No Email, No Signup)

ยท Updated ยท 5 min read

The honest framing

Most CSV files don't need to be files. They need to be a URL you can paste into Slack. The file format is a vehicle for the table inside it, and once the recipient opens it, the file goes to their Downloads folder and dies there.

This post covers four specific workflows I use to skip the file step entirely: from pandas, from R, from jq output, and from Excel's "Save As". The destination in all of them is the same โ€” a paste box at table-share.org that turns a clipboard buffer into a shareable HTML table.

Why email attachments lose

The defaults of email attachments and chat file-uploads create six small frictions that compound:

None of these is individually disqualifying. Stacked, they're why people screenshot CSVs into Slack instead of attaching them.

Four workflows that skip the file

pandas (Python)

If you live in a Jupyter notebook, you already know to_csv writes a file. The trick is to write to the clipboard instead:

import pandas as pd

df = pd.read_sql("SELECT * FROM orders LIMIT 200", conn)
df.to_clipboard(index=False)   # default sep is tab, perfect for paste

The clipboard now contains tab-separated values that Table Share's parser autodetects. Paste, get link, share. The headers come along automatically.

If to_clipboard errors with a missing dependency, install pyperclip (or, on Linux, xclip).

R

R's clipboard write is a one-liner:

write.table(df, "clipboard", sep="\t", row.names=FALSE)

On macOS the equivalent uses pipe("pbcopy") instead of "clipboard". On Linux, route through xclip -selection clipboard.

Command-line JSON to CSV (jq)

If you're staring at a JSON API response and just want the table version of it, jq can flatten and pipe straight to clipboard:

curl -s api.example.com/orders \
  | jq -r '(.[0] | keys_unsorted), (.[] | [.[]]) | @tsv' \
  | clip

That emits headers from the first object's keys, then every row as tab-separated values. Substitute pbcopy on macOS or xclip -selection clipboard on Linux.

Excel / Sheets "Save As" you don't actually need

Most people exporting to CSV from Excel do it as an intermediate step. Skip it: select your data range, copy, paste into table-share.org directly. Excel's clipboard format is tab-separated and the parser handles it the same way as a CSV file. You only need an actual .csv on disk if a downstream tool requires the file format itself.

CSV edge cases that bite

CSV is informally specified โ€” RFC 4180 exists but nobody fully follows it. The four edge cases that come up most:

1. Encoding

UTF-8 is the only sane default. Windows tools that emit UTF-16 or ANSI cause mojibake on the receiving end. If your CSV opens with garbled characters, check encoding before blaming the parser. Excel will sometimes write a byte-order mark (BOM) โ€” Table Share strips it on parse.

2. Line endings

Windows tools write CRLF (\r\n). Unix tools write LF (\n). PapaParse handles both. Mixed line endings in the same file (an editor accidentally saved with both) usually still parse, but row counts can drift on the boundary.

3. Quoted fields with commas inside

The classic. "Smith, John" is one cell only when the field is quoted. Most exports do this correctly. The pretty-print formats from database REPLs do not โ€” they use box-drawing characters that aren't valid CSV at all.

4. Formula injection

A cell starting with =, +, -, or @ executes as a formula when the recipient opens the CSV in Excel. Reference: OWASP CSV Injection. Table Share prefixes any such cell with a single quote when displaying or downloading, neutralizing the attack.

Side-by-side: file vs link

Concern Email attachment Table Share link
View on mobile Open file โ†’ spreadsheet app Tap link, see table
Search a value Spreadsheet app's Find Ctrl+F in browser
Copy a single cell Open file, select, copy Click and drag
Lifetime Forever in inbox + their disk Auto-expires (7d free, up to 90d Pro)
Forwarding Re-attach file Forward the link
Schema change since send Cached old version everywhere Generate a new link

What this isn't for

Try it

Open your terminal, run pandas.DataFrame.to_clipboard() or any of the workflows above, then paste at table-share.org. Five seconds from script output to shareable link.

Share a CSV โ†’

Related