原創|使用教程|編輯:何躍|2022-01-06 11:00:24.437|閱讀 1163 次
概述:我們在一些項目中僅需要導出簡單的數據至Excel,這個過程有很多方法,但是今天我將為您分享的是在C++中導出自定義格式的Excel實現方法。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
本篇將分享如何導出如上圖供貨清單的代碼實例
第一步:下載LibXL類庫
第二步:新建項目并引入
#include "libxl.h" #include <sstream> using namespace libxl;第三步:主要功能實現
Book* book = xlCreateBook(); int logoId = book->addPicture(L"logo.png"); // 字體預設,包含字號、字色等,可以提前定義幾個 Font* textFont = book->addFont(); textFont->setSize(8); textFont->setName(L"Century Gothic"); Font* titleFont = book->addFont(textFont); titleFont->setSize(38); titleFont->setColor(COLOR_GRAY25); Font* font12 = book->addFont(textFont); font12->setSize(12); Font* font10 = book->addFont(textFont); font10->setSize(10); // 格式預設,比如對齊、文本格式、邊框格式等 Format* textFormat = book->addFormat(); textFormat->setFont(textFont); textFormat->setAlignH(ALIGNH_LEFT); Format* titleFormat = book->addFormat(); titleFormat->setFont(titleFont); titleFormat->setAlignH(ALIGNH_RIGHT); Format* companyFormat = book->addFormat(); companyFormat->setFont(font12); Format* dateFormat = book->addFormat(textFormat); dateFormat->setNumFormat(book->addCustomNumFormat(L"[$-409]mmmm\\ d\\,\\ yyyy;@")); Format* phoneFormat = book->addFormat(textFormat); phoneFormat->setNumFormat( book->addCustomNumFormat(L"[<=9999999]###\\-####;\\(###\\)\\ ###\\-####") ); Format* borderFormat = book->addFormat(textFormat); borderFormat->setBorder(); borderFormat->setBorderColor(COLOR_GRAY25); borderFormat->setAlignV(ALIGNV_CENTER); Format* percentFormat = book->addFormat(borderFormat); percentFormat->setNumFormat(book->addCustomNumFormat(L"#%_)")); percentFormat->setAlignH(ALIGNH_RIGHT); Format* textRightFormat = book->addFormat(textFormat); textRightFormat->setAlignH(ALIGNH_RIGHT); textRightFormat->setAlignV(ALIGNV_CENTER); Format* thankFormat = book->addFormat(); thankFormat->setFont(font10); thankFormat->setAlignH(ALIGNH_CENTER); Format* dollarFormat = book->addFormat(borderFormat); dollarFormat->setNumFormat( book->addCustomNumFormat(L"_($* # ##0.00_);_($* (# ##0.00);_($* -??_);_(@_)") ); // 數據填充,先根據我們自定義內容按照坐標添加sheet、title、綁定格式等 Sheet* sheet = book->addSheet(L"Sales Receipt"); sheet->setDisplayGridlines(false); sheet->setCol(1, 1, 36); sheet->setCol(0, 0, 10); sheet->setCol(2, 4, 11); sheet->setRow(2, 47.25); sheet->writeStr(2, 1, L"Sales Receipt", titleFormat); sheet->setMerge(2, 2, 1, 4); sheet->setPicture(2, 1, logoId); sheet->writeStr(4, 0, L"Apricot Ltd.", companyFormat); sheet->writeStr(4, 3, L"Date:", textFormat); sheet->writeFormula(4, 4, L"TODAY()", dateFormat); sheet->writeStr(5, 3, L"Receipt #:", textFormat); sheet->writeNum(5, 4, 652, textFormat); sheet->writeStr(8, 0, L"Sold to:", textFormat); sheet->writeStr(8, 1, L"John Smith", textFormat); sheet->writeStr(9, 1, L"Pineapple Ltd.", textFormat); sheet->writeStr(10, 1, L"123 Dreamland Street", textFormat); sheet->writeStr(11, 1, L"Moema, 52674", textFormat); sheet->writeNum(12, 1, 2659872055, phoneFormat); sheet->writeStr(14, 0, L"Item #", textFormat); sheet->writeStr(14, 1, L"Description", textFormat); sheet->writeStr(14, 2, L"Qty", textFormat); sheet->writeStr(14, 3, L"Unit Price", textFormat); sheet->writeStr(14, 4, L"Line Total", textFormat); for(int row = 15; row < 38; ++row) { sheet->setRow(row, 15); for(int col = 0; col < 3; ++col) { sheet->writeBlank(row, col, borderFormat); } sheet->writeBlank(row, 3, dollarFormat); std::wstringstream stream; stream << "IF(C" << row + 1 << ">0;ABS(C" << row + 1 << "*D" << row + 1 << ");\"\")"; sheet->writeFormula(row, 4, stream.str().c_str(), dollarFormat); } sheet->writeStr(38, 3, L"Subtotal ", textRightFormat); sheet->writeStr(39, 3, L"Sales Tax ", textRightFormat); sheet->writeStr(40, 3, L"Total ", textRightFormat); sheet->writeFormula(38, 4, L"SUM(E16:E38)", dollarFormat); sheet->writeNum(39, 4, 0.2, percentFormat); sheet->writeFormula(40, 4, L"E39+E39*E40", dollarFormat); sheet->setRow(38, 15); sheet->setRow(39, 15); sheet->setRow(40, 15); sheet->writeStr(42, 0, L"Thank you for your business!", thankFormat); sheet->setMerge(42, 42, 0, 4); // 數據寫入,也是沿襲上述方法,根據定位填寫,開發人員可以根據數據結構自定義該過程 sheet->writeNum(15, 0, 45, borderFormat); sheet->writeStr(15, 1, L"Grapes", borderFormat); sheet->writeNum(15, 2, 250, borderFormat); sheet->writeNum(15, 3, 4.5, dollarFormat); sheet->writeNum(16, 0, 12, borderFormat); sheet->writeStr(16, 1, L"Bananas", borderFormat); sheet->writeNum(16, 2, 480, borderFormat); sheet->writeNum(16, 3, 1.4, dollarFormat); sheet->writeNum(17, 0, 19, borderFormat); sheet->writeStr(17, 1, L"Apples", borderFormat); sheet->writeNum(17, 2, 180, borderFormat); sheet->writeNum(17, 3, 2.8, dollarFormat); // 保存表格并釋放資源 book->save(L"receipt.xls"); book->release();以上,如果感興趣的朋友可以揣摩一下這幾個步驟,預設字體、格式、填充數據,是不是很簡單呢。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn