FIX: small diverse fixes (#35)
This commit is contained in:
committed by
GitHub
parent
b3b7dea930
commit
49ef846ebd
@@ -8,7 +8,7 @@
|
||||
|
||||
use std::path;
|
||||
|
||||
use ironcalc::{compare::test_file, export::save_to_xlsx, import::load_model_from_xlsx};
|
||||
use ironcalc::{compare::test_file, export::save_to_xlsx, import::load_from_xlsx};
|
||||
|
||||
fn main() {
|
||||
let args: Vec<_> = std::env::args().collect();
|
||||
@@ -27,7 +27,7 @@ fn main() {
|
||||
let file_path = path::Path::new(file_name);
|
||||
let base_name = file_path.file_stem().unwrap().to_str().unwrap();
|
||||
let output_file_name = &format!("{base_name}.output.xlsx");
|
||||
let mut model = load_model_from_xlsx(file_name, "en", "UTC").unwrap();
|
||||
let mut model = load_from_xlsx(file_name, "en", "UTC").unwrap();
|
||||
model.evaluate();
|
||||
println!("Saving result as: {output_file_name}. Please open with Excel and test.");
|
||||
save_to_xlsx(&model, output_file_name).unwrap();
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
use std::path;
|
||||
|
||||
use ironcalc::{export::save_to_json, import::load_model_from_xlsx};
|
||||
use ironcalc::{export::save_to_icalc, import::load_from_xlsx};
|
||||
|
||||
fn main() {
|
||||
let args: Vec<_> = std::env::args().collect();
|
||||
@@ -21,6 +21,6 @@ fn main() {
|
||||
let file_path = path::Path::new(file_name);
|
||||
let base_name = file_path.file_stem().unwrap().to_str().unwrap();
|
||||
let output_file_name = &format!("{base_name}.ic");
|
||||
let model = load_model_from_xlsx(file_name, "en", "UTC").unwrap();
|
||||
save_to_json(model.workbook, output_file_name);
|
||||
let model = load_from_xlsx(file_name, "en", "UTC").unwrap();
|
||||
save_to_icalc(model.workbook, output_file_name);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ use ironcalc_base::types::*;
|
||||
use ironcalc_base::{expressions::utils::number_to_column, Model};
|
||||
|
||||
use crate::export::save_to_xlsx;
|
||||
use crate::import::load_model_from_xlsx;
|
||||
use crate::import::load_from_xlsx;
|
||||
|
||||
pub struct CompareError {
|
||||
message: String,
|
||||
@@ -164,13 +164,13 @@ pub(crate) fn compare_models(m1: &Model, m2: &Model) -> Result<(), String> {
|
||||
let mut message = "".to_string();
|
||||
for diff in diffs {
|
||||
message = format!(
|
||||
"{}\n.Diff: {}!{}{}, value1: {}, value2 {}\n {}",
|
||||
"{}\n.Diff: {}!{}{}, value1: {:?}, value2 {:?}\n {}",
|
||||
message,
|
||||
diff.sheet_name,
|
||||
number_to_column(diff.column).unwrap(),
|
||||
diff.row,
|
||||
serde_json::to_string(&diff.value1).unwrap(),
|
||||
serde_json::to_string(&diff.value2).unwrap(),
|
||||
&diff.value1,
|
||||
&diff.value2,
|
||||
diff.reason
|
||||
);
|
||||
}
|
||||
@@ -183,15 +183,15 @@ pub(crate) fn compare_models(m1: &Model, m2: &Model) -> Result<(), String> {
|
||||
|
||||
/// Tests that file in file_path produces the same results in Excel and in IronCalc.
|
||||
pub fn test_file(file_path: &str) -> Result<(), String> {
|
||||
let model1 = load_model_from_xlsx(file_path, "en", "UTC").unwrap();
|
||||
let mut model2 = load_model_from_xlsx(file_path, "en", "UTC").unwrap();
|
||||
let model1 = load_from_xlsx(file_path, "en", "UTC").unwrap();
|
||||
let mut model2 = load_from_xlsx(file_path, "en", "UTC").unwrap();
|
||||
model2.evaluate();
|
||||
compare_models(&model1, &model2)
|
||||
}
|
||||
|
||||
/// Tests that file in file_path can be converted to xlsx and read again
|
||||
pub fn test_load_and_saving(file_path: &str, temp_dir_name: &Path) -> Result<(), String> {
|
||||
let model1 = load_model_from_xlsx(file_path, "en", "UTC").unwrap();
|
||||
let model1 = load_from_xlsx(file_path, "en", "UTC").unwrap();
|
||||
|
||||
let base_name = Path::new(file_path).file_name().unwrap().to_str().unwrap();
|
||||
|
||||
@@ -200,7 +200,7 @@ pub fn test_load_and_saving(file_path: &str, temp_dir_name: &Path) -> Result<(),
|
||||
// test can save
|
||||
save_to_xlsx(&model1, temp_file_path).unwrap();
|
||||
// test can open
|
||||
let mut model2 = load_model_from_xlsx(temp_file_path, "en", "UTC").unwrap();
|
||||
let mut model2 = load_from_xlsx(temp_file_path, "en", "UTC").unwrap();
|
||||
model2.evaluate();
|
||||
compare_models(&model1, &model2)
|
||||
}
|
||||
|
||||
@@ -129,9 +129,9 @@ pub fn save_xlsx_to_writer<W: Write + Seek>(model: &Model, writer: W) -> Result<
|
||||
}
|
||||
|
||||
/// Exports an internal representation of a workbook into an equivalent IronCalc json format
|
||||
pub fn save_to_json(workbook: Workbook, output: &str) {
|
||||
let s = serde_json::to_string(&workbook).unwrap();
|
||||
pub fn save_to_icalc(workbook: Workbook, output: &str) {
|
||||
let s = bitcode::encode(&workbook);
|
||||
let file_path = std::path::Path::new(output);
|
||||
let mut file = fs::File::create(file_path).unwrap();
|
||||
file.write_all(s.as_bytes()).unwrap();
|
||||
file.write_all(&s).unwrap();
|
||||
}
|
||||
|
||||
@@ -3,7 +3,9 @@ use std::fs;
|
||||
use ironcalc_base::Model;
|
||||
|
||||
use crate::error::XlsxError;
|
||||
use crate::{export::save_to_xlsx, import::load_model_from_xlsx};
|
||||
use crate::export::save_to_icalc;
|
||||
use crate::import::load_from_icalc;
|
||||
use crate::{export::save_to_xlsx, import::load_from_xlsx};
|
||||
|
||||
pub fn new_empty_model() -> Model {
|
||||
Model::new_empty("model", "en", "UTC").unwrap()
|
||||
@@ -26,29 +28,54 @@ fn test_values() {
|
||||
|
||||
// noop
|
||||
model.evaluate();
|
||||
{
|
||||
let temp_file_name = "temp_file_test_values.xlsx";
|
||||
save_to_xlsx(&model, temp_file_name).unwrap();
|
||||
|
||||
let temp_file_name = "temp_file_test_values.xlsx";
|
||||
save_to_xlsx(&model, temp_file_name).unwrap();
|
||||
let model = load_from_xlsx(temp_file_name, "en", "UTC").unwrap();
|
||||
assert_eq!(model.get_formatted_cell_value(0, 1, 1).unwrap(), "123.456");
|
||||
assert_eq!(
|
||||
model.get_formatted_cell_value(0, 2, 1).unwrap(),
|
||||
"Hello world!"
|
||||
);
|
||||
assert_eq!(
|
||||
model.get_formatted_cell_value(0, 3, 1).unwrap(),
|
||||
"Hello world!"
|
||||
);
|
||||
assert_eq!(
|
||||
model.get_formatted_cell_value(0, 4, 1).unwrap(),
|
||||
"你好世界!"
|
||||
);
|
||||
assert_eq!(model.get_formatted_cell_value(0, 5, 1).unwrap(), "TRUE");
|
||||
assert_eq!(model.get_formatted_cell_value(0, 6, 1).unwrap(), "FALSE");
|
||||
assert_eq!(model.get_formatted_cell_value(0, 7, 1).unwrap(), "#VALUE!");
|
||||
|
||||
let model = load_model_from_xlsx(temp_file_name, "en", "UTC").unwrap();
|
||||
assert_eq!(model.get_formatted_cell_value(0, 1, 1).unwrap(), "123.456");
|
||||
assert_eq!(
|
||||
model.get_formatted_cell_value(0, 2, 1).unwrap(),
|
||||
"Hello world!"
|
||||
);
|
||||
assert_eq!(
|
||||
model.get_formatted_cell_value(0, 3, 1).unwrap(),
|
||||
"Hello world!"
|
||||
);
|
||||
assert_eq!(
|
||||
model.get_formatted_cell_value(0, 4, 1).unwrap(),
|
||||
"你好世界!"
|
||||
);
|
||||
assert_eq!(model.get_formatted_cell_value(0, 5, 1).unwrap(), "TRUE");
|
||||
assert_eq!(model.get_formatted_cell_value(0, 6, 1).unwrap(), "FALSE");
|
||||
assert_eq!(model.get_formatted_cell_value(0, 7, 1).unwrap(), "#VALUE!");
|
||||
fs::remove_file(temp_file_name).unwrap();
|
||||
}
|
||||
{
|
||||
let temp_file_name = "temp_file_test_values.ic";
|
||||
save_to_icalc(model.workbook, temp_file_name);
|
||||
|
||||
fs::remove_file(temp_file_name).unwrap();
|
||||
let model = load_from_icalc(temp_file_name).unwrap();
|
||||
assert_eq!(model.get_formatted_cell_value(0, 1, 1).unwrap(), "123.456");
|
||||
assert_eq!(
|
||||
model.get_formatted_cell_value(0, 2, 1).unwrap(),
|
||||
"Hello world!"
|
||||
);
|
||||
assert_eq!(
|
||||
model.get_formatted_cell_value(0, 3, 1).unwrap(),
|
||||
"Hello world!"
|
||||
);
|
||||
assert_eq!(
|
||||
model.get_formatted_cell_value(0, 4, 1).unwrap(),
|
||||
"你好世界!"
|
||||
);
|
||||
assert_eq!(model.get_formatted_cell_value(0, 5, 1).unwrap(), "TRUE");
|
||||
assert_eq!(model.get_formatted_cell_value(0, 6, 1).unwrap(), "FALSE");
|
||||
assert_eq!(model.get_formatted_cell_value(0, 7, 1).unwrap(), "#VALUE!");
|
||||
|
||||
fs::remove_file(temp_file_name).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -67,7 +94,7 @@ fn test_formulas() {
|
||||
let temp_file_name = "temp_file_test_formulas.xlsx";
|
||||
save_to_xlsx(&model, temp_file_name).unwrap();
|
||||
|
||||
let model = load_model_from_xlsx(temp_file_name, "en", "UTC").unwrap();
|
||||
let model = load_from_xlsx(temp_file_name, "en", "UTC").unwrap();
|
||||
assert_eq!(model.get_formatted_cell_value(0, 1, 2).unwrap(), "11");
|
||||
assert_eq!(model.get_formatted_cell_value(0, 2, 2).unwrap(), "13");
|
||||
assert_eq!(model.get_formatted_cell_value(0, 3, 2).unwrap(), "15");
|
||||
@@ -89,7 +116,7 @@ fn test_sheets() {
|
||||
let temp_file_name = "temp_file_test_sheets.xlsx";
|
||||
save_to_xlsx(&model, temp_file_name).unwrap();
|
||||
|
||||
let model = load_model_from_xlsx(temp_file_name, "en", "UTC").unwrap();
|
||||
let model = load_from_xlsx(temp_file_name, "en", "UTC").unwrap();
|
||||
assert_eq!(
|
||||
model.workbook.get_worksheet_names(),
|
||||
vec!["Sheet1", "With space", "Tango & Cash", "你好世界"]
|
||||
@@ -118,7 +145,7 @@ fn test_named_styles() {
|
||||
let temp_file_name = "temp_file_test_named_styles.xlsx";
|
||||
save_to_xlsx(&model, temp_file_name).unwrap();
|
||||
|
||||
let model = load_model_from_xlsx(temp_file_name, "en", "UTC").unwrap();
|
||||
let model = load_from_xlsx(temp_file_name, "en", "UTC").unwrap();
|
||||
assert!(model
|
||||
.workbook
|
||||
.styles
|
||||
|
||||
@@ -106,7 +106,7 @@ fn load_xlsx_from_reader<R: Read + std::io::Seek>(
|
||||
// Public methods
|
||||
|
||||
/// Imports a file from disk into an internal representation
|
||||
pub fn load_from_excel(file_name: &str, locale: &str, tz: &str) -> Result<Workbook, XlsxError> {
|
||||
fn load_from_excel(file_name: &str, locale: &str, tz: &str) -> Result<Workbook, XlsxError> {
|
||||
let file_path = std::path::Path::new(file_name);
|
||||
let file = fs::File::open(file_path)?;
|
||||
let reader = BufReader::new(file);
|
||||
@@ -118,7 +118,14 @@ pub fn load_from_excel(file_name: &str, locale: &str, tz: &str) -> Result<Workbo
|
||||
load_xlsx_from_reader(name, reader, locale, tz)
|
||||
}
|
||||
|
||||
pub fn load_model_from_xlsx(file_name: &str, locale: &str, tz: &str) -> Result<Model, XlsxError> {
|
||||
pub fn load_from_xlsx(file_name: &str, locale: &str, tz: &str) -> Result<Model, XlsxError> {
|
||||
let workbook = load_from_excel(file_name, locale, tz)?;
|
||||
Model::from_workbook(workbook).map_err(XlsxError::Workbook)
|
||||
}
|
||||
|
||||
pub fn load_from_icalc(file_name: &str) -> Result<Model, XlsxError> {
|
||||
let contents = fs::read(file_name)
|
||||
.map_err(|e| XlsxError::IO(format!("Could not extract workbook name: {}", e)))?;
|
||||
let workbook: Workbook = bitcode::decode(&contents).unwrap();
|
||||
Model::from_workbook(workbook).map_err(XlsxError::Workbook)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user