• Stars
    star
    258
  • Rank 158,189 (Top 4 %)
  • Language
    Rust
  • License
    MIT License
  • Created over 4 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A pure rust library for reading and writing spreadsheet files

umya-spreadsheet

Result Image

Crates.io Crates.io Join the chat at https://gitter.im/MathNya/umya-spreadsheet

Description

umya-spreadsheet is a library written in pure Rust and read and write xlsx file.

Chatting

Please use Gitter for brief chats.

New feature

ver 0.9.2

new function get_lazy_read_sheet_cells

Cell information can now be retrieved from a worksheet loaded with lazy_read.

let path = std::path::Path::new("./tests/test_files/aaa.xlsx");
let mut book = umya_spreadsheet::reader::xlsx::lazy_read(path).unwrap();
let cells = book.get_lazy_read_sheet_cells(&0).unwrap();
let value = cells.get_cell_value((&5, &12)).get_value();
let value = cells.get_cell_value("E12").get_value();

set_value_from_string is deprecated

Cell.set_value_from_string had different behavior in different versions.
This function is deprecated.
From now on, set_value or set_value_string.

ver 0.9.1

Changed file compression logic when writing.
The file size is smaller than before, but the processing time is longer.
If you want to use the previous logic, use this method.

umya_spreadsheet::writer::xlsx::write_light(&book, path);
umya_spreadsheet::writer::xlsx::write_with_password_light(&book, path, "password");

ver 0.9

The way cells are referenced has changed.

// old
let value = worksheet.get_value("A1");
let value = worksheet.get_value_by_column_and_row(&1, &1);
// This one has been deprecated.
// It will eventually disappear.

// NEW
let value = worksheet.get_value("A1");
let value = worksheet.get_value((1, 1));
let value = worksheet.get_value((&1, &1));

ver 0.8

A password can now be set when saving a file.

let path = std::path::Path::new("./tests/result_files/bbb.xlsx");
let _ = umya_spreadsheet::writer::xlsx::write_with_password(&book, path, "password");
let from_path = std::path::Path::new("./tests/test_files/aaa.xlsx");
let to_path = std::path::Path::new("./tests/result_files/bbb.xlsx");
let _ = umya_spreadsheet::writer::xlsx::set_password(&from_path, &to_path, "password");

Usage

Installation

Add the following code to Cargo.toml

[dependencies]
umya-spreadsheet = "0.9"

Add the following code to main.rs

extern crate umya_spreadsheet;

Read file

let path = std::path::Path::new("./tests/test_files/aaa.xlsx");
let mut book = umya_spreadsheet::reader::xlsx::read(path).unwrap();

Read file (Lazy)

Delays the loading of the worksheet until it is needed.
When loading a file with a large amount of data, response improvement can be expected.

let path = std::path::Path::new("./tests/test_files/aaa.xlsx");
let mut book = umya_spreadsheet::reader::xlsx::lazy_read(path).unwrap();

New file

let mut book = umya_spreadsheet::new_file();

Write file

let path = std::path::Path::new("./tests/result_files/bbb.xlsx");
let _ = umya_spreadsheet::writer::xlsx::write(&book, path);

Write file with password

let path = std::path::Path::new("./tests/result_files/bbb.xlsx");
let _ = umya_spreadsheet::writer::xlsx::write_with_password(&book, path, "password");
let from_path = std::path::Path::new("./tests/test_files/aaa.xlsx");
let to_path = std::path::Path::new("./tests/result_files/bbb.xlsx");
let _ = umya_spreadsheet::writer::xlsx::set_password(&from_path, &to_path, "password");

Change Value

let mut book = umya_spreadsheet::new_file();
let _ = book.new_sheet("Sheet2");
book.get_sheet_by_name_mut("Sheet2").unwrap().get_cell_mut("A1").set_value("TEST1");

Change Style

let mut book = umya_spreadsheet::new_file();
let mut style = book.get_sheet_by_name_mut("Sheet1").unwrap().get_style_mut("A1");
// fill color on red.
style.set_background_color(umya_spreadsheet::Color::COLOR_RED);

New Chart

let mut book = umya_spreadsheet::new_file();
// Add Chart
let mut from_marker = umya_spreadsheet::structs::drawing::spreadsheet::MarkerType::default();
from_marker.set_coordinate("C1");
let mut to_marker = umya_spreadsheet::structs::drawing::spreadsheet::MarkerType::default();
to_marker.set_coordinate("D11");
let area_chart_series_list = vec![
    "Sheet1!$A$1:$A$10",
    "Sheet1!$B$1:$B$10",
];
let mut chart = umya_spreadsheet::structs::Chart::default();
chart.new_chart(
    umya_spreadsheet::structs::ChartType::LineChart,
    from_marker,
    to_marker,
    area_chart_series_list,
);
book.get_sheet_by_name_mut("Sheet1").unwrap()
    .add_chart(chart);

See the next chapter for implementation status and more detailed usage.

Support Status

Function detail example
file reader xlsx, xlsm here.
file lazy_reader xlsx, xlsm here.
file writer xlsx, xlsm here.
csv here.
file writer with password xlsx, xlsm here.
worksheet read, new, copy here.
cell value read, edit, formated value. here.
cell style read, edit here.
columns read, edit, auto width here.
rows read, edit
charts read, edit here.
drawings read, edit(Still might be inconvenient.)
images read, edit here.
ole objects read, edit(Still might be inconvenient.)

License

MIT