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.
The spreadsheet object to write
Key Methods
save()
public function save($filename, int $flags = 0): void
Saves the spreadsheet as an .ods file.
File path or resource to write to
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;
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');
use PhpOffice\PhpSpreadsheet\Writer\Ods;
$writer = new Ods($spreadsheet);
$writer->setPreCalculateFormulas(false);
$writer->save('output.ods');
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');
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