1. 程式人生 > >使用Xlnt來處理Excel資料

使用Xlnt來處理Excel資料

/*
2018-10-15 16:59:12
使用開源庫Xlnt來處理Excel檔案(支援可讀可寫)
*/
直接在Git上搜索Xlnt就可以得到結果

如何使用Xlnt獲取Excel表的具體某一項的資料
首先使用
auto cols = ws.columns();    //用這個來確定有幾列    得到最大的列數

cols[0][0].value<std::string>();    //來獲取一個string的變數 表示0列0行 xlnt也是從0開始計算下標的

rows[0][0].value<std::string>();    //來獲取一個string的變數 表示0行0列 xlnt也是從0開始計算下標的

通過這種方法 就可以簡單的獲取到 某一行某一列的值

在一個Excel檔案中有多個sheet 這種情況 怎麼判斷是那個sheet中的資料 在使用?

通過呼叫介面:
sheet_by_title 來開啟不同的sheet 子表

//常用的一個業務流程
Step1 首先開啟一個Excel表
    workbook wb;
    wb.load(路徑);
Step2 根據開啟的Excel表 得到含有幾個sheet
    wb.sheet_titles(); 返回一個vecor<string> 注意這個string的vector 如果含有中文會亂碼 需要轉換一下 Win32轉換成ASCII來顯示
    Unicode的格式下 直接轉換成Unicode格式就可以顯示了
Step3

根據得到的sheet名字 可以開啟對應的sheet表 這樣可以開啟指定的sheet表
    wb.sheet_by_title(sheet名字)    然後根據開啟的sheet 處理資料
Step4 處理相關的資料
    auto cols = ws.columns();    //返回值是一個rang 
    返回的cols類似一個二維陣列 然後可以開始處理資料
例如指定開啟A1的資料
    cols[0][0].value<std::string>();    //以string型別得到A1的資料
    
在使用sheet_by_title的時候 發現中文路徑進入會出錯(等著後面支援wstring 或者自己封裝一下 做個介面)
在知道有多少sheet的前提下 還可以使用index來訪問sheet
sheet_by_index 只需要提供下標即可

可以通過使用Xlnt來獲得Excel的支援

程式碼片段

workbook wb;
    wb.load("D:\\WindowsProgram\\xlnt-master\\TestXlnt\\demo01.xlsx");

    worksheet ws = wb.active_sheet();
    auto cols = ws.columns();    //返回值是一個rang
    auto rows = ws.rows();
    int ColLength = cols.length();    //獲得有效的列數
    int RowLength = rows.length();    //獲的有效的行數
    std::cout << "demo01有效列數為: " << ColLength << std::endl;
    std::cout << "demo01有效行數為: " << RowLength << std::endl;

    //取得指定一行一列的值 下標從0開始 例如 0,0 表示的就是A1    0,1表示B1 表示第1列第0行
    std::string A1Value = cols[0][0].value<std::string>();
    std::string B1Value = rows[0][2].value<std::string>();

    //將string 轉換成UTF8進行輸出
    B1Value = UTF8ToANSI(B1Value);
    
    std::cout << A1Value << std::endl;
    std::cout << B1Value << std::endl;

通過以上的方法 就可以有效的獲取到指定單元格的值了