C++操作Excel,xlnt库的使用

1、xlnt是用于在内存中操作Excel表格和.xlsx文件中读取/写入Excel表格的C++库。

2、IDE:Visual Studio 2015。

     2.1、工程环境:

      》dll文件

      》lib库文件

      》头文件

     2.2设置项目属性

             右击属性--》配置属性--》VC++目录--》包含目录

      链接器--》输入--》附加依赖项,加入:$(SolutionDir)lib\xlntd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

3、main.cpp

// TestXlnt.cpp : 
//

#include "stdafx.h"
#include <Windows.h>
#include <xlnt/xlnt.hpp>

//Unicode 转 utf-8
bool WStringToString(const std::wstring &wstr, std::string &str)
{
	int nLen = (int)wstr.length();
	int nDesSize = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)wstr.c_str(), nLen, NULL, 0, NULL, NULL);
	str.resize(nDesSize, '\0');

	int nResult = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)wstr.c_str(), nLen, (LPSTR)str.c_str(), nDesSize, NULL, NULL);

	if (nResult == 0)
	{
		//DWORD dwErrorCode = GetLastError();
		return FALSE;
	}

	return TRUE;
}

int main()
{
	const char Signal_0Name[][16] = { "id","chID","PTCPCBTem"," PTCOverHeat",  "PTCOverCrnt","PTCOverVol"," PTCRlngCtr" ,"PTCActuCrnt","PTCActuPwr", "Ptc_work_statu","PTCUnderVol","PTCIGBTSts"," PTCHVLckSts","PTCIGBTOverHeat" ,"PTCChksm" };
	const char Signal_1Name[][16] = { "id","chID","PTCSecRlngCtr", "PTCActuVol", " PTCINNTCSts","PTCOUTNTCSts", "PTCIGBTNTCSts" ,"PTCIGBTTem","PTCInptTem", "PTCOtptTem","PTCSecChksm" };

	try
	{
		xlnt::workbook wb;
		xlnt::worksheet sheetMain = wb.active_sheet();
		xlnt::worksheet sheet1 = wb.copy_sheet(sheetMain);
		xlnt::worksheet sheet2 = wb.copy_sheet(sheet1);

		//----------------sheetmain----------------------------------------------
		//常规操作
		sheetMain.cell("A1").value(5);
		sheetMain.cell("B2").value("string data");
		sheetMain.cell("C3").formula("=RAND()");
		//中文处理
		std::string strDes;
		WStringToString(L"测试", strDes);
		sheetMain.cell(5, 5).value(strDes);

		sheetMain.title("main");

		//----------------sheet1----------------------------------------------
		//行批量写入
		for (int i = 0; i<15; i++)
		{
			sheet1.cell(i + 1, 1).value(Signal_0Name[i]);
		}
		//常规操作
		sheet1.cell("A2").value(5);
		sheet1.cell("B3").value("string data");
		sheet1.cell("C4").formula("=RAND()");

		//合并单元格
		sheet1.merge_cells("C3:C4");
		sheet1.freeze_panes("B2");

		sheet1.title("sheet1");

		//----------------sheet2----------------------------------------------
		//列批量写入
		for (int i = 0; i<11; i++)
		{
			sheet2.cell(1, i + 1).value(Signal_1Name[i]);
		}
		sheet2.cell("C1").value("C1");
		sheet2.cell("B1").value("B1");
		sheet2.title("sheet2");
		sheet2.freeze_panes("B2");

		wb.save("test.xlsx");
	}
	catch (std::exception e)
	{
		std::string s = e.what();
	}

    return 0;
}

4、生成文件

sheetmain

sheet1

sheet2

 

xlnt支持设置字体,文件加密等功能,具体请移步官方文档。

  • 19
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
可以通过以下步骤使用VBA语言操作Excel表格: 1. 在QT中添加ActiveX组件:选择菜单栏中的“工具”->“选项”,在左侧列表中选择“构建和运行”,然后在右侧的“构建设置”中选择“QT版本”,勾选“QT中添加ActiveX支持”,然后点击“确定”进行保存。 2. 在QT中添加Excel控件:选择菜单栏中的“设计”->“添加控件”,在弹出的“添加控件”对话框中选择“Microsoft Excel 16.0 Object Library”(根据你的Excel版本选择),然后点击“确定”进行添加。 3. 在QT中添加代码:在QT的代码编辑器中添加VBA代码,例如: ``` #include <ActiveQt/QAxObject> QAxObject* excel = new QAxObject("Excel.Application", this); excel->dynamicCall("SetVisible(bool)", false); QAxObject* workbooks = excel->querySubObject("Workbooks"); QAxObject* workbook = workbooks->querySubObject("Open(const QString&)", "D:\\example.xlsx"); QAxObject* worksheet = workbook->querySubObject("Worksheets(const QString&)", "Sheet1"); QAxObject* cell = worksheet->querySubObject("Cells(int,int)", 1, 1); cell->dynamicCall("SetValue(const QString&)", "Hello World!"); workbook->dynamicCall("Save()"); workbook->dynamicCall("Close()"); excel->dynamicCall("Quit()"); delete excel; ``` 这段代码使用了ActiveQt中的QAxObject类来调用Excel的COM接口,完成了打开Excel文件、读写单元格、保存关闭Excel操作。 注意:在使用VBA语言操作Excel表格时,需要保证Excel已经安装在电脑中,并且需要开启Excel的宏功能。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值