使用Xlnt來處理Excel資料
阿新 • • 發佈:2018-11-17
/*
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
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;
通過以上的方法 就可以有效的獲取到指定單元格的值了