Skip to main content
The Ods writer exports spreadsheets to OpenDocument Spreadsheet format (.ods), the native format for LibreOffice Calc and OpenOffice Calc. Namespace: PhpOffice\PhpSpreadsheet\Writer\Ods Extends: BaseWriter

Class Overview

The Ods writer creates ZIP archives containing XML files that conform to the OASIS OpenDocument Format (ODF) standard. The format is open, XML-based, and widely supported by open-source office suites.

Constructor

public function __construct(Spreadsheet $spreadsheet)
Creates a new Ods writer instance.
spreadsheet
Spreadsheet
required
The spreadsheet object to write

Key Methods

save()

public function save($filename, int $flags = 0): void
Saves the spreadsheet as an .ods file.
filename
string|resource
required
File path or resource to write to
flags
int
default:"0"
Optional flags (see IWriter constants)

useAdditionalNumberFormats()

public function useAdditionalNumberFormats(array $additionalNumberFormats): void
Registers additional number format converters for custom formats.
additionalNumberFormats
array<string, callable>
required
Array mapping format codes to converter functions

Usage Examples

Basic Export

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Ods;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World!');

$writer = new Ods($spreadsheet);
$writer->save('hello.ods');

Download to Browser

use PhpOffice\PhpSpreadsheet\Writer\Ods;

// Set headers for download
header('Content-Type: application/vnd.oasis.opendocument.spreadsheet');
header('Content-Disposition: attachment;filename="report.ods"');
header('Cache-Control: max-age=0');

$writer = new Ods($spreadsheet);
$writer->save('php://output');
exit;

With Custom Number Formats

use PhpOffice\PhpSpreadsheet\Writer\Ods;

$writer = new Ods($spreadsheet);

// Add custom number format converter
$writer->useAdditionalNumberFormats([
    'CUSTOM_FORMAT' => function($format) {
        // Convert custom format to ODS format
        return convertToOdsFormat($format);
    }
]);

$writer->save('output.ods');

Disable Formula Calculation

use PhpOffice\PhpSpreadsheet\Writer\Ods;

$writer = new Ods($spreadsheet);
$writer->setPreCalculateFormulas(false);
$writer->save('output.ods');

Format Features

The Ods writer supports:
  • ✅ Multiple worksheets
  • ✅ Cell formatting (fonts, colors, borders, fills)
  • ✅ Number formats
  • ✅ Formulas
  • ⚠️ Charts (limited support)
  • ⚠️ Images (limited support)
  • ✅ Rich text
  • ✅ Merged cells
  • ⚠️ Data validation (basic support)
  • ⚠️ Conditional formatting (limited)
  • ✅ Page setup
  • ✅ Headers and footers (basic)
  • ✅ Document properties
  • ✅ Named ranges
  • ✅ Autofilters
  • ⚠️ Tables (limited support)
  • ✅ Comments
  • ✅ Hyperlinks

File Structure

The ODS file is a ZIP archive containing:
  • content.xml - Spreadsheet data and formulas
  • styles.xml - Style definitions
  • meta.xml - Document metadata
  • settings.xml - View settings
  • META-INF/manifest.xml - Package manifest
  • mimetype - MIME type declaration
  • Thumbnails/thumbnail.png - Preview thumbnail

OpenDocument Compliance

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Ods;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

// Set document metadata (ODF properties)
$props = $spreadsheet->getProperties();
$props->setCreator('John Doe');
$props->setTitle('My Document');
$props->setSubject('Sales Report');
$props->setDescription('Q4 2024 sales data');
$props->setKeywords('sales, report, q4');
$props->setCategory('Reports');

$writer = new Ods($spreadsheet);
$writer->save('report.ods');

LibreOffice Compatibility

The Ods writer is optimized for LibreOffice Calc and OpenOffice Calc:
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Ods;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

// Set print area
$sheet->getPageSetup()->setPrintArea('A1:E50');

// Set page orientation
$sheet->getPageSetup()->setOrientation(
    \PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_LANDSCAPE
);

$writer = new Ods($spreadsheet);
$writer->save('calc.ods');

Formula Handling

ODS uses OpenFormula syntax, which is similar to Excel but has some differences:
// Standard formulas work across formats
$sheet->setCellValue('A1', 10);
$sheet->setCellValue('A2', 20);
$sheet->setCellValue('A3', '=SUM(A1:A2)');

// Pre-calculate formulas for immediate display
$writer = new Ods($spreadsheet);
$writer->setPreCalculateFormulas(true);
$writer->save('output.ods');

When to Use ODS

Use the Ods writer when:
  • ✅ Targeting LibreOffice or OpenOffice users
  • ✅ Open standards compliance is required
  • ✅ Cross-platform compatibility is important
  • ✅ Working in open-source environments
Consider other formats when:
  • ❌ Advanced Excel-specific features are needed
  • ❌ Target users primarily use Microsoft Excel
  • ❌ Complex charts are required
  • ❌ Rich image embedding is needed

Build docs developers (and LLMs) love