原創(chuàng)|使用教程|編輯:何躍|2022-01-06 11:00:24.437|閱讀 1181 次
概述:我們在一些項目中僅需要導(dǎo)出簡單的數(shù)據(jù)至Excel,這個過程有很多方法,但是今天我將為您分享的是在C++中導(dǎo)出自定義格式的Excel實現(xiàn)方法。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
本篇將分享如何導(dǎo)出如上圖供貨清單的代碼實例
第一步:下載LibXL類庫
第二步:新建項目并引入
#include "libxl.h" #include <sstream> using namespace libxl;第三步:主要功能實現(xiàn)
Book* book = xlCreateBook();
int logoId = book->addPicture(L"logo.png");
// 字體預(yù)設(shè),包含字號、字色等,可以提前定義幾個
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);
// 格式預(yù)設(shè),比如對齊、文本格式、邊框格式等
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);_($* -??_);_(@_)")
);
// 數(shù)據(jù)填充,先根據(jù)我們自定義內(nèi)容按照坐標(biāo)添加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);
// 數(shù)據(jù)寫入,也是沿襲上述方法,根據(jù)定位填寫,開發(fā)人員可以根據(jù)數(shù)據(jù)結(jié)構(gòu)自定義該過程
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();
以上,如果感興趣的朋友可以揣摩一下這幾個步驟,預(yù)設(shè)字體、格式、填充數(shù)據(jù),是不是很簡單呢。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@ke049m.cn