Skip to content

Конвертація DOC, XLS, PPT у OOXML

Office Oxide — єдина бібліотека на Rust або Python, яка читає Word 97–2003 (.doc), Excel 97–2003 (.xls) і PowerPoint 97–2003 (.ppt) та записує відповідні сучасні формати OOXML — без JVM (Apache Tika), без зовнішніх конвертерів (LibreOffice headless) і без комерційної ліцензії (Aspose).

save_as виконує конвертацію одним викликом. Відкрийте файл у застарілому форматі та збережіть із сучасним розширенням; Office Oxide пропустить його через IR і запише готовий OOXML-контейнер.

Одним рядком

Rust

use office_oxide::Document;

Document::open("old.doc")?.save_as("modern.docx")?;
Document::open("old.xls")?.save_as("modern.xlsx")?;
Document::open("old.ppt")?.save_as("modern.pptx")?;

Python

from office_oxide import Document

with Document.open("old.doc") as doc:
    doc.save_as("modern.docx")

with Document.open("old.xls") as doc:
    doc.save_as("modern.xlsx")

with Document.open("old.ppt") as doc:
    doc.save_as("modern.pptx")

JavaScript

import { Document } from 'office-oxide';

using doc = Document.open('old.xls');
doc.saveAs('modern.xlsx');

Go

doc, _ := officeoxide.Open("old.xls")
defer doc.Close()
doc.SaveAs("modern.xlsx")

C#

using var doc = Document.Open("old.xls");
doc.SaveAs("modern.xlsx");

C

int err = 0;
OfficeDocumentHandle *doc = office_document_open("old.xls", &err);
if (!doc) { fprintf(stderr, "open failed: code=%d\n", err); return 1; }

/* target format inferred from the extension; legacy -> OOXML converts transparently */
if (office_document_save_as(doc, "modern.xlsx", &err) != 0) {
    fprintf(stderr, "save_as failed: code=%d\n", err);
}
office_document_free(doc);

Масова міграція

Перенесіть цілий архів файлів одним рядком коду.

Rust

use office_oxide::Document;
use std::path::Path;

fn migrate(src: &Path, dst: &Path) -> office_oxide::Result<()> {
    Document::open(src)?.save_as(dst)?;
    Ok(())
}

Python

from pathlib import Path
from office_oxide import Document

for src in Path("legacy").rglob("*"):
    if src.suffix.lower() in {".doc", ".xls", ".ppt"}:
        new_ext = {".doc": ".docx", ".xls": ".xlsx", ".ppt": ".pptx"}[src.suffix.lower()]
        dst = Path("modern") / src.relative_to("legacy").with_suffix(new_ext)
        dst.parent.mkdir(parents=True, exist_ok=True)
        with Document.open(src) as doc:
            doc.save_as(dst)
        print(f"{src}{dst}")

C

/* migrate one file: open from path, save_as routes by the dst extension */
int migrate(const char *src, const char *dst) {
    int err = 0;
    OfficeDocumentHandle *doc = office_document_open(src, &err);
    if (!doc) return err;
    int rc = office_document_save_as(doc, dst, &err);
    office_document_free(doc);
    return rc == 0 ? 0 : err;
}

Для паралельного оброблення великих колекцій загорніть цикл у rayon.

Shell — через CLI

find legacy/ -iname '*.doc' | parallel \
  'office-oxide convert {} modern/{/.}.docx'

find legacy/ -iname '*.xls' | parallel \
  'office-oxide convert {} modern/{/.}.xlsx'

find legacy/ -iname '*.ppt' | parallel \
  'office-oxide convert {} modern/{/.}.pptx'

Що зберігається при конвертації

Office Oxide зберігає структуру вмісту — абзаци, таблиці, клітинки, слайди, списки, заголовки — та значення всередині них. Деякі категорії не переносяться, бо застарілі формати кодують їх у пропрієтарних структурах, яких IR не моделює:

Категорія Зберігається Примітки
Текст абзаців Включно з жирним/курсивом/підкресленням
Списки Нумеровані + марковані
Таблиці Клітинки, порядок рядків, рядок заголовка
Значення клітинок XLSX (string, number, bool)
Назви аркушів
Заголовки слайдів + основний текст
Гіперпосилання
Зображення частково DOC/PPT зберігають вбудовані зображення; якорі зображень у XLS не переносяться
Коментарі / правки Відстежувані зміни застосовуються і згортаються
Формули (XLS) лише значення Кешовані результати зберігаються; вирази формул не переносяться
WordArt, SmartArt, діаграми Відтворіть у цільовому форматі за потреби
Шифрування Розшифруйте файл заздалегідь (наприклад, за допомогою LibreOffice)

Для більшості завдань LLM, індексування та архівування ключовою є точність на рівні вмісту — а Office Oxide повертає повністю редагований DOCX/XLSX/PPTX за мілісекунди.

Продуктивність

Конвертація одного файлу займає стільки ж часу, що й вилучення тексту. Для типового файлу Word 97 (.doc) очікуйте одиниці мілісекунд від початку до кінця.

Дивіться також