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:
- Sample definitions: sample names, sample types (unknown, standard, NTC, NRT, positive control)
- Target definitions: gene/assay names, dye assignments (FAM, SYBR, VIC, ROX)
- Experiment and run metadata: instrument name, operator, date, thermal cycling protocol
- React data: per-well information including sample-target linkage, Cq values (with quantification method noted), and raw or baseline-corrected fluorescence at each cycle
- Melt curve data: temperature-fluorescence pairs if a dissociation step was included
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):
- Go to the RDML-Tools site (gear-genomics.com/rdml-tools/).
- Upload your .rdml file.
- Use the "Table" view to inspect the data — it renders sample names, targets, Cq values, and well positions in a tabular format.
- 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:
- Keep NTCs and controls in the table, flagged by Sample_Type. Don't delete them pre-analysis. You need them for QC checks (NTC Cq should be >5 cycles above your lowest sample Cq, or absent entirely).
- Add biological and technical replicate columns explicitly. Most instrument software doesn't distinguish between them — it just calls everything a "replicate." You need to know whether wells A1-A3 are three pipettings of the same cDNA (technical) or three independent RNA extractions (biological), because you average technical replicates before statistical testing but treat biological replicates as your n.
- Use consistent naming. "GAPDH," "Gapdh," and "gapdh" are three different targets to a pivot table. Decide on a convention and apply it before analysis.
- Store Cq as numbers, not text. This sounds obvious, but "Undetermined" or "N/A" strings from instrument exports will silently convert an entire column to text format in Excel. Replace these with blank cells or a numeric placeholder you filter out.
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:
- Multiple reference genes and need to calculate a geometric mean normalization factor (Vandesompele et al., 2002 — the geNorm approach)
- Non-identical amplification efficiencies between target and reference, requiring Pfaffl correction (Pfaffl, 2001)
- Large experiments with dozens of targets across multiple plates that need inter-run calibration
- Automated QC — flagging replicate outliers (>0.5 Ct spread), failed NTCs, or melt curve anomalies
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.