Работа с Excel в Rust: библиотеки для чтения и записи таблиц

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с Excel в Rust: обзор библиотек и примеры кода

Язык Rust, известный своей производительностью и безопасностью, предоставляет отличные возможности для работы с электронными таблицами Excel. В этой статье мы рассмотрим три наиболее популярные библиотеки: rust_xlsxwriter, calamine и xlsx. Вы узнаете, как читать, создавать и модифицировать файлы формата .xlsx, а также научитесь применять продвинутые функции форматирования.

Почему Rust для работы с Excel?

Rust идеально подходит для задач обработки данных благодаря:

  • Нулевой стоимости абстракций — высокая скорость работы с большими файлами;
  • Безопасной работе с памятью — исключение утечек и segmentation faults;
  • Кроссплатформенности — код работает на Windows, macOS и Linux;
  • Отличной интеграции с другими системами через FFI.

Библиотека rust_xlsxwriter: создание Excel-файлов

rust_xlsxwriter — это современная библиотека для создания файлов Excel с богатыми возможностями форматирования. Она поддерживает стили, объединение ячеек, формулы и условное форматирование.

Установка

Добавьте в Cargo.toml:

[dependencies]
rust_xlsxwriter = "0.77"

Пример: создание отчета с форматированием

Создадим файл с заголовками, данными и формулой:

use rust_xlsxwriter::*;

fn main() -> Result<(), XlsxError> {
    let mut workbook = Workbook::new();
    let worksheet = workbook.add_worksheet();

    // Создаем стили
    let header_format = Format::new()
        .set_bold()
        .set_font_color(Color::White)
        .set_background_color(Color::Blue)
        .set_border(FormatBorder::Thin);

    let money_format = Format::new()
        .set_num_format("$#,##0.00")
        .set_border(FormatBorder::Thin);

    // Заголовки
    worksheet.write_with_format(0, 0, "Товар", &header_format)?;
    worksheet.write_with_format(0, 1, "Количество", &header_format)?;
    worksheet.write_with_format(0, 2, "Цена", &header_format)?;
    worksheet.write_with_format(0, 3, "Сумма", &header_format)?;

    // Данные
    let items = vec![
        ("Ноутбук", 5, 1200.00),
        ("Мышь", 10, 25.50),
        ("Клавиатура", 7, 45.00),
    ];

    for (i, (name, qty, price)) in items.iter().enumerate() {
        let row = i as u32 + 1;
        worksheet.write(row, 0, name)?;
        worksheet.write(row, 1, *qty)?;
        worksheet.write_with_format(row, 2, *price, &money_format)?;
        // Формула: количество * цена
        worksheet.write_formula(row, 3, &format!("B{}*C{}", row+1, row+1))?;
    }

    // Автоширина колонок
    worksheet.set_column_width(0, 15)?;
    worksheet.set_column_width(1, 12)?;
    worksheet.set_column_width(2, 10)?;
    worksheet.set_column_width(3, 12)?;

    workbook.save("report.xlsx")?;
    println!("Файл report.xlsx создан!");
    Ok(())
}

Библиотека calamine: чтение Excel-файлов

calamine — это быстрый парсер для чтения файлов Excel (.xlsx, .xls, .xlsb). Он не требует установленного Excel и работает полностью в памяти.

Установка

[dependencies]
calamine = "0.24"

Пример: чтение данных из файла

Прочитаем ранее созданный файл и выведем данные в консоль:

use calamine::{open_workbook, Reader, Xlsx};

fn main() -> Result<(), Box> {
    let path = "report.xlsx";
    let mut workbook: Xlsx<_> = open_workbook(path)?;

    if let Some(Ok(range)) = workbook.worksheet_range("Sheet1") {
        println!("Содержимое файла {}:", path);
        println!("{:-<40}", "");

        for row in range.rows() {
            for cell in row {
                match cell {
                    calamine::Data::String(s) => print!("{:<15}", s),
                    calamine::Data::Float(f) => print!("{:<15.2}", f),
                    calamine::Data::Int(i) => print!("{:<15}", i),
                    _ => print!("{:<15}", "?"),
                }
            }
            println!();
        }
    } else {
        println!("Лист не найден");
    }

    Ok(())
}

Библиотека xlsx: легковесная альтернатива

xlsx — это минималистичная библиотека для создания простых Excel-файлов без сложного форматирования

Рекомендаций