Blog
Back to Blog

Converting RDML Files to Excel for Custom Analysis

Most qPCR instruments export RDML files by default, but most analysis happens in Excel, R, or Python. Converting RDML to a flat spreadsheet format is the bridge between the two — and it's more straightforward than the XML soup inside those files would suggest. Here's how to do it without losing the metadata that makes your data interpretable.

RDML (Real-Time PCR Data Markup Language) is an XML-based standard designed to store everything from your cycling protocol and sample annotations to raw fluorescence readings and Cq values. The problem is that Excel can't natively parse it in any useful way, and the instrument-specific export options (looking at you, QuantStudio's .eds → .xlsx workflow) often strip out half the fields or dump them into a format that requires manual cleanup. The good news: there are reliable tools and approaches that give you a clean spreadsheet with all the data you actually need.

What's Actually Inside an RDML File

Before you convert anything, it helps to know what you're extracting. An RDML file (.rdml is really just a renamed .zip archive containing XML) stores data in a hierarchical structure:

The most common mistake in conversion is extracting only the Cq column and losing sample type annotations. Then three weeks later you're staring at a spreadsheet where wells A1-A3 say "Sample_1" and you have no idea if those were your NTCs or your treated condition. Export everything. You can always drop columns later.

Method 1: RDML-LinRegPCR and the RDML Python Package

The most robust open-source route is the rdmlpython package, which is also the engine behind the RDML-LinRegPCR web tools maintained by the Ruijter lab (the same group behind LinRegPCR — Ruijter et al., 2009).

Using the web tool (no code required):

  1. Go to the RDML-Tools site (gear-genomics.com/rdml-tools/).
  2. Upload your .rdml file.
  3. Use the "Table" view to inspect the data — it renders sample names, targets, Cq values, and well positions in a tabular format.
  4. Export as CSV or copy-paste into Excel.

This works for quick one-off conversions, but it's cumbersome if you have 30 plates from a time-course experiment.

Using the Python package (for batch processing):

import rdmlpython as rdml
import pandas as pd

doc = rdml.Rdml("your_file.rdml")
experiments = doc.experiments()

rows = []
for exp in experiments:
    for run in exp.runs():
        for react in run.reacts():
            well = react["id"]
            for data in react.datas():
                rows.append({
                    "well": well,
                    "sample": data["sample"],
                    "target": data["target"],
                    "cq": data.get("cq", None),
                    "sample_type": data.get("type", "unkn"),
                })

df = pd.DataFrame(rows)
df.to_excel("qpcr_results.xlsx", index=False)

The exact API depends on your rdmlpython version — check the docs — but the logic is the same: iterate over reactions, pull per-well per-target data, flatten into rows, write to .xlsx. If you need the raw fluorescence curves (for custom baseline correction or efficiency estimation), those are accessible through the adps (amplification data points) attribute on each data element, giving you cycle number and fluorescence pairs.

This approach works for files from any RDML-compliant instrument: Bio-Rad CFX96/Opus, Roche LightCycler 480, Qiagen Rotor-Gene Q, and Applied Biosystems QuantStudio systems (when exported as RDML rather than .eds).

Method 2: Instrument Software Export (With Caveats)

Every major platform has its own export-to-Excel option. These work fine for simple experiments, but each has quirks you should know about:

QuantStudio (Design & Analysis or CDF): Export → Results → .xlsx gives you a usable spreadsheet, but the default layout puts metadata in separate tabs from Ct values. The "Results" tab has well position, sample name, target name, Ct, Ct Mean, and ΔCt if you configured the analysis. The fluorescence data lives on the "Amplification Data" tab with cycle-by-cycle values in a long format. Main annoyance: "Undetermined" wells show as text strings rather than blank or NA, which breaks numeric operations in Excel until you find-and-replace them.

CFX Maestro (Bio-Rad): Export → Custom Export is actually pretty flexible. You can select exactly which columns to include (Cq, starting quantity, end RFU, melt peak temperatures) and export as .csv. The catch is that Bio-Rad's .zpcr files aren't RDML by default — you need to explicitly "Export RDML" from the file menu. If you're working with the native .zpcr format, your best bet is CFX Maestro's built-in export.

LightCycler 480: The LC480 software exports .txt files (tab-delimited) that open cleanly in Excel. The Abs Quant/2nd Derivative Max analysis gives you Cp values (Roche's terminology for Cq). RDML export is available under the "LC480 Conversion" tab. One thing to watch: if you used the multi-color compensation feature, make sure the exported data reflects the compensated values, not raw.

Rotor-Gene Q: Exports .csv natively from the quantitation results table. Clean and simple. RDML export is also supported.

The instrument-software route is fine for single plates. It falls apart when you need to merge data from multiple runs — you'll end up with dozens of spreadsheets that need to be standardized and concatenated. That's where the programmatic RDML approach or a dedicated analysis tool saves you hours.

Structuring Your Excel File for Downstream Analysis

However you get your data into Excel, the final format matters. A clean qPCR spreadsheet for analysis should be in long (tidy) format — one row per well per target, with columns for:

Well Sample Target Sample_Type Cq Bio_Rep Tech_Rep
A1 Control_1 GAPDH unkn 18.42 1 1
A2 Control_1 GAPDH unkn 18.38 1 2
A3 Control_1 GAPDH unkn 18.51 1 3
A4 Control_1 MYC unkn 24.87 1 1

A few structural points that will save you pain later:

If you're calculating ΔΔCt (Livak & Schmittgen, 2001) in Excel, your formulas are simpler with tidy data: AVERAGEIFS to get mean Cq per sample-target combination, subtraction for ΔCt (GOI − reference), subtraction again for ΔΔCt (treated ΔCt − control ΔCt), then POWER(2, -ΔΔCt) for fold change. Run your statistics (t-tests, ANOVA) on the ΔCt values, not the fold changes — fold changes are asymmetric and non-normally distributed.

When Excel Isn't Enough

Excel handles simple pairwise comparisons and standard ΔΔCt fine. It starts to strain when you're dealing with:

For these cases, R (with packages like pcr, HTqPCR, or tidyqpcr), Python, or a dedicated tool will be more reliable than a sprawling Excel workbook with nested IF statements.

If you want to skip the file-format wrangling entirely, VoilaPCR accepts RDML files directly — along with Excel and CSV exports from all major instruments — runs QC checks, handles multi-reference normalization, and gives you publication-ready fold changes and statistics without the intermediate conversion step.