Nxaniso lowu a wu kumeki hi ririmi ra wena sweswi, hikwalaho wu kombisiwa hi Xinghezi.
How to Translate an Excel Spreadsheet Without Breaking Formulas or Dropdowns
Find the text a cell-by-cell translator skips in an .xlsx (formula text, rich text, links, charts, macros), fix the dropdowns and codes it can break, and check the result with a free script and a test workbook.

BookTranslator Team

To translate a whole Excel workbook, upload the .xlsx file to a document translator instead of translating cells one at a time. Excel's own Review > Translate command works on the text you select (Microsoft Support), which is fine for a label and slow for a price list. A file translator reads every text cell, translates it, and writes it back to the same address, so formulas, numbers, and dates stay where they were.
What it does not tell you is which text it never read. Text typed inside a formula, a cell with one bold word, a link, a note, a chart title: in a cell-by-cell translation, all of these can come back in the original language. And two things can break: a dropdown whose allowed values were not translated, and a product code that was.
We built a two-sheet test workbook with text in each of those places, wrote a free checker that lists where the text lives, and ran the workbook through a local reproduction of the spreadsheet handling BookTranslator uses. This guide shows what came back, what to change before you upload, and how to check the translated file.
Quick Answer: What Gets Translated in a Workbook
| Where the text is | Example from our test | Translated by BookTranslator? | What to do |
|---|---|---|---|
| Plain text cells, including header rows | "Blue notebook", "Price" | Yes | Nothing |
| Numbers, dates, booleans | 4.5, 2026-10-30 | Left as they were | Check number formats for the target market |
| Formulas | =C2*D2 | Left as they were | Nothing |
| Text inside a formula | =IF(D2>5,"In stock","Low stock") | No | Move the words into cells (see Step 2) |
| Cell with mixed formatting | "Limited edition pen" | No, the whole cell is skipped | Clear the formatting first, or translate it by hand |
| Hyperlink cells | "Product page" | No | Edit the link text after translation |
| Value inside a dropdown cell | "Stationery" | Yes, but the dropdown list is not | Fix the list, or the cell is no longer valid |
| Codes with letters | "A-77", "B-09" | Sent to the translator | Check them after translation |
| Codes with only digits or symbols | "00123" | Left as they were | Nothing |
| Notes and comments | "Check supplier name before release" | No | Translate by hand, or delete them |
| Sheet names and named ranges | "Products", PriceRange | No, so cross-sheet formulas keep working | Rename sheets by hand only if you must, after checking formulas |
| Charts and macros | A bar chart, a VBA project | Removed from the translated file in our test | Keep the original, rebuild after (see below) |
Older .xls files are not accepted. Open them in Excel and save as .xlsx first. Macro-enabled .xlsm files are accepted, but read the macros section before you upload one: the translated file has no macros, and if the download still ends in .xlsm, rename it to .xlsx before opening it.
Step 1: Run the Checker on Your Workbook
Download check_xlsx_text.py and run it on your file:
python3 check_xlsx_text.py "Price list.xlsx"
It needs only Python 3 and reads the file without changing it. Here is the summary for our sample workbook:
Counts by location:
cell code, ID or address 2
cell link text 1
cell mixed formatting 1
cell plain text 15
comments comment or note text 1
dropdown list of allowed values 1
formula text text inside a formula 6
sheet sheet name 2
workbook defined name 1
Plain text cells (translated by a cell-by-cell translator): 15
Items that need a decision before you upload: 12
Below the counts, it lists each item with its sheet and cell, such as Products!E2 formula text 'In stock'. Use that list as your to-do list for Step 2. If your workbook has charts, text boxes, pivot tables, or a macro project, they show up in the counts too.
The README describes the sample workbook, lists file hashes, and links the scripts that build it, so you can repeat the test.
What Happened to Our Test Workbook
We ran the sample workbook through the code that BookTranslator's spreadsheet handler uses, reproduced locally on 2026-11-01 with the same library (ExcelJS 4.4.0). Instead of a real translation, we used a placeholder that adds "[DE]" in front of each cell's text. That keeps the language model out of the test, so the results show only what the file handling sends, keeps, and drops.
The handler reads each sheet cell by cell. It sends a cell for translation only if the cell holds a plain text value, and skips any text made only of digits, punctuation, and symbols. Everything else in the cell grid is copied unchanged. BookTranslator then returns two files: a translated workbook and a bilingual workbook.
The translated workbook
This is the file to use. All 6 formulas, 7 numbers and dates, the currency and date formats, the merged cells, the note, the dropdown rule, and the named range came back unchanged. The 9 header cells and the other plain text cells were translated in place. Three results need attention:
Text inside formulas stays in the source language. The Status column used =IF(D2>5,"In stock","Low stock"). A formula is not a text cell, so the handler never reads it, and "In stock" stays in English in every row. The same applies to text joined with & or CONCAT, and to text inside HYPERLINK.
A translated dropdown value no longer matches its list. Cell H2 had a dropdown that allowed "Stationery, Office, Art". The cell's value was translated, but the list is stored in the validation rule, not in a cell, so it was not. Our checker's compare mode reported it like this:
Problems: 3
Products!A3: code changed: 'A-77' -> '[DE] A-77'
Products!A4: code changed: 'B-09' -> '[DE] B-09'
Products!H2: '[DE] Stationery' is not in its dropdown list ['Art', 'Office', 'Stationery']
Excel keeps a value that breaks its validation rule, but the next person to open the dropdown sees only the old choices, and Data > Circle Invalid Data will flag the cell.
Codes with letters are sent to the translator. "00123" was skipped because it holds only digits. "A-77" and "B-09" were sent, because they contain a letter. Whether a code comes back unchanged then depends on the model; nothing in the file handling protects it. A SKU that comes back as "A-77-Artikel" breaks every lookup that uses it.
The bilingual workbook
The bilingual file inserts a translation column to the right of every column that had at least one translated cell, with headers such as "Name (Translated)". It moves cell values to their new columns, but it does not move cell formats or update formulas. In our test:
- the price format
$#,##0.00stayed in column C, which now holds product names, while the prices moved to column E without it; - the date format stayed in column G, which now holds the quantity, so a quantity of 10 displayed as a date;
=C2*D2moved to column K but still pointed at C2 and D2, which now hold the product name and its translation, so it can no longer return 45;- on the Summary sheet,
=SUM(Products!F2:F4)now added up an empty translation column.
So the bilingual workbook is for reading the source and the translation side by side, not for calculating. Do not edit it or copy formulas out of it.
Charts and macros
In a separate copy of the workbook, we added a chart and a macro project, stored the way Excel stores them. Neither one was in the translated or the bilingual file. ExcelJS reads and writes worksheets, styles, shared text, pictures, tables, and comments, and has no code for chart parts or the VBA project, so it leaves them out when it saves. The same code has nothing for pivot tables, so expect pivot tables to be dropped too, although we did not test one. The handler also saves its output as an .xlsx file, which cannot hold macros.
One more limit of the test: we built the sample workbook with ExcelJS itself, which is the friendliest case for keeping formats, merges, and validation rules. A workbook saved by Excel can contain features ExcelJS does not model, so run the compare step below on your own file rather than assuming the same clean result.
Step 2: Prepare the Workbook Before You Upload
Work on a copy. The checker tells you which cells to change.
- Move formula text into cells. Put the words in a small "Labels" sheet and point the formula at them:
=IF(D2>5,Labels!$A$1,Labels!$A$2). The label cells are plain text, so they get translated, and every formula picks up the translation. This one change usually fixes most of the "formula text" count, because the same phrase tends to repeat down a whole column. - Move dropdown lists into cells. In Data > Data Validation, change the Source from a typed list (
Stationery,Office,Art) to a range on the Labels sheet (=Labels!$B$1:$B$3). The list values then get translated along with the cells that use them. Check a few cells afterward: the dropdown only accepts the translated value if the model translated "Stationery" the same way in both places. - Clear mixed formatting. A cell with one bold or colored word is stored as formatted runs and skipped entirely. Select the cell and choose Home > Clear > Clear Formats, or retype it, then reapply the bold after translation. If you have many of these, note them down first.
- Decide what to do with notes and comments. They are not translated. Delete review notes you do not want sent to a translation service, and translate the rest by hand.
- Save macro workbooks as
.xlsx. Keep your.xlsmas the master. Translate an.xlsxcopy, then either copy the translated text columns back into the master (Paste Special > Values, text columns only, so you do not overwrite formulas) or export the VBA modules and import them into the translated file. - Leave charts for later. A chart has little text: a title, axis titles, and a legend that usually comes from header cells. It is often quicker to rebuild the chart in the translated workbook from the same ranges, or to paste the translated text columns back into the original workbook so its charts and pivot tables update themselves.
Step 3: Translate the Whole File
Upload the .xlsx on the document translator page, choose the target language, and check the price shown before you pay. A whole-file upload translates every text cell on every sheet in one task, which makes it easier to keep a product name the same in row 3 and row 3,000. Our guide to building a translation glossary explains how to pin down terms that must not vary.
When the task finishes, the History page offers both downloads. Use the translated workbook. Open the bilingual workbook only to review wording with someone who reads both languages.
If you work in Google Sheets, there are two other routes. Google Translate's Documents tab accepts .xlsx files up to 10 MB (Google Translate Help); our Google Docs translation guide compares its options. And Sheets has a GOOGLETRANSLATE(text, source_language, target_language) function (Google Docs Editors Help) that you can fill down a new column next to the source. That is convenient for one column of short labels, but the results are formulas, so paste them as values before you share the sheet. DeepL also translates documents; see what its document limits mean in practice. Whatever you use, run the checker on the source first: text inside formulas, links, and charts sits in the same places no matter which tool reads the file.
Step 4: Check the Translated Workbook
-
Run the compare mode. Put the source and the translated file side by side:
python3 check_xlsx_text.py --compare "Price list.xlsx" "Price list (translated).xlsx"It checks that every formula, number, and date is unchanged, that codes with letters came back exactly as they were, and that every dropdown value is in its list. Use it on the translated workbook only. Because the bilingual file shifts columns, nearly every cell would be reported.
-
Recalculate. If a formula still shows the old text after you fixed the labels, press F9 (or Formulas > Calculate Now).
-
Translate the leftovers. Use the checker's list from Step 1: link text, notes, chart titles, and any cells you cleared of formatting.
-
Look for cut-off text. Translations are often longer than the source, and short strings grow the most. The W3C cites IBM guidelines that put the average expansion from English into European languages at 200β300% for text up to 10 characters (W3C). Column headers are short, so widen columns or turn on Wrap Text where they get cut off.
-
Check number and date display. The values were not touched, but "4.50" may need to show as "4,50" for a German reader. That is a cell format or a regional setting, not a translation.
-
Do not "fix" function names. If a colleague's French Excel shows
SOMMEinstead ofSUM, that is Excel displaying its own localized function names; the formula is the same. -
Set right-to-left sheets. For Arabic, Hebrew, Persian, or Urdu, turn on Page Layout > Sheet Right-to-Left and check cell alignment.
-
Have a fluent reader review it if it goes to customers, such as a price list or a product catalog. A machine translation is a good first draft, not a final one.
CSV and TSV Files
A .csv file has no formulas, formats, or dropdowns, so most of the problems above disappear. Three things are different:
- The header row is not translated. The handler treats the first row as headers and translates data rows only. Translate the headers by hand, or copy them into a data row before uploading and move them back afterward.
- A column is translated as a whole. If any cell in a column has a letter in it, every cell in that column that has a letter in it is sent, codes included. The compare mode reads only
.xlsx, so check a CSV code column by hand: copy it from both files into one sheet and compare the two columns with=EXACT(A2,B2). - A CSV comes back comma-separated. Whatever delimiter the source used, the translated CSV uses commas; a
.tsvfile keeps its tabs. In our test, a semicolon-separated CSV came back separated by commas, with decimal commas such as "4,50" kept inside quotes. The file is UTF-8 without a byte order mark. Microsoft says Excel opens a UTF-8 CSV normally when it has that mark, and otherwise recommends importing it with Data > Get Data > From Text/CSV (Microsoft Support). If you double-click the file and see garbled accents, import it that way instead.
If your data lives in a workbook with formulas, translate the .xlsx. Exporting to CSV to translate it throws away every formula.
Common Problems
| Problem | Likely cause | What to do |
|---|---|---|
| A whole column still says "In stock" | The words are inside an IF formula | Move them to label cells and point the formula at them |
| A dropdown rejects the translated value | The allowed values are typed into the validation rule | Change the rule's Source to a cell range and translate the range |
| A product code changed | It contains letters, so it was sent to the translator | Fix it from the source; run the compare mode on every delivery |
| One cell was not translated at all | It has mixed formatting, or it is a link | Clear the formatting or edit the link text, then retranslate or fix by hand |
| The chart or the macros are gone | The library used to rewrite the file does not save them | Translate an .xlsx copy and move the translated text back into the original |
| Totals are wrong in the bilingual file | Its added columns shift values but not formulas or formats | Use the translated workbook for any calculation |
| Accents look garbled in a translated CSV | Excel guessed the wrong encoding | Import it with Data > Get Data > From Text/CSV |
| The upload is refused | The file is .xls, or it needs a password to open | Save it as a normal .xlsx without an open password (sheet protection alone is fine) |
The same idea applies to slides: a PowerPoint deck also keeps text in places a translator skips, and the checker for that article works the same way as this one.
Matsalwa lama fambelanaka




