use super::*;
struct MySimpleData {
pub name: String,
pub tel: String,
pub dep: String,
}
impl MySimpleData {
pub fn new(name: &str, tel: &str, dep: &str) -> Self {
Self {
name: name.into(),
tel: tel.into(),
dep: dep.into(),
}
}
}
impl XlsxGroupWrite for MySimpleData {
const LINE_WRITER_MODEL: XlsxLineWriterModel = XlsxLineWriterModel::Simple;
fn line_writer_simple(&self, line_index: u32) -> Vec<XlsxColValue> {
vec![
XlsxColValue::new(line_index - 1, XlsxColValueType::NumberValue),
XlsxColValue::new(&self.name, XlsxColValueType::StringValue),
XlsxColValue::new(&self.tel, XlsxColValueType::StringValue),
XlsxColValue::new(&self.dep, XlsxColValueType::StringValue),
]
}
fn group_make(&self) -> &str {
&self.dep
}
fn get_template() -> XlsxInitTemplet {
XlsxInitTemplet::new_header("序号,姓名,手机,部门")
}
const OUTPUT_FILE_NAME_GETTER_SIMPLE: Option<OutputFileNameSimpleGetter> =
Some(OutputFileNameSimpleGetter::new(
"/tmp/test",
#[cfg(feature = "date")] false,
));
}
#[test]
fn test_simple_temp() {
let data = vec![
MySimpleData::new("张三", "185xxxx2228", "网金部"),
MySimpleData::new("李四", "185xxxx2229", "运管部"),
MySimpleData::new("王二", "185xxxx2230", "网金部"),
];
let resp = MySimpleData::write2xlsx_all(
&data
);
println!("{resp:#?}");
}
struct MyData {
pub name: String,
pub tel: String,
pub dep: String,
}
impl MyData {
pub fn new(name: &str, tel: &str, dep: &str) -> Self {
Self {
name: name.into(),
tel: tel.into(),
dep: dep.into(),
}
}
}
impl XlsxGroupWrite for MyData {
const LINE_WRITER_MODEL: XlsxLineWriterModel = XlsxLineWriterModel::Simple;
fn line_writer_simple(&self, line_index: u32) -> Vec<XlsxColValue> {
vec![
XlsxColValue::new(line_index - 3, XlsxColValueType::NumberValue),
XlsxColValue::new(&self.name, XlsxColValueType::StringValue),
XlsxColValue::new(&self.tel, XlsxColValueType::StringValue),
XlsxColValue::new(&self.dep, XlsxColValueType::StringValue),
]
}
fn group_make(&self) -> &str {
&self.dep
}
fn get_template() -> XlsxInitTemplet {
XlsxInitTemplet::new_advance("/home/feiy/Desktop/temp.xlsx", 4)
}
fn add_custom_info_to_sheet(sheet: &mut Worksheet, group_id: &str) {
sheet
.get_cell_mut((&1, &2))
.set_value_string(&format!("{group_id},报表日期:2023年4月20日"));
}
const OUTPUT_FILE_NAME_GETTER_SIMPLE: Option<OutputFileNameSimpleGetter> =
Some(OutputFileNameSimpleGetter::new(
"/tmp/test",
#[cfg(feature = "date")]
true,
));
}
#[test]
fn test_custom_info() {
let data = vec![
MyData::new("张三", "185xxxx2228", "网金部"),
MyData::new("李四", "185xxxx2229", "运管部"),
MyData::new("王二", "185xxxx2230", "网金部"),
];
let resp = MyData::write2xlsx_group_only(
&data,
#[cfg(feature = "encrypt")]
Some("abc95599"),
);
println!("{resp:#?}");
}
struct MyData2 {
pub name: String,
pub tel: String,
pub dep: String,
}
impl MyData2 {
pub fn new(name: &str, tel: &str, dep: &str) -> Self {
Self {
name: name.into(),
tel: tel.into(),
dep: dep.into(),
}
}
}
impl XlsxGroupWrite for MyData2 {
const LINE_WRITER_MODEL: XlsxLineWriterModel = XlsxLineWriterModel::Simple;
fn line_writer_simple(&self, line_index: u32) -> Vec<XlsxColValue> {
vec![
XlsxColValue::new(line_index - 2, XlsxColValueType::NumberValue),
XlsxColValue::new(&self.name, XlsxColValueType::StringValue),
XlsxColValue::new(&self.tel, XlsxColValueType::StringValue),
XlsxColValue::new(&self.dep, XlsxColValueType::StringValue),
]
}
fn get_template() -> XlsxInitTemplet {
XlsxInitTemplet::new_advance("/home/feiy/Desktop/temp.xlsx", 3)
}
fn get_output_file_name_advance(groupt_id: &str) -> String {
format!("/tmp/advance-{groupt_id}.xlsx")
}
}
#[test]
fn test_template_output() {
let data = vec![
MyData2::new("张三", "185xxxx2228", "网金部"),
MyData2::new("李四", "185xxxx2229", "运管部"),
MyData2::new("王二", "185xxxx2230", "网金部"),
];
let resp = MyData2::write2xlsx_merge_only(
&data,
#[cfg(feature = "encrypt")]
None,
);
println!("{resp:#?}");
}
struct MyData3 {
pub name: String,
pub tel: String,
pub dep: String,
}
impl MyData3 {
pub fn new(name: &str, tel: &str, dep: &str) -> Self {
Self {
name: name.into(),
tel: tel.into(),
dep: dep.into(),
}
}
}
impl XlsxGroupWrite for MyData3 {
const LINE_WRITER_MODEL: XlsxLineWriterModel = XlsxLineWriterModel::Advance;
fn line_writer_advance(
&self,
sheet: &mut Worksheet,
index: u32,
) -> Option<XlsxLineAdvanceWriterResult> {
xlsx_util::XlsxWriterTool::set_excel_cell_value_number(sheet, 1, index, index - 2);
xlsx_util::XlsxWriterTool::set_excel_cell_value_str(sheet, 2, index, &self.name);
xlsx_util::XlsxWriterTool::set_excel_cell_value_str(sheet, 3, index, &self.tel);
xlsx_util::XlsxWriterTool::set_excel_cell_value_str(sheet, 4, index, &self.dep);
None
}
fn get_template() -> XlsxInitTemplet {
XlsxInitTemplet::new_advance("/home/feiy/Desktop/temp.xlsx", 4)
}
fn get_output_file_name_advance(groupt_id: &str) -> String {
format!("/tmp/advance-{groupt_id}.xlsx")
}
fn add_custom_info_to_sheet(sheet: &mut Worksheet, group_id: &str) {
sheet
.get_cell_mut((&1, &2))
.set_value_string(&format!("{group_id},报表日期:2023年4月20日"));
}
}
#[test]
fn test_advance_write() {
let data = vec![
MyData3::new("张三", "185xxxx2228", "网金部"),
MyData3::new("李四", "185xxxx2229", "运管部"),
MyData3::new("王二", "185xxxx2230", "网金部"),
];
let resp = MyData3::write2xlsx_merge_only(
&data,
#[cfg(feature = "encrypt")]
None,
);
println!("{resp:#?}");
}