Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

GDKsoftware/OfficeXML4D

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

1 Commit

Repository files navigation

Office4D

Pure Delphi library for reading and writing Microsoft Office Open XML documents (.docx, .xlsx).

Features

  • No external dependencies - Uses only Delphi built-in units (System.Zip, Xml.XMLDoc)
  • Full read/write support - Create new documents or modify existing ones
  • Interface-based API - Clean, testable design
  • Rich formatting - Bold, italic, underline, fonts, colors, alignment, hyperlinks, lists, tables
  • Cell styling - Background colors, number formats, formulas, column widths, merged cells

Supported Formats

Format Extension Read Write
Word .docx Yes Yes
Excel .xlsx Yes Yes
PowerPoint .pptx Planned Planned

Installation

  1. Clone the repository
  2. Add Source folder and subfolders to your Delphi library path
  3. Add units to your uses clause

Usage

Reading Word Documents

uses
 Office4D.Word;
var
 Doc: IWordDocument;
begin
 Doc := TWordDocumentFactory.CreateDocument;
 Doc.LoadFromFile('report.docx');
 // Get plain text
 Memo1.Text := Doc.Text;
 // Get metadata
 ShowMessage('Author: ' + Doc.Metadata.Author);
 ShowMessage('Title: ' + Doc.Metadata.Title);
 // Access paragraphs
 for var I := 0 to Doc.ParagraphCount - 1 do
 WriteLn(Doc.Paragraphs[I].Text);
end;

Creating Word Documents

uses
 Office4D.Word;
var
 Doc: IWordDocument;
 Para: IWordParagraph;
 Run: IWordRun;
begin
 Doc := TWordDocumentFactory.CreateDocument;
 // Page settings
 Doc.PageOrientation := TPageOrientation.Portrait;
 Doc.PageMargins := TPageMargins.Create(1440, 1440, 1440, 1440); // 1 inch
 // Header and footer
 Doc.Header.Text := 'Document Header';
 Doc.Footer.Text := 'Page 1';
 // Add formatted paragraph
 Para := Doc.AddParagraph;
 Run := Para.AddRun('Bold text');
 Run.Bold := True;
 Para.AddRun(' and ');
 Run := Para.AddRun('italic text');
 Run.Italic := True;
 // Font formatting
 Para := Doc.AddParagraph;
 Run := Para.AddRun('Custom Font');
 Run.FontName := 'Arial';
 Run.FontSize := 24; // half-points (24 = 12pt)
 Run.FontColor := 'FF0000'; // Red
 // Paragraph alignment
 Para := Doc.AddParagraph;
 Para.Alignment := TParagraphAlignment.Center;
 Para.AddRun('Centered text');
 // Add hyperlink
 Para := Doc.AddParagraph;
 Run := Para.AddRun('Click here');
 Run.Hyperlink := 'https://example.com';
 Run.Underline := True;
 // Add bullet list
 Para := Doc.AddParagraph;
 Para.ListStyle := TListStyle.Bullet;
 Para.AddRun('First item');
 Para := Doc.AddParagraph;
 Para.ListStyle := TListStyle.Bullet;
 Para.AddRun('Second item');
 // Add table
 var Table := Doc.AddTable(3, 2);
 Table.Cells[0, 0].Text := 'Header 1';
 Table.Cells[0, 1].Text := 'Header 2';
 Table.Cells[1, 0].Text := 'Data 1';
 Table.Cells[1, 1].Text := 'Data 2';
 Doc.SaveToFile('output.docx');
end;

Reading Excel Workbooks

uses
 Office4D.Excel;
var
 Workbook: IExcelWorkbook;
 Sheet: IExcelSheet;
begin
 Workbook := TExcelWorkbookFactory.Create;
 Workbook.LoadFromFile('data.xlsx');
 // Access sheets
 for var I := 0 to Workbook.SheetCount - 1 do
 begin
 Sheet := Workbook.Sheets[I];
 WriteLn('Sheet: ' + Sheet.Name);
 end;
 // Get sheet by name
 Sheet := Workbook.SheetByName('Sheet1');
 // Read cell values
 WriteLn(Sheet.Cell['A1'].AsString);
 WriteLn(FloatToStr(Sheet.Cell['B1'].AsFloat));
 WriteLn(BoolToStr(Sheet.Cell['C1'].AsBoolean, True));
 WriteLn(DateTimeToStr(Sheet.Cell['D1'].AsDateTime));
 // Check for formula
 if Sheet.Cell['E1'].HasFormula then
 WriteLn('Formula: ' + Sheet.Cell['E1'].Formula);
end;

Creating Excel Workbooks

uses
 Office4D.Excel;
var
 Workbook: IExcelWorkbook;
 Sheet: IExcelSheet;
begin
 Workbook := TExcelWorkbookFactory.Create;
 // Add sheet
 Sheet := Workbook.AddSheet('Products');
 // Header row with styling
 Sheet.Cell['A1'].AsString := 'Product';
 Sheet.Cell['A1'].Bold := True;
 Sheet.Cell['A1'].BackgroundColor := 4472ドルC4; // Blue
 Sheet.Cell['B1'].AsString := 'Price';
 Sheet.Cell['B1'].Bold := True;
 Sheet.Cell['B1'].BackgroundColor := 4472ドルC4;
 // Data rows
 Sheet.Cell['A2'].AsString := 'Laptop';
 Sheet.Cell['B2'].AsFloat := 999.00;
 Sheet.Cell['B2'].NumberFormat := '"$"#,##0.00';
 Sheet.Cell['A3'].AsString := 'Mouse';
 Sheet.Cell['B3'].AsFloat := 29.95;
 Sheet.Cell['B3'].NumberFormat := '"$"#,##0.00';
 // Formula with calculated value
 Sheet.Cell['B4'].SetFormula('SUM(B2:B3)', 1028.95);
 Sheet.Cell['B4'].Bold := True;
 Sheet.Cell['B4'].NumberFormat := '"$"#,##0.00';
 // Boolean and DateTime
 Sheet.Cell['C2'].AsBoolean := True;
 Sheet.Cell['D2'].AsDateTime := Now;
 // Column widths
 Sheet.SetColumnWidth('A', 20);
 Sheet.SetColumnWidth('B', 15);
 // Merged cells
 Sheet.Cell['E1'].AsString := 'Merged Header';
 Sheet.MergeCells('E1:G1');
 Workbook.SaveToFile('output.xlsx');
end;

Stream Support

Both Word and Excel support stream-based I/O:

var
 Stream: TMemoryStream;
begin
 Stream := TMemoryStream.Create;
 try
 // Save to stream
 Doc.SaveToStream(Stream);
 // Load from stream
 Stream.Position := 0;
 Doc.LoadFromStream(Stream);
 finally
 Stream.Free;
 end;
end;

Building

# Build and run tests
./build.bat Release Win64 Tests
# Build library only
./build.bat Release Win64

Project Structure

Source/
 Core/ - ZIP package handling, relationships, types
 Common/ - Metadata, shared interfaces
 Word/ - Word document implementation
 Excel/ - Excel workbook implementation
Tests/ - DUnitX test suite (135 tests)
Samples/ - Sample documents for testing
Examples/ - Demo application

Word Features

  • Paragraphs with multiple runs
  • Text formatting: bold, italic, underline
  • Font formatting: name, size, color
  • Paragraph alignment: left, center, right, justify
  • Hyperlinks
  • Bullet and numbered lists
  • Tables
  • Headers and footers
  • Page orientation and margins
  • Metadata (author, title, dates)

Excel Features

  • Multiple worksheets
  • Cell data types: string, number, boolean, datetime
  • Cell styling: bold, background color
  • Number formats (currency, percentage, custom)
  • Formulas with calculated values
  • Column widths
  • Merged cells
  • Shared strings optimization
  • Metadata (author, title, dates)

Requirements

  • Delphi 10.3 Rio or later (for inline variable declarations)
  • No additional components or libraries required

License

MIT License - see LICENSE file

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Write tests for new features
  4. Submit a pull request

About

Delphi library for reading and writing Office Open XML documents

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /