77 releases (20 stable)
new 2.2.0 | Dec 11, 2024 |
---|---|
2.1.2 | Oct 22, 2024 |
2.1.1 | Sep 25, 2024 |
2.0.0 | Jul 9, 2024 |
0.1.17-beta | Oct 27, 2020 |
#45 in Parser implementations
3,339 downloads per month
Used in 10 crates
(9 directly)
10MB
57K
SLoC
umya-spreadsheet
Description
umya-spreadsheet is a library written in pure Rust to read and write xlsx file.
Chatting
The chat will be closed.
(Maybe I didn't set it up right, but it's because I no longer get notifications when new messages come in and I don't notice them anymore.)
Please mention in issues if you have any questions.
Update details
ver 2.2.0
* Increased processing speed and reduced memory consumption.(Thank you. schungx,mxsrm)
The return type has been changed in some functions. Please be aware of this.
* copy_row_styling(),copy_col_styling() is now available.
Copies the style of the specified column or row.
let mut book = umya_spreadsheet::reader::xlsx::read(path).unwrap();
let sheet = book.get_sheet_mut(&0).unwrap();
sheet.copy_row_styling(&3, &5, None, None);
sheet.copy_col_styling(&3, &5, None, None);
* The function to create a new comment has been implemented.
let mut book = umya_spreadsheet::reader::xlsx::read(path).unwrap();
let sheet = book.get_sheet_mut(&0).unwrap();
let mut comment = Comment::default();
comment.new_comment("B2");
comment.set_text_string("TEST");
sheet.add_comments(comment);
* Minor bug fixes
Usage
Installation
Add the following code to Cargo.toml
[dependencies]
umya-spreadsheet = "2.2.0"
# WebAssembly support
umya-spreadsheet = { version = "2.2.0", features = ["js"] }
# Use only png for image processing
umya-spreadsheet = { version = "2.2.0", features = ["image/png"] }
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");
Read Value
let mut book = umya_spreadsheet::new_file();
book.get_sheet_by_name("Sheet1").unwrap().get_cell("A1").get_value();
book.get_sheet_by_name("Sheet1").unwrap().get_cell((1, 1)).get_value();
book.get_sheet_by_name("Sheet1").unwrap().get_cell((&1, &1)).get_value();
book.get_sheet_mut(0).unwrap().get_cell((&1, &1)).get_value();
Change Value
let mut book = umya_spreadsheet::new_file();
book.get_sheet_by_name_mut("Sheet1").unwrap().get_cell_mut("A1").set_value("TEST1");
book.get_sheet_mut(0).unwrap().get_cell_mut("A1").set_value("TEST2");
Move Values
let range = "A1:A3";
let row = 10;
let column = 2;
book.get_sheet_by_name_mut("Sheet1").unwrap().move_range(range, &row, &column);
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);
Struct
Pass the book as a Spreadsheet
to modify it in other functions.
let mut book = umya_spreadsheet::new_file();
let _ = book.new_sheet("Sheet2");
update_excel(&mut book);
fn update_excel(book: &mut Spreadsheet) {
book.get_sheet_by_name_mut("Sheet2").unwrap().get_cell_mut("A1").set_value("Test");
}
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
Contributing
Contributions by way of pull requests are welcome! Please make sure your code uses:
cargo fmt
for formatting- clippy
Dependencies
~16–24MB
~424K SLoC