xlslib是一个开源免费的xls生成库。不需要安装office。
编译:
在windows下编译是比较简单的,直接定位到目录xlslib\build下找对应VS版本,如果使用新版本可以使用旧版本的升级。当然些项目文件有些坑,编译不过的对应修改,还有就是配置不对,比如2012的目录还是2010导致后面找不到文件。这些都要仔细修改一下。此外它本身没有使用def也没有在头文件定义__declspec(dllexport) 导出之类,所以只生成dll是没有lib文件的。它提供了一个createDLL的项目,大概看了下好像是通过项目生成时生成map文件,然后通过map文件,生成DEF文件,再调用link.exe 生成dll和lib。
简单使用,lib和头文件根据实现位置调整。切换表好像不支持通过表名来切换,当然试了下,excel里是不能有同名表名的,所以自己建立一个map来保存表名和对应idx就行了。此外dump不支持宽字符,自己加一个就行了,这样可以避免在一些外语系统上使用中文文件名保存出问题的情况。
# define CPP_BRIDGE_XLS
#include "..\xlslibsrc\xlslib.h"
#ifdef WIN64
#pragma comment(lib,"../lib/xlslib_dll_x64.lib")
#else
#pragma comment(lib,"../lib/xlslib_dll.lib")
#endif // X64
class CXlsLib
{
private:
// 单元格
//cell_t* cell;
//font_t* _font;
//xf_t* xf;
// //pWS->defaultColwidth(25); //设置默认列宽
//pWS->defaultRowHeight(30); //设置默认行高
//_font = pWB.font("Arial");
//_font->SetBoldStyle(BOLDNESS_BOLD); // 设置粗字体
//_font->SetHeight(220); //设置字体大小11
//xf = pWB.xformat();
//xf->SetFont(_font);
//xf->SetFillBGColor(CLR_WHITE);
//xf->SetFillFGColor(CLR_RED);
// 工作簿
workbook m_pWB;
// 当前操作的工作表
worksheet* m_pWS=NULL;
public:
//获取工作簿
workbook& GetWorkBook()
{
return m_pWB;
}
//获取当前工作表
worksheet* GetCurWorksheet()
{
return m_pWS;
}
//创建新工作表
worksheet* CreateWorkSheet(const std::wstring& SheetName)
{
m_pWS = m_pWB.sheet(SheetName);
if (m_pWS)
{
m_pWS->MakeActive();
return m_pWS;
}
return NULL;
}
//切换表
worksheet* SelWordSheet(unsigned16_t SheetIdx)
{
worksheet* _pWS = m_pWB.GetSheet(SheetIdx);
if (_pWS)
{
_pWS->MakeActive();
m_pWS = _pWS;
}
return _pWS;
}
//从0开始
cell_t* InsData(int row, int col, const std::wstring str)
{
if (m_pWS)
return m_pWS->label(row, col, str);
return NULL;
}
//从0开始
cell_t* InsData(int row, int col, double num)
{
if (m_pWS)
return m_pWS->number(row, col, num);
return NULL;
}
//保存成xls文件
int SaveExcelFile(const std::wstring& FileName)
{
return m_pWB.Dump(FileName);
}
};