use omniparse::{extract_from_path, Content};
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("📊 Spreadsheet Extraction Example");
println!("{}", "=".repeat(60));
let files = vec![
"test_data/document/sample.xlsx",
"test_data/document/sample.xls",
"test_data/document/sample.ods",
];
for file_path in files {
println!("\n📁 Extracting from: {}", file_path);
println!("{}", "-".repeat(60));
match extract_from_path(file_path) {
Ok(result) => {
println!("📄 MIME Type: {}", result.mime_type);
println!("🎯 Confidence: {:.2}%", result.detection_confidence * 100.0);
println!("\n📋 Spreadsheet Metadata:");
if let Some(sheet_count) = result.metadata.get("sheet_count") {
println!(" • Sheet Count: {:?}", sheet_count);
}
if let Some(sheet_names) = result.metadata.get("sheet_names") {
println!(" • Sheet Names: {:?}", sheet_names);
}
if let Some(table_count) = result.metadata.get("table_count") {
println!(" • Table Count: {:?}", table_count);
}
if let Some(table_names) = result.metadata.get("table_names") {
println!(" • Table Names: {:?}", table_names);
}
if let Some(total_rows) = result.metadata.get("total_rows") {
println!(" • Total Rows: {:?}", total_rows);
}
if let Some(author) = result.metadata.get("author") {
println!(" • Author: {:?}", author);
}
if let Some(title) = result.metadata.get("title") {
println!(" • Title: {:?}", title);
}
println!("\n📝 Extracted Data (CSV format):");
match result.content {
Content::Text(text) => {
let preview = if text.len() > 500 {
format!("{}...\n(truncated, {} total characters)", &text[..500], text.len())
} else {
text
};
println!("{}", preview);
}
_ => println!(" [No text content]"),
}
}
Err(e) => {
eprintln!("❌ Error: {}", e);
}
}
}
println!("\n{}", "=".repeat(60));
println!("✅ Spreadsheet extraction complete!");
println!("\nNote: Cell values are extracted (not formulas) and formatted as CSV.");
Ok(())
}