Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/PHPOffice/PhpSpreadsheet/llms.txt

Use this file to discover all available pages before exploring further.

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