快速开始(C++)
本节用 C++ 演示了一个简单的用例,展示了如何使用 oosxl 库函数,例如创建 xlsx 文档,设置单元格内容,以及设置单元格格式等方法。
第一步,包含 oosxl 库的头文件:
#include "oosxl.hxx"
第二步,在main函数中,使用无参的 create_document() 函数创建一个空白文档或者使用 load_document() 从某个 xlsx 文件中加载文档。
Document* doc = create_document(); // Create a blank document
// or
// Document* doc = load_document("path/to/xlsx/file");
如果加载不存在的文件,load_document() 会返回一个空指针,你可以使用下面的方法做出处理:
if (!doc)
{
std::cout << run_msg() << std::endl;
//...
}
备注
oosxl 库不会向外传播异常,要获得程序错误,应使用 run_msg() 函数输出的字符串获取相应的信息(空字符串表示没有错误)。run_msg() 输出的是上一次的错误或提示信息(如果有)。
create_document() 或 load_document() 函数返回一个 Document 指针(示例中的 doc),此指针所指向的实例中隐含了一个 Workbook 指针,指向 xlsx 文档中的 workbook 实例:
Workbook* wb = doc->get_workbook();
第三步,创建或获取 worksheet。
使用 add_worksheet() 创建一个新的 worksheet:
// Create an auto-named worksheet
Worksheet* ws = wb->add_worksheet();
// Create a worksheet named "My Sheet"
Worksheet* ws = wb->add_worksheet("My Sheet");
使用 get_sheet() 获取 worksheet, 参数为基于 0 的位置索引:
// Get the first worksheet
Worksheet* ws = wb->get_sheet(0);
现在,使用返回的 Worksheet 指针 ws,我们就可以与其所指向的 worksheet 实例中的单元格进行交互了。
下面是一个完整的 C++ 程序示例,展示了 oosxl 库的使用方法:
// Step 1: include the header
#include "oosxl.hxx"
#include <iostream>
#include <vector>
using namespace oo;
int main()
{
// Step 2: create a document
Document* doc = create_document();
if (!doc)
{
std::cout << "Error creating document: " << run_msg() << std::endl;
return -1;
}
// Step 3: Get the workbook and worksheet
Workbook* wb = doc->get_workbook();
Worksheet* ws = wb->add_worksheet(); // Get the worksheet
if (!ws)
{
std::cout << "Error adding worksheet: " << run_msg() << std::endl;
doc->release();
return -1;
}
// Set titles
std::vector<std::string> titles = { "Item", "Units", "Unit Cost", "Total" };
for (int col = 0; col < titles.size(); ++col)
ws->set_text(2, col + 2, titles[col].c_str());
// Set the first column
std::vector<std::string> column1 = { "Baby doll", "Kite", "Toy guitar" };
for (int row = 0; row < 3; ++row)
ws->set_text(row + 3, 2, column1[row].c_str());
// Set the second column
std::vector<int> column2 = { 95, 60, 75 };
for (int row = 0; row < 3; ++row)
ws->set_num(row + 3, 3, column2[row]);
// Set the third column
std::vector<double> column3 = { 1.99, 2.99, 6.99 };
for (int row = 0; row < 3; ++row)
ws->set_num(row + 3, 4, column3[row]);
// Set the fourth column
ws->set_formula(3, 5, "=C3*D3");
ws->set_formula(4, 5, "=C4*D4");
ws->set_formula(5, 5, "=C5*D5");
// Merge cell(6,2) - cell(6,4)
ws->merge(6, 2, 6, 4);
ws->set_text(6, 2, "Total");
// Set total
ws->set_formula(6, 5, "=SUM(E3:E5)");
Style* fmt = wb->make_normal_style();
// Add borders
fmt->set_border(BORDERINDEX_EDGE, BORDER_THICK);
fmt->set_border(BORDERINDEX_INSIDE, BORDER_THIN);
ws->set_range_style(2, 2, 6, 5, fmt);
// Set title style
fmt->unapply_all();
fmt->set_align_h(HALIGN_CENTER);
fmt->set_align_v(VALIGN_CENTER);
fmt->set_pattern_fg_color(0xDDDDDD);
fmt->set_fill_pattern(PATTERNTYPE_SOLID);
ws->set_range_style(2, 2, 2, 5, fmt);
// Save document
if (!doc->save("example.xlsx"))
{
std::cout << "Error saving file: " << run_msg() << std::endl;
doc->release();
return -1;
}
doc->release();
return 0;
}
使用 microsoft Excel 应用程序打开 example.xlsx 文件,以验证输出结果: