zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

iOS使用libxlsxwriter导出excel文件

2023-09-11 14:14:25 时间

使用cocoapods导入libxlsxwriter,导入头文件:

pod libxlsxwriter

生成xlsx

创建表格workbook,和工作表worksheet

lxw_workbook  *workbook  = workbook_new([path UTF8String]);// 创建新xlsx文件,路径需要转成c字符串
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);// 创建sheet
    

保存生成文件:

workbook_close(workbook);

设置列宽:

// 设置列宽
/* 五个参数分别是:
 worksheet    Pointer to a lxw_worksheet instance to be updated.
 first_col    The zero indexed first column.
 last_col    The zero indexed last column.
 width    The width of the column(s).
 format    A pointer to a Format instance or NULL.
 从第first_col到last_col的列的宽度为width,索引从0开始 */
worksheet_set_column(worksheet, 0, 2, 20, NULL);
worksheet_set_column(worksheet, COLS("Name:Type"), 5, NULL);

单元格属性设置:

设置单元格格式使用lxw_format,可以设置字体、颜色、对齐方式、边框等等所有属性。具体属性可阅读参考格式文档

  • 新建单元格格式对象:
lxw_format *format = workbook_add_format(workbook);
  • 字体设置:
format_set_bold(format);// 加粗
format_set_font_color(format, LXW_COLOR_RED);//颜色
format_set_align(format, LXW_ALIGN_CENTER);// 水平居中
format_set_align(format, LXW_ALIGN_VERTICAL_CENTER);//垂直居中
format_set_border(format, LXW_BORDER_MEDIUM);// 边框(四周):中宽边框
format_set_right(format, LXW_BORDER_DOUBLE);// 右边框:双线边框
format_set_num_format(format, "¥#,##0.00");

单元格写入数据:

/*第一个参数是工作表
 第二个参数是行数(索引从0开始)
 第三个参数是列数(索引从0开始)
 第四个参数是写入的内容
 第五个参数是单元格样式,可为NULL。*/

// 写入文字
worksheet_write_string(worksheet, 1, 0, "Hello", format);
worksheet_write_string(worksheet, 1, 1, "World", NULL);
// 写入数字
worksheet_write_number(worksheet, 2, 0, 123.456, format);
worksheet_write_number(worksheet, 3, 0, 123.456, NULL);
worksheet_write_formula(worksheet, 4, 0, "=SUM(A3:A4)", format);
  • 标题栏固定
worksheet_freeze_panes(worksheet, 1, 2);// 标题栏:前1行、前2列固定

完整代码: 

    lxw_workbook  *workbook  = workbook_new([path UTF8String]);// 创建新xlsx文件,路径需要转成c字符串
    lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);// 创建sheet
    
    // 添加格式
    lxw_format *format = workbook_add_format(workbook);
    
    //设置格式
    format_set_bold(format);
    format_set_font_color(format, LXW_COLOR_RED);
    format_set_align(format, LXW_ALIGN_CENTER);// 水平居中
    format_set_align(format, LXW_ALIGN_VERTICAL_CENTER);//垂直居中
    format_set_border(format, LXW_BORDER_MEDIUM);// 边框(四周):中宽边框
    format_set_right(format, LXW_BORDER_DOUBLE);// 右边框:双线边框
    format_set_num_format(format, "¥#,##0.00");
    
    // 设置列宽
    /* 五个参数分别是:
     worksheet    Pointer to a lxw_worksheet instance to be updated.
     first_col    The zero indexed first column.
     last_col    The zero indexed last column.
     width    The width of the column(s).
     format    A pointer to a Format instance or NULL.
     从第first_col到last_col的列的宽度为width,索引从0开始 */
    worksheet_set_column(worksheet, 0, 2, 20, NULL);
    worksheet_set_column(worksheet, 3, 4, 30, format);
    
    //写入数据
    /*第一个参数是工作表
    第二个参数是行数(索引从0开始)
    第三个参数是列数(索引从0开始)
    第四个参数是写入的内容
    第五个参数是单元格样式,可为NULL。*/
    worksheet_write_string(worksheet, 0, 0, "Name", NULL);
    worksheet_write_string(worksheet, 0, 1, "Type", NULL);
    worksheet_write_string(worksheet, 0, 2, "City", NULL);
    worksheet_write_string(worksheet, 0, 3, "Address", NULL);
    worksheet_write_string(worksheet, 0, 4, "Mobile", NULL);
    
    for (int i = 0; i < models.count; i ++) {
        PoiResultModel *model = models[i];
        worksheet_write_string(worksheet, i+1, 0, model.name.UTF8String, NULL);
        worksheet_write_string(worksheet, i+1, 1, model.type.UTF8String, NULL);
        worksheet_write_string(worksheet, i+1, 2, model.city.UTF8String, NULL);
        worksheet_write_string(worksheet, i+1, 3, model.address.UTF8String, NULL);
        worksheet_write_string(worksheet, i+1, 4, model.tel.UTF8String, NULL);
    }
    //关闭,保存文件
    workbook_close(workbook);