| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- //! 小分表命令行入口(对照测试用)。
- //! 用法: scoretable_cli <xlsx> <has_header 0|1> <ignore文本> <颜色文本> <阈值> [--export <out.xlsx>]
- use std::path::PathBuf;
- use toolbox_core::scoretable::{export_xlsx, process, ScoreTableInput, PALETTE};
- fn main() {
- let args: Vec<String> = std::env::args().collect();
- if args.len() < 6 {
- eprintln!("用法: scoretable_cli <xlsx> <has_header 0|1> <ignore> <colors> <阈值> [--export out.xlsx]");
- std::process::exit(2);
- }
- let mut export: Option<PathBuf> = None;
- let mut i = 6;
- while i < args.len() {
- if args[i] == "--export" && i + 1 < args.len() {
- export = Some(PathBuf::from(&args[i + 1]));
- i += 2;
- } else {
- i += 1;
- }
- }
- let inp = ScoreTableInput {
- path: PathBuf::from(&args[1]),
- has_header: args[2] == "1",
- ignore_cols_text: args[3].clone(),
- color_groups_text: args[4].clone(),
- threshold: args[5].parse().unwrap_or(10),
- };
- match process(&inp) {
- Ok(t) => {
- // 协议输出(与 reference.py 一致)
- println!("H\t{}", t.headers.join("\t"));
- for (r, row) in t.rows.iter().enumerate() {
- println!("R\t{}", row.join("\t"));
- let ci = match t.color_idx[r] {
- Some(i) => i as i64,
- None => -1,
- };
- println!("C\t{}", ci);
- }
- if let Some(p) = export {
- match export_xlsx(&t, &p) {
- Ok(_) => println!("已导出: {}", p.display()),
- Err(e) => {
- eprintln!("{}", e);
- std::process::exit(1);
- }
- }
- }
- }
- Err(e) => {
- println!("ERR {}", e);
- std::process::exit(1);
- }
- }
- let _ = PALETTE;
- }
|