CourseFeed

How to give ChatGPT an Excel or CSV file, and why tables break

By David Ahn · Updated 11 October 2026

Spreadsheets look simple, but chatbots can misread them in ways that are hard to notice. How you send one depends on whether you want the chatbot to read the table or do math with it.

Reading a table or calculating with it?

Most spreadsheets on a course page are just for reading: a schedule, a marking rubric, a reading list, a small table of lab results to talk about. Turning those into a text table works well. The chatbot sees every cell as plain text, and so do you.

Calculating is a different story. Averages, charts, filtering a few hundred rows, a regression for a lab report: chatbots are unreliable when they do that arithmetic by reading numbers off a page of text. For calculations, upload the original .xlsx or .csv to a chatbot that can run code on it. Several can, depending on your plan. It then works with the actual numbers instead of reading them, and you can ask it to show the code or formula it used so you can check.

The rest of this guide is about the first case, getting a spreadsheet into a chatbot as text it can read properly.

What a converted spreadsheet looks like

Drop an .xlsx file into CourseFeed and each sheet becomes its own section, with the sheet name as a heading and the cells as a Markdown table. This is a test workbook with two sheets, cut short (the numbers are random test data):

# Source: grades.xlsx

## Grades
| Student | Quiz 1 | Quiz 2 | Final | Passed |
| --- | --- | --- | --- | --- |
| S001 | 51 | 45.8 | 75 | False |
| S002 | 67 | 92.7 | 93 | False |
...

## Schedule
| Week | Topic | Room |
| --- | --- | --- |
| 1 | Structure equilibrium binding. | B174 |
...

Every sheet is included, even hidden ones. The sheet names give you something to point at: "Using the Schedule sheet, which weeks are in room B260?"

A CSV file has no sheets, so it becomes one table, with the first row used as the column names. Accents and non-Latin characters come through fine, as in this test survey:

| id | name | comment | score |
| --- | --- | --- | --- |
| 1 | Mía | Catalyst receptor osmosis structure ... | 2 |
| 2 | Łukasz | Cell enzyme membrane pathway ... | 3 |
| 3 | 민준 | Binding cell function substrate ... | 3 |

Where tables break

Title rows and merged cells

The converter expects the column names in the first row. A lot of course spreadsheets start with a title merged across the top instead. This is what happened to a small test sheet with "Week 1 results" merged above the real headers:

| Week 1 results | Unnamed: 1 | Unnamed: 2 | Unnamed: 3 |
| --- | --- | --- | --- |
| Sample | Mass (g) | Volume (mL) | Density |
| A | 12.5 | 10 | NaN |

The title turned into the column names, and the real headers became a row of data. A chatbot can usually figure that out, but not always. Before converting, delete any rows above the headers and unmerge merged cells, so the sheet starts with one row of column names.

Empty cells show as NaN

An empty cell comes out as NaN, short for "not a number". Tell the chatbot what it means ("NaN means the cell was empty"), or it might treat it as a value or as a sign something went wrong.

You get values, not formulas

A formula cell comes out as the value the spreadsheet last saved, never the formula itself. If you want help understanding how a final mark is worked out, copy the formula from the formula bar into your message yourself. Files made by another program that were never opened and saved in a spreadsheet app might have no saved values at all, so their formula cells come out empty, like the Density column above.

Formatting is gone

The converter reads the number stored in each cell, not how it's displayed. A cell showing 25% comes out as 0.25. Currency symbols disappear. Dates look like 2026-09-14 00:00:00. Long decimals get rounded to six significant figures, so 0.1234567 becomes 0.123457. Whole numbers in a column that has decimals pick up a ".0", like the 78.0 in the Quiz 2 column of the test workbook. None of that matters for reading, but mention it if precision does.

Very wide tables

Each row of the table becomes one line of text. With 30 columns that's a long line, and chatbots start losing track of which value goes with which column, especially near the right-hand end. Delete the columns you don't need before converting, and keep the column that identifies each row (a name or an ID) first.

Very long tables

A few thousand rows takes up a lot of the chatbot's room, and it may skim instead of reading every row. Filter down to the rows you care about first, or upload the original file to a chatbot that can run code on it.

Several tables on one sheet

Two tables side by side, or one above the other, come out as one big table with gaps of NaN between them. Move each table to its own sheet so each one gets its own heading.

Charts and pictures

Only what's in the cells gets converted. Charts, images and comments don't. If a chart matters, attach a screenshot of it with the text.

CSV files with semicolons

In a lot of countries, spreadsheet apps save CSV files with semicolons between values instead of commas. The converter expects commas, so a semicolon file comes out as a single column with everything jammed together. Open it in a spreadsheet app, save it as .xlsx and convert that instead. Also make sure every column has a name in the first row, because values in columns without one get dropped.

Prompts that work with tables

Asking it to quote the rows it used makes misreadings easy to catch, since a value pinned to the wrong column shows up right away. And if it gives you a number it worked out from a text table, like a total or an average, check it in the spreadsheet before you rely on it.

Before you convert a spreadsheet

A spreadsheet can go in the same batch as the week's slides and readings. Combining files into one document covers that. If you're still picking a chatbot, ChatGPT, Claude, Gemini or NotebookLM compares how they handle files.

Convert your files