iOS 生成Excel.xlsx文件

前言

想要用iOS原生直接導(dǎo)出xls文件,在網(wǎng)上查了下資料,發(fā)現(xiàn)iOS原生導(dǎo)出Excel文件的方法,在網(wǎng)上基本就兩種方法:

  • 使用LibXL
    這個(gè)庫很強(qiáng)大,具有Excel上的所有屬性設(shè)置,這個(gè)庫也很貴:199刀。我知道國內(nèi)沒有多少人愿意買,免費(fèi)版的也可以用,但是生成的文件第一行會(huì)有Created by LibXL trial version. Please buy the LibXL full version for removing this message.字樣,而且據(jù)說有行數(shù)限制。(光第一行有廣告就不能忍了?。?/li>
  • 原生系統(tǒng)方法
    在原生里可以利用Excel的換行格式,用系統(tǒng)方法直接寫成xls文件,就可以生成Excel文件了。

但是本文介紹的是第三種方法

  • libxlsxwriter開源庫
    這是在GitHub上無意間發(fā)現(xiàn)的一個(gè)很???的生成Excel文件的第三方開源庫。
    這個(gè)庫是個(gè)C語言庫,可以直接在iOS里使用,而且可以媲美那個(gè)收費(fèi)的LibXL,功能強(qiáng)大,文檔齊全,幾乎包含Excel中的所有屬性設(shè)置。本文要介紹的就是這個(gè)庫的大致使用。

libxlsxwriter使用

libxlsxwriter有非常齊全的文檔,所有函數(shù)、屬性的使用及參數(shù)的含義里面都有詳細(xì)介紹。這里只大致介紹一下常用的屬性設(shè)置。

生成xlsx

使用cocoapods導(dǎo)入libxlsxwriter,導(dǎo)入頭文件:

#import <xlsxwriter.h>

保存文件的路徑:

    // 文件保存的路徑
    NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0];
    NSString *filename = [documentPath stringByAppendingPathComponent:@"c_demo.xlsx"];

創(chuàng)建表格workbook,和工作表worksheet

    // 創(chuàng)建新xlsx文件,路徑需要轉(zhuǎn)成c字符串
    lxw_workbook  *workbook  = workbook_new([filename UTF8String]);
    // 創(chuàng)建sheet
    lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);

保存生成文件:

    workbook_close(workbook);

此時(shí)生成文件c_demo.xlsx,但是沒有寫入內(nèi)容,所以是個(gè)空的xlsx文件。

生成xlsx文件

注:生成文件是在xlsx文件內(nèi)的所有內(nèi)容和單元格格式設(shè)置完畢后執(zhí)行,此處只是介紹如何生成文件。

設(shè)置列寬

     /* Change the column width for clarity.改變列寬
     五個(gè)參數(shù)分別是:
     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, 4, 5, 50, NULL);
    worksheet_set_column(worksheet, COLS("B:D"), 5, NULL);

設(shè)置列寬

worksheet_set_column(worksheet, COLS("B:D"), 5, NULL);此句等同于worksheet_set_column(worksheet, 1, 3, 5, NULL);
注:兩個(gè)worksheet_set_column列寬設(shè)置里的列數(shù)不能重復(fù),否則前面設(shè)置的列數(shù)全部無效

單元格屬性設(shè)置

設(shè)置單元格格式使用lxw_format,可以設(shè)置字體、顏色、對齊方式、邊框等等所有屬性。具體屬性可閱讀參考格式文檔

  • 新建單元格格式對象:
    lxw_format *format = workbook_add_format(workbook);
  • 字體設(shè)置:
    format_set_bold(format);// 加粗
    format_set_font_color(format, LXW_COLOR_RED);//顏色
  • 設(shè)置對齊方式,所有對齊參數(shù)設(shè)置參閱:format_set_align
    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");

單元格寫入數(shù)據(jù)

  • 寫入文本和數(shù)字:
    • 第一個(gè)參數(shù)是工作表
    • 第二個(gè)參數(shù)是行數(shù)(索引從0開始)
    • 第三個(gè)參數(shù)是列數(shù)(索引從0開始)
    • 第四個(gè)參數(shù)是寫入的內(nèi)容
    • 第五個(gè)參數(shù)是單元格樣式,可為NULL。
    // 寫入文字
    worksheet_write_string(worksheet, 1, 0, "Hello", format);
    worksheet_write_string(worksheet, 1, 1, "World", NULL);

    // 寫入數(shù)字
    worksheet_write_number(worksheet, 2, 0, 123.456, format);
    worksheet_write_number(worksheet, 3, 0, 123.456, NULL);
  • 數(shù)學(xué)公式,具體使用參閱:worksheet_write_formula
    在(4,0)位置即A5上輸出A3和A4的和:
    worksheet_write_formula(worksheet, 4, 0, "=SUM(A3:A4)", format);
  • 標(biāo)題欄固定
    worksheet_freeze_panes(worksheet, 1, 2);// 標(biāo)題欄:前1行、前2列固定
設(shè)置屬性、寫入數(shù)據(jù)

這些屬性差不多夠平時(shí)使用的了,想要了解更多屬性請閱讀文檔,里面介紹的都很詳細(xì),這里就不再細(xì)述了。

本文中所有設(shè)置的源碼:

    // 文件保存的路徑
    NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0];
    NSString *filename = [documentPath stringByAppendingPathComponent:@"c_demo.xlsx"];
    NSLog(@"filepath:%@",filename);

    lxw_workbook  *workbook  = workbook_new([filename UTF8String]);// 創(chuàng)建新xlsx文件,路徑需要轉(zhuǎn)成c字符串
    lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);// 創(chuàng)建sheet

    // 添加格式
    lxw_format *format = workbook_add_format(workbook);

    //設(shè)置格式
    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");

    // 設(shè)置列寬
    worksheet_set_column(worksheet, 4, 5, 50, NULL);
    worksheet_set_column(worksheet, COLS("B:D"), 5, NULL);

    //寫入數(shù)據(jù)
    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);// 標(biāo)題欄:前一行、前2列懸停固定

    //關(guān)閉,保存文件
    workbook_close(workbook);



我做的demo

用代碼生成了一個(gè)報(bào)銷表格供自己用,不用每個(gè)月去一行一行填了??
樣子如下:

報(bào)銷表格demo.png

demo在此,需要的自己看下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,688評論 19 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,512評論 6 13
  • 轉(zhuǎn)自鏈接 目錄 1.認(rèn)識NPOI 2.使用NPOI生成xls文件 2.1創(chuàng)建基本內(nèi)容 2.1.1創(chuàng)建Workboo...
    腿毛褲閱讀 11,165評論 1 3
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,329評論 2 33
  • 愛情是一種精神的鴉片,你越不來,我越渴望。 一、寂寞還是愛 我曾經(jīng)談過許多姑娘。 或者愛她或者僅僅想上她。 根據(jù)我...
    不好意思鮑亮不在家閱讀 778評論 5 3

友情鏈接更多精彩內(nèi)容